Домой Программирование Программирование для начинающих и не только

Программирование для начинающих и не только

by dilix
Программирование для начинающих

Обучение программированию — очевидный тренд. Даже при высоких зарплатах спрос на хороший разработчиков превышает предложение. Все это, в купе с возможностью в IT работать удаленно подталкивает все больше людей научиться программировать.

Давайте разберемся какие навыки точно нужно развивать, чтобы повысить свои шансы быть успешным разработчиком. Затронем так называемые Hard и Soft скилы, зачем они нужны и что дают программисту.

Про программистов

Раньше мечтал делать игры

Кроме очевидных плюсов, как то зарплата, «независимость» и т.д. есть ряд минусов, про которые надо помнить перед тем как решить идти в программирование.

  • Вы 5-8+ часов в день будете общаться исключительно с компьютером. Это накладывает свой отпечаток.
  • Иногда поиск и правка одного бага может занять весь день. Потраченное время может показаться несоизмеримо сделанной работе и немного удручать.
  • IT стремительно развивается. Следовательно вам нужно будет учиться. Всегда.
  • Большинство ресурсов, примеров и ответов на вопросы будут на английском. Это значит его надо знать.

Обучение программированию

Итак, вы окончательно решили освоить профессию программиста. Встает резонный вопрос — с чего начать. Абсолютно независимо от выбранной сферы на первых порах наставник, более опытный товарищ, да кто угодно, кого можно будет немного помучать вопросами — must have. Это сэкономит массу времени и задаст правильный вектор развития.

Языки программирования

Сам смысл «программирование» не привязан к языку. Задача разработчика — объяснить машине что он от нее хочет. Язык программирования — всего лишь инструмент как это сделать.

Тут как и у людей, на каком языке говорить зависит от того, кому вы это говорите. Вряд ли вы будете Итальянцу что-то объяснять по-русски, верно? Но идея того, что вы хотите донести — не привязана ни к русскому, ни к итальянскому.

Вы выбираете язык программирования в зависимости от того, какие перед вами стоят задачи. Если это разработка под Android — то Kotlin или Java. iOS = Swift. Обработка текстов и изображений? Скорее всего это будет Python.

Основы программирования

Чтобы понять программу, нужно мыслить как программа

Программа — набор последовательных действий. Конкретных действий. Не получиться отделаться «ну тут примерно вот так должно работать». Аналогично ваши мысли и действия — они должны быть максимально конкретными, понятными и последовательными.

Нужна определенная аккуратность, если не сказать педантичность. При обучении программированию не достаточно взять кусок  кода, вставить, убедиться что он работает и радоваться. Тут необходимо понимание, что как и почему работает, зачем применен конкретный алгоритм и можно ли использовать другой тип данных.

Все, что выделяется как «основы программирования», лаконично вытекают из аккуратного и последовательного представления алгоритма. Давайте на простом примере рассмотрим как эти основы формируются.

Представим, что есть совершенно реальная задача.

«Есть таблица результатов с очередного соревнования.  Надо составить отсортированную таблицу участников».

Пройдемся по «основам» и посмотрим на каждый пункт.  У нас будет 2 действующих лица, (О)бычный человек и (П)рограммист.

Типы данных. Переменные.

О: «Ну да, есть результаты, погнали…»

П: «Постойте, а что имеется в виду под результатами? Это целое число или дробное? А может быть на входе у нас список оценок по разным этапам соревнования?»

Отсюда и вытекает понятие разных типов данных. Это могут быть целые числа — Integer. Дробные с точкой — Float или Double.

Каждый тип данных имеет свои границы и может занимать разный размер в памяти.

Оператор цикла

О: «Ну мы просто возьмем и все расположим по возрастанию»

П: «Для начала нужно перебрать всех участников один за одним…»

Такой перебор — и есть цикл. Существуют разные вариации, с разными граничными условиями и обходящие структуру данных по разному. Их все объединяет то, что смысл цикла — просто повторять действия пока нам это нужно.

Условный оператор

О: «Ну еще в прошлом абзаце было все понятно — мы возьмем и расположим всё по возрастанию»

П: «… на каждом витке цикла мы будем сравнивать 2 результата. Если результат одного участника лучше чем следующего за ним, то поменяем их местами.»

Условные оператора могут быть простыми

if (var) exp1 else exp2

Или делающие выбор из множества вариантов

switch(var) {
    case o1:...
    case o2:...
}

Смысл опять прост — выбрать следующий шаг нашей программы.

Массивы

О: «У нас результаты просто в виде последовательности чисел…»

П: «Так… А как хранить наши результаты в памяти? Наверное это будет массив»

Массив — способ хранения списка ваших объектов. Т.е. просто соотношение, что на первом месте — объект1, на втором — объект2 и т.д.

В Java чаще оперируют коллекциями. Они могут быть реализованы поверх тех же массивов. Также, один из вариантов — хранить ссылку на следующий элемент — это будет уже список. Реализации таких структур отличаются по производительности относительно разных операций — поиск объекта, вставка в конце или начало и т.д.

Функции

О: «Мы там их просто сортируем, все очевидно».

П: «Сейчас мы сортируем по возрастанию. А что если потом надо будет по убыванию? Или вообще входные данные поменяются, а сортировка должна работать?».

В программировании часть кода можно выделить в обособленную функцию. По сути это просто выделенные шаги программы, которые можно переиспользовать. Зачастую такой функции можно дать имя, чтобы было проще понять что она делает и использовать в дальнейшем.

Все выше сказанные я бы и определил как «основы программирования». Это понимание как, зачем и почему программа работает.


Git

Git естественно не входит в привычное понятия «Основ программирования». Просто на сегодня это то, чем разработчик сегодня просто не может не уметь пользоваться!

Что такое Git? Простыми словами — это программа-сервис, где вы храните вашу работу. Если чуть сложнее — это распределенная система контроля версий. Загружая очередную порцию изменений в коде вашего проекта, git сохраняет их в истории.

Отдельно прочитать про основы работы с Git можно в нашей отдельной статье. Поверьте, сегодня git — точно то, что стоит отнести к основам работы программиста. Потратьте время на его изучение.

Алгоритмы и структуры данных

Часто можно слышать, «алгоритмы» и «структуры данных» как одно целостное словосочетание. Это происходит потому, что зачастую определенный алгоритм работает поверх какой-то определенной структуры. Например:

АлгоритмСтруктура данных
СортировкаМассива
ОбходГрафа
ПоискВ бинарном дереве
РазворотОдносвязного списка

На олимпиадах по программированию участники должны наизусть знать разных хитрые алгоритмы поисков путей в графе, обходов дерева и т.д. В реальной жизни общего представления о том какие задачи можно решить, используя определенную модель данных — достаточно. Например, понимать, что построение индекса по строке может быть эффективна в бинарном префиксном дереве…

Главный вопрос — «зачем мне нужно это знать?». Понимание алгоритмов как таковых формирует то самое аналитическое, последовательное мышление, о котором мы говорили в «основах программирования».

Рассуждения про алгоритмы

Курсы программирования

Когда обсуждали обучение программированию в целом, то говорили о необходимости ментора, того человека, который может подсказать куда копать. Ускорить и упростить процесс получения знаний можно с помощью курсов — как онлайн так и очных. Список платных и бесплатных ресурсов, которые можно использовать при обучении программированию:

  • TutorTop — молодой, но удобный агрегатор онлайн-курсов. Там собраны все курсы онлайн-школ по программированию и другим направлениям.
  • SkillBox — один из ведущих российских «онлайн-университетов». Дорого, но качественно.
  • GeekBrains — образовательный портал с платными и бесплатными курсами от Mail.ru. Хороший выбор.
  • Нетология — университет онлайн профессий.
  • Академия Яндекса — есть далеко не все направления, но стоит заглянуть, особенно если хотите попытаться устроиться на стажировку в Яндекс.
  • Udacity — англоязычные курсы. Есть интересные варианты, например совместно с Google запущенный курс по Advanced Kotlin для Android.
  • Udemy — зачастую недорогие онлайн курсы.
  • StackOverflow — это, конечно, не образовательная платформа как таковая, но ответы на многие вопросы можно найти там. Правда чем выше ваш уровень, тем меньше ответов можно будет получить, но на старте — самое то!
  • PluralSight — удобная онлайн платформа с видео курсами. Есть система «сертификации» по разным вертикалям, которые в том числе можно разместить нативно на StackOverflowСертификация Pluralsight
  • Сообщества и конференции по вашему стеку технологий.  Общайтесь с людьми с теми же интересами в программировании, это позволит посмотреть на уже имеющиеся знания с разных сторон. По Android я веду канал в Телеграмм, где рассказываю про разработку. Также у нас есть Телеграмм Чат для общения с другими Android программистами.

Работа программистом

Когда получены начальные знания, необходимые для программирования, встает вопрос — где их применять. Работу в IT я бы поделил на 2 большие части — работа в офисе и удаленная работа. На эту тему есть старая, но не теряющая актуальности статья про плюсы и минусы разных вариантов.

Работа в офисе

Нормально делай, нормально будет

«Делать правильно» — критически важно на начальных этапах погружения в профессию, т.к. переучиваться намного тяжелее чем учиться. Именно по-этому работа в сильной команде в офисе — лучший выбор для начала карьеры.

Сам по себе офис, если вы единственный разработчик на проекте много не даст. Важно присутствие более опытных коллег. Code review, неформальное общение за чашкой кофе — все это экспоненциально усиливает скорость получения знаний. Тут важна не «слепая вера» в безошибочность старшего товарища, а в общей атмосфере разных точек зрения в комнате. Критическое мышление — ваш помощник, чтобы формировать свое видение решения проблем.

Прежде чем перейти к удаленной работе я прошел путь

  • Небольшая Web студия, которая разрабатывала приложения на заказ.
  • Infotecs — работа в команде над криптопровайдером.
  • Яндекс — работа в команде над браузером.

Удаленная работа

Стоит начать с того, что она подходит не всем. Не из-за уровня знаний в программировании, а потому что она требует большей самоорганизации, самоконтроля и ответственности. Я знаю крутых разработчиков, которым, на мой взгляд, было бы не комфортно работать удаленно.

Коммуникация — вторая большая проблема в удаленной работе. Необходимо поддерживать живое нерабочее общение, которое происходит само собой в офисе. Также — эффективное взаимодействие с вашей командной требует работы от всех. В офисе это на порядок проще. К тому же в офисе изначально все настроено для продуктивной деятельности, а о рабочем месте при удаленке надо думать самостоятельно.

Корпоратив фрилансера

И главное, что важно помнить — при выходе на рынок удаленной работы вы начинаете соревноваться с разработчиками со всех регионов. А при выходе на международную арену — со всем миром. Требования и к уровню программирования и к уровню Soft скиллов выходят на новый уровень.

Кстати и сама удаленная работа делится на 2 класса: фриланс от проекта к проекту и длительный контракт, по сути найм, но при нахождении вне офиса.

Фриланс

К фрилансу я отношу небольшие проекты, которые оплачиваются по факту или же на почасовой ставке. Зачастую ставка на фрилансе в пересчете на час работы может быть выше, чем работа по ТК в офисе или удаленно. Это происходит, потому что поиск проекта, вся работа с документами по сделке и т.д. не учитываются в этом времени. Грубо говоря — получение и согласование заказа на 20 часов заняло у вас еще 5 часов. При ставке 1 000 рублей в час (164т.р. при пересчете в рабочие часы в офисе) реальная ставка 20 * 1000 / 25 = 800 рублей. Ведь вы 5 часов потратили условно бесплатно.

Работа по ТК подразумевает отпуска, праздники и т.д. Фриланс прост как валенок. Работаешь — получаешь деньги, не работаешь — нет. Зато вы сами регулируете свою загрузку. Правда не сразу. Стартовать на фрилансе при сильной конкуренции — сложно. Для наработки портфолио придется тратить больше времени на поиск проекта чем на его реализацию.

На фрилансе проекты ищут либо уже по наработанной базе клиентов, либо на площадках:

  • Weblancer.net — русскоязычный ресурс поиска работы на фрилансе.
  • Fl.ru — наверное крупнейший русскоязычный сайт, посвященный поиску проектов.
  • Freelancer.com — зарубежный сайт поиска работы на фрилансе.
  • Upwork — один из самых известных сайтов по фрилансу на мировой арене.
  • Toptal при почасовой работе — площадка, на которую сложно попасть, но она стоит того.

Постоянная удаленная работа

Разница между фрилансом и удаленной работы для меня в том, что она не подразумевает частую смену проектов. Длительная работа над проектом это большее погружение в разрабатываемый сервис, соучастие и вовлеченность.

Честно говоря, фрилансом, как описал выше я практически не занимался. Первую удаленную работу я нашел через платформу Toptal будучи еще в Яндексе. Это был проект на ~10 месяцев с зарубежным заказчиком на полный удаленный рабочий день.

С момента начала своей удаленной работы я сменил порядка 5 проектов на Toptal. В перерывах между ними мониторил прямые вакансии от зарубежных компаний. Почему зарубежных? В связи с курсом, с 2014 работать с валютой стало намного выгоднее.

В итоге длительный проект нашел на StackOverflow.

Сравнение работы в офисе, фриланса и удаленной работы

Возможное сравнение всех вариантов приведено в таблице. Естественно некоторые опции могут отличаться от случая к случаю.

Работа в офисеФрилансУдаленная работа
Время поиска несоизмеримо короче чем период работы.Можно долго искать короткий проект.Время поиска несоизмеримо короче чем период работы.
Все плюшки оформления по ТК. Страховка, больничные, отпуска и т.д.Никаких социальных льгот и гарантий.Можно договориться на оплачиваемый отпуск. Командировки в офис к клиенту.
Работа 8 часов в день, 5 дней в неделю.Ненормированная загрузка, контролируемая разработчиком.Работа 40 часов в неделю. Главное - результат. Не столь важно сколько времени тратишь в день.
Фиксированная ЗП в месяц соразмерная с регионом проживания.Сам контролируешь уровень дохода. Больше работы - больше заработок.Фиксированная ЗП в месяц. Запросто может быть выше средней в регионе проживания.
Всю бухгалтерию и налоги ведет работодатель.Вся бухгалтерия на вас. При частой смене проектов - много бумажной работы.Вся бухгалтерия на вас. При длительном контракте все идет по шаблону.
Работа привязана к локации офиса работодателя.Работа не привязана к месту.Работа не привязана к месту. Могут быть "командировки" в офис клиента.
Можно найти стажировку для Junior программиста.Конкуренция как минимум на уровне Middle разработчика.Клиент ищет удаленного разработчика, т.к. не может найти подходящего у себя в регионе. Требуется высокий уровень подготовки.

Зарплата программиста

Питонистам мало платят

Самая интересная часть, не так ли? Но тут не будет однозначного ответа вида «100500 рублей». Также я не вижу смысл говорить о том, сколько стоил мой час или месяц в тот или иной момент времени.

Вместо этого, так как данный сайт посвящен Android программированию, давайте разберемся в возможной вилке зарплат именно для мобильного разработчика.

Для оценки уровня ЗП в офисе, на фрилансе и при удаленной работе используем данные из:

  • hh.ru — сайта для поиска работы. Чтобы сравнить вилку ЗП в России.
  • upwork — посмотреть распределение ставок в час в мире.
  • Ежегодный отчет от Payoneer от 2018 года на тему ставок фрилансеров, пользующихся их системой.
  • Payscale — сервис по мониторингу уровня ЗП в мире.
  • Официальный FAQ от Toptal — там они пишут, сколько будет стоить работа топ 3% удаленных программистов для клиента.
ИсточникКатегорияМинимальная ЗПСредняя ЗПМаксимальная ЗП
PayScale, Москва, 5 лет опытаРабота в офисе83 333,33 руб.166 666,67 руб.250 000,00 руб.
hh.ru, Android, МоскваРабота в офисе80 000,00 руб.136 779,22 руб.335 000,00 руб.
hh.ru, Android, Все регионыРабота в офисе55 000,00 руб.92 231,77 руб.270 000,00 руб.
Payoneer отчетФриланс52 480,00 руб.230 912,00 руб.1 049 600,00 руб.
Toptal официальный FAQ, почасовая оплата, ставка для клиентаФриланс629 760,00 руб.813 440,00 руб.997 120,00 руб.
Toptal официальный FAQ, fulltime, ставка для клиентаУдаленная работа512 000,00 руб.665 600,00 руб.819 200,00 руб.
UpworkФриланс104 960,00 руб.247 544,56 руб.1 049 600,00 руб.

Исходную таблицу можно найти по ссылке на Google docs.

Личностное развитие

Каким бы вы крутым разработчиком не были, важно помнить, что так или иначе вам придется работать с людьми. И тут вдруг становится важно то, как вы умеете ладить и общаться с коллективом. На сколько грамотно можете выражать свои мысли и подбирать доводы за предложенные идеи.

«Коммуникабельность, проактивность, работа в команде» — должны быть не пустыми словами в резюме. Это может стать вашим личным кредо. Вы должны решать проблемы вашего клиента, а не создавать ему новые.

Разговаривайте на языке клиента, будьте готовы, что вас могут не понять — и это нормально. Учитесь отстаивать свою точку зрения, но в то же время слышать и уметь принять чужое мнение.

Вместо заключения

Теперь, когда понятно «что такое программист» пришло время выбрать для себя язык программирования.

Никогда не переставайте учиться и не бойтесь делиться знаниями и опытом. Никто и никогда не бывает прав во всем на 100%, а порой правильно поставленный вопрос, пусть и самый «очевидный» приводит к интересным обсуждениям и появлению новых знаний. Специально для вас я собрал ряд примеров кода и даже собрал готовое приложение. Обо всем это читайте на отдельной странице.

Хочешь обсудить Android разработку?
Заходи к нам Вконтакте, на Facebook и в Телеграм!

Добавить комментарий

Может быть интересно

Этот сайт использует Cookie файлы для улучшения вашего пользовательского взаимодействия. Используя данный сайт вы соглашается с этим. Принять Читать

Политика конфиденциальности и Cookies