Всем привет. Изучение программирования начал в 27 лет в мае 2017 года, а в июле 2019 года я уже получил офферы от «Яндекс.Еды» и «Ламоды». Ниже в статье — рассказ о том, что мне помогло быстро расти и на что делать упор в обучении.



Как быстро начать


Многие знают — чтобы быстрее развиваться, нужна работа. Это и деньги и мотивация, и самый что ни на есть источник навыков. Первую работу программистом я даже не искал — просто сперва устроился прожектом в интернет-магазин, потом изучил программирование на PHP и по чуть-чуть выдавил удаленных фрилансеров-разрабов, когда через 3-4 месяца уже «в полный рост» занялся существующим проектом, которым и занимался более года. Рост был моментальным: сразу и боевой проект, и куча кода, и задачи реальные. К примеру LEFT JOIN через связующую таблицу научился делать до того, как узнал как делать банальный INSERT или что такое нормальные формы, просто нужно было «тут и сразу».

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

Потому прежде, чем я взялся за изучение чего-либо в PHP, я насильно себя пересадил за Linux, вдоль и поперек наигрался с хостами Nginx и сносил всю ОС по 3-5 раз в день и освоил виртуальные машины. И это очень здорово меня выручило, так как с самого начала вокруг меня был уже нужный контекст для развития.

Изучение. Первое изучение языка было через видеокурс на ютубе. На каком-то канале было два огромных курса, по часов 30 каждый, наверное. Первый был про основы языка, второй про ООП. И тут самое главное — основы благополучно не стал изучать (зачем?:) и сразу взялся за ООП-курс, попутно изучая те конструкции и особенности языка, с которыми сталкивался по ходу изучения и были непонятны мне (то есть абсолютно всё, но уже не как следующий пункт в программке, а как то, что нужно было кровь из носу). На самом деле это были адовые трое суток без сна — пытался сделать осознанно буквально все не так, отступал от каждого примера в видео и даже проектик писал совершенно не такой и не по предлагаемым шагам.
И после этой бойлерной через неделю я смог делать первые задачи на работе, так как появилась осознанность и понимание устройства всего проекта, а через 3-4 недели я уже взялся за фреймворк Yii2 и начал разрабатывать на нем свой личный сервис записи в спортзалы.

Набор советов:


  • Форсируйте по возможности вопрос с работой и боевым проектом;
  • Форсируйте темы, не изучайте поступательно, сделайте некоторые темы жизненно-необходимыми — как с иностранным языком, попав в инородную среду, вы быстро адаптируетесь;
  • Изучайте Linux и другую инфраструктуру по возможности сразу, мне это сильно помогло;
  • Всегда отступайте от материала, который вам дает преподаватель. Это опаснейшая ловушка — просто смотреть и улавливать причинно-следственную связь подаваемого материала, вы на самом деле понимаете не материал, а лишь хорошо связываете закономерности;
  • Постарайтесь попасть в боевой проект как можно раньше, вырасти получится сильно быстрее, мне повезло — работал с нулевого дня; создайте себе похожую ситуацию и не нужно будет ходить по десяткам собеседований и унижений;

Самостоятельно к хорошим практикам


У компании было 3 проекта, очень похожих проекта (оптовый магазин, розничный и еще проектик). Очень не хотелось копипастить и делать одно и тоже, кроме того очень не хотелось вести разработку на реальном сервере и мне пришлось хорошо прокачаться в девопсе и вынести все проекты в 1 кодовую базу. Сразу освоил GIT, развернул удобную разработку в своем окружении и сделал даже простую систему деплоя, понятное дело не все сразу, но довольно быстро. Очень сэкономил по времени и силам.

Параллельно проекту делал свой проектик на фреймворке Yii2 и делал эксперименты с Symfony, некоторые компоненты которого перекочевали в проект на работе. Фреймворк Symfony в дальнейшем принес мне очень много очков при поиске (именно хорошей) первой работы в Москве, хоть я и делал на нем простые контроллеры. Не буду сравнивать этот фреймворк с другими и делать его как окончательный выбор, но опыт с ним должен быть у каждого. Этот фреймворк и подходы, которые идут параллельно с ним, сильно поднабрали из фреймворков и практик других языков (Java, C#), конечно, не без минусов. И он используется во многих топовых компаниях, где есть стек на языке PHP (Lamoda, «Яндекс.Еда», «Авито» и много др.).

Небольшой совет:


  • Даже если вы один, если у вас проект «на кошечках», стремитесь делать с максимальным изучением инженерных штук (подходы, фреймворки, ORM, паттерны, популярные архитектурные приемы).

Практика с другими людьми


Лучшее, что со мной произошло, — попасть в команду издательства Condenast. Несмотря на то, что это издание и популярные мнения о специфики работы журналов, практики и подходы в этой команде были неплохими. Так как проектов у издательства много, то было много кода, который нужно переиспользовать, а тк много различий — нужно было код делать настраиваемым и гибким. Короче, было очень много хорошего абстрактного кода. Первый месяц я обалдевал от сокрытой сложности и ковырял лишь одни YAML конфиги в Symfony приложениях. Хочу отметить, что многие практики были куда «кучерявей», чем на следующем месте работы — Яндексе.

Наконец устроился в Яндекс.Еду. Параллельно был оффер в Ламоду и еще штук 5 других компаний. При первом звонке от HR честно засомневался и заявил, что скорее всего мне позвонили по ошибке и что не потяну, но в итоге прошел все собеседования и получил оффер. И в работу довольно легко втянулся, но из-за сильных разногласий и сложной обстановки в команде ушел вскоре после успешно закрытого испытательного срока.


?Одна из кухонь в Яндексе. Больше фото офиса тут

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

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

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

Рецепт:


  • даже если вы один, найдите коллег или проект, на котором вы бы могли анализировать код других людей и найдите тех, кто бы анализировал ваш. Если вы один — начните помогать в опен-сорсе и на сайте вопросов-ответов;
  • не уходите из Яндекса через 3-4 месяца:) Хапнете говнЫ на собеседованиях и этот уход будет центральной темой всех собеседований;

Рассказал = закрепил


Невероятную услугу мне оказали проекты вопросов-ответов типа «Тостера» (Habr.QnA) и Stackoverflow.

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

Тут все тот же элемент внешнего ревью. И попытка объяснить простые/сложные вещи другим другим ребятам невероятным образом укладывает материал в вашей голове.
Помогай другим. Пиши, рассказывай и объясняй и… получишь веточку: ) Шутка, получишь кучу опыта и глубину понимания некоторых тем!

Кроме того такие сайты дают взрыв тем: в своих задачах у вас один вид проблем, а десятков и сотен других программистов их очень много. Это разнообразие проблем и их решений у других программистов даст вам очень хороший кругозор. Если просто читать — забудете быстро (помните, память человека никчемная), объясните — запомните навсегда или хотя бы надолго.



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

Всегда можно позвать меня на Habr.QnA: Maksclub

И увидеть больше моих статей (не всегда профильных) в блоге: maksfedorov.ru/blog