[Перевод] Как я научился кодить после 30
«Погрузитесь в изучение предмета, найдите наставника и не оглядывайтесь назад» — ключевые советы, которые автор материала дает всем, кто стремится освоить программирование с нуля. В истории, приведенной ниже, речь идет о непростом пути человека, решившего сменить профессию после 30 лет, чтобы стать разработчиком программного обеспечения.
Люди часто спрашивают меня, как я начал кодить и всегда удивляются, узнавая, что научился я после 30.
Предлагаю вам свою историю о том, как я прошел путь с самых азов до разработчика широкого профиля в Udacity — стартапе из Кремниевой долины, команда которого поставила перед собой цель демократизировать образование. В этой истории я уделил особое внимание рассказу о том, как мне удалось получить работу, несмотря на то, что каждая вакансия младшего веб-инженера требовала наличия научной степени в области компьютерных наук или двухлетнего опыта работы по профессии.
За все это время мне довелось побороться за сохранение отношений с близкими, потратить все свои сбережения, потерять веру в себя и сдаться. И только спустя год размышлений над неудачей, изменив свой настрой, я предпринял еще одну попытку и добился успеха.
Сегодня я руковожу деятельностью команды из 10 инженеров, а в мою сферу ответственности входит поддержка нескольких базовых систем, в числе которых набор студентов, обзор их проектного кода, наставническая деятельность, помощь в реальном времени, форумы и наша инициатива по обучению в режиме живого общения Udacity Connect. Мы оказываем поддержку тысячам студентов, обучающимся на бесплатных курсах и платных nanodegree-программах в таких передовых направлениях, как ИИ, машинное обучение, проектирование автономных автомобилей, а также более распространенных направлениях разработки, как React, iOS and Android.
И вот как я к этому пришел.
Как потерпеть неудачу
Все началось с того, что мне разонравилась моя первая профессия, которой я к тому моменту посвятил уже 7 лет. Я просто понял, что не смогу заниматься этим всю жизнь, и решил, что стану разработчиком программного обеспечения. Не знаю, откуда взялась эта идея, но она притягивала меня как магнит. Я хотел созидать. Для полноты картины добавлю, что с математикой у меня все плохо, на тот момент я не знал ни одного программиста, понятия не имел, во что влезаю, и вообще понравится ли мне все это. Друзья любезно рассудили, что a) у меня поехала крыша и б) я был слишком стар для таких перемен.
В январе 2014 года я записался на буткемп General Assembly по Ruby/Rails, проходивший в Сан-Франциско. Это были относительно ранние годы для культуры буткемпов и первый опыт был довольно сырым. Уровень подготовки в большой группе, образованной из двух потоков, был у всех разный. Расписание часто менялось, в целом все протекало немного хаотично. Через несколько недель после начала занятий до нас начали доходить слухи о том, что выпускники не могут найти работу. В результате в воздухе начало витать хорошо ощущаемое чувство стадного беспокойства: все начали задаваться вопросами, а действительно ли они смогут стать разработчиками, и не зря ли ушли со своих работ, вложив в это предприятие 10 тыс. долларов? Я ушел еще до начала оплаты второго семестра. Тем не менее я многому научился. Там было несколько хороших инструкторов, а некоторые мои знакомые по потоку впоследствии построили замечательные карьеры веб-инженеров, хотя в то время такие перспективы не были для нас чем-то очевидным.
Следующий месяц я провел, нарабатывая портфолио фронт-энд разработчика. Я начал позиционировать себя как Javascript-кодер по найму, работая с небольшими проектами. Подобный ранний акцент на одном направлении оказался продуктивен: у меня появилась настоящая работа. Но несмотря на возросший оптимизм несколько следующих рабочих месяцев прошли очень нестабильно, и в мою голову закрались сомнения.
Вот несколько уроков, которые я усвоил, поработав некоторое время джуниором по найму:
- На создание исходников уходит столько же времени, сколько и на кодинг
- Добиваться последовательной работы над разными проектами очень сложно
- Вы будете получать мало технической обратной связи
- Непостоянный заработок создает напряжение в семье
- Рядом нет никого, кто мог бы сказать, что вам следует изучать
Я чувствовал себя растерянно и попытался выяснить, что мне требуется для получения постоянного трудоустройства. Я слышал что в Кремниевой долине было много программеров-самоучек, но был неприятно удивлен и подавлен, увидев, что описания вакансии указывали скорее на обратное. Казалось, что все подобные объявления требовали «наличия степени компьютерных наук или двух лет работы по профессии». Как можно получить двухлетний опыт работы по профессии без степени, если последняя везде необходима? Как инженеры-самоучки получают работу?
Я начал рассылать резюме несмотря на требования. Начал изучать подходы к собеседованию соискателей, надеясь, что меня все же позовут на одно из таких интервью. Я понял, что ничего не понимаю в структурах данных и алгоритмах и не имел понятия о том, с чего же мне начать. Внезапно я потерял надежду. Оказалось, что вся деятельность последних месяцев не позволяла мне соответствовать требованиям ни одной интересной мне вакансии, и я сильно сомневался, что смогу пройти интервью, если меня все же позовут.
Это был момент смирения. Спустя полгода после вхождения в новые воды, мое финансовое положение ухудшилось, отношения в семье были напряжены, а мой уровень при этом был немногим выше недоучки с буткемпа или работающего на полставки Javascript-наемника. Поэтому я принял очень практичное решение — сдаться. Я сказал семье и друзьям, что совершил импульсивную и дорогостоящую ошибку и нашел более подходящую работу в моей предыдущей сфере деятельности.
Как добиться успеха
Вскоре я стал сожалеть о произошедшем. Настоящее поражение приходит только тогда, когда ты сдаешься, а я действительно сдался.
Прошел целый год, а я все никак не мог выкинуть эту ситуацию из головы. По непонятной мне причине, я продолжал кодить, понемногу, то там то здесь. Это занятие превратилось в досадное хобби, занимавшее много времени, и часто выводившее меня из душевного равновесия. Не могу сказать, что в результате на свет появилось что-то стоящее, но я не мог освободиться от притягательного для меня желания созидать, вместо того, что любоваться результатами чужих трудов.
Я провел ретроспективный анализ причин своей неудачи:
- Я ушел с работы
- Я не имел понятия о том, что делаю
- Я не получал высококачественного опыта или обратной связи
Поэтому я составил план:
- Не уходить с работы
- Найти наставника
- Работать бесплатно при условии получения хорошего опыта
Я рассказал всем, что несмотря на прошлогоднюю неудачу, я собираюсь попробовать с начала.
И первый шаг заключался в приобретении опыта работы.
Как я стал интерном
За год до этого я читал статью по безопасности на Hacker News, написанную Лоуреном Сэндс-Рэмшо. До меня тогда дошло, что мы с ним учились в том же колледже, но с несколькими годами разницы, однако пока я был занят получением средних оценок по разным гуманитарным предметам, он отнесся к учебе в колледже серьезно и после пошел работать в АНБ. Я написал ему, расспросив на тему реальности изучения кодинга, и в ответ он отправил мне содержательный и обнадеживающий ответ.
Вспомнив об этом через год, я посмотрел его профиль на LinkedIn и увидел, что у него был работающий в сегменте мобильных ставок стартап Parlay: Javascript c Meteor + Cordova и биткоин-хранилищем. Я сразу же написал ему с просьбой взять меня волонтером. После небольшого интервью, он согласился взять меня на небольшое жалование. (Кстати, сейчас Лоуренс — один из членов основной команды Meteor/Apollo и высокооплачиваемый консультант).
Этот опыт полностью изменил направление моего развития. С этого момента мне надо было только сделать так, чтобы все сработало.
Как стать крутым интерном
Моя предыдущая работа была связана с обслуживанием клиентов. Инстинкт подсказывал, что мне нужно просто применить свой предыдущий опыт к новой деятельности. Ключевые моменты — отзывчивость, положительный настрой и погружение в работу.
- Старайтесь сделать так, чтобы всякое обращение к вам оставалось неотвеченным не более пяти минут.
- Говорите «да», всегда, когда это только возможно.
- Вкладывайте неимоверное количество энергии в свою работу. Ваш наставник обязательно оценит ваши усилия.
- Постарайтесь не спрашивать у него, что делает тот или иной код, или откуда работает та или иная фича, не постаравшись найти ответы самостоятельно, не почитав об этом, не попытавшись понять работу кода. Если после всех этих действий у вас по-прежнему есть вопрос, он будет сформулирован более конструктивно.
Однако бесплатная работа нужна не только чтобы читать! Я был настроен на отправку комитов кода в любое время суток. Пулы в 2 часа ночи — хороший показатель упорной работы.
Если вы настроены серьезно и погрузились в процесс, то прогресс будет быстрым.
Какие уроки я извлек из интернатуры: погружение — секрет к быстрому обучению
По моему опыту, изучение языков — хороший пример того, как следует относиться к обучению кодингу. Ключевой элемент здесь — полное погружение. Во время обучения в колледже я несколько месяцев прожил в России. Будучи изолированным от понятного языка, человек изо всех сил старается понять, что происходит. Это сопоставимо с физической болью. Однако спустя несколько недель страданий от такого глубокого погружения, обучение начинает ускоряться экспоненциально.
Я постарался подойти к обучению кодингу таким же образом.
Погружение означает 100% концентрацию, то есть никаких друзей, выпивки, телевизора в той степени, в которой это только возможно. Только чтение и написание кода. Отвлекаясь от этого состояния всего на пять минут чтобы почитать новости, имейте в виду, что таким образом ваше сознание «выныривает» обратно на поверхность. Сохраняйте сосредоточенность, будьте терпеливы и разум адаптируется. Устраните все отвлекающие факторы, независимо от того, насколько сильно они вам мешают. Погружение и есть разница между успехом и неудачей.
Как понять, что вы действительно погрузились? Если код вам не снится, значит, вы еще недостаточно погружены.
В жизни всегда есть достаточно естественных вещей, которым необходимо постоянно уделять время, поэтому чтобы обучиться как можно скорее постарайтесь применить принцип погружения настолько хорошо, насколько это возможно.
Как я получил работу
Начав искать оплачиваемую работу после интернатуры, я обновил свое портфолио, сделав акцент на React и Node: по этому стеку в сети много вакансий, с ним приятно работать, и я думал, что у меня будет больше шансов на успех. Моя интернатура была тесно связана с Node, поэтому я прошел замечательные курсы Стивена Гирдера по React+Redux на Udemy. После интенсивной работы с Javascript, я понял, что моя продуктивность и уверенность в себе поднялись до немыслимых ранее высот, потому что обучение React оказалось простым. Redux тоже не показался чем-то слишком сложным. Graphql — вообще одно удовольствие. Погружение и помощь наставников окупились.
Во время работы интерном, мой ментор Лоурен отправил меня на гугловский курс Udacity по оптимизации рендеринга. Это было здорово, а я отметил для себя, что у Udacity есть специальные nanodegree-программы, нацеленные на повышение квалификации и карьерный рост. Меня это заинтриговало и сделал пометку на будущее.
Находясь в поисках работы веб-программиста, я подумал, что мне будет полезно получить некоторый формальный коучинг по части построения карьеры и потому я вернулся на Udacity в поисках соответствующих программ. Доступная на тот момент полная клиент-серверная программа делала упор на Python, тогда как сам я настроился на работу с Javascript. Но мой наставник очень порекомендовал мне при первой возможности изучить строго типизированный язык. Поэтому я записался на программу по iOS чтобы изучить Swift и она мне очень понравилась. Сразу скажу, что не буду рекомендовать пытаться гоняться за двумя зайцами, изучая одновременно и веб-мобильное и клиент-серверное направления во время поиска своей первой работы, но вот изучить строго типизированный язык настоятельно порекомендую: в моем случае этот совет помог серьезно преобразить свой Javascript. А структурированный подход Udacity к созданию портфолио вкупе с получением обратной связи по резюме и практикой прохождения интервью оказался для меня крайне полезным.
Ближе к концу курса, когда я, наконец, начал получать приглашения на интервью для полноценной работы, меня позвали на собеседование на контракт React-разработчика в Udacity-Blitz, платформу, с помощью которой работодатели могут пригласить студентов Udacity на работу в реальные проекты. По словам рекрутера, его привлекли моя трехмесячная Javascript-интернатура вкупе с React-портфолио. Для большинства контрактов в целом, на мой взгляд, качество вашего портфолио более важно, нежели подготовка к техническим интервью. Если вы обладатель одной из «наностепеней» Udacity, значит вам точно следует обратиться к Blitz. На счету сервиса сотни проектов для клиентов, включая работу над самим Udacity, в котором я тоже успел поработать, применив свои навыки из серии «как быть хорошим интерном».
Я работал не покладая рук. Почти полтора месяца спустя меня позвали в Udacity уже на постоянную позицию. Следующие две недели прошли в интенсивной подготовке. В частности, в лучших традициях рекурсии, я воспользовался курсом по техническим интервью своего же будущего работодателя. В ходе интервью в Udacity делают больший акцент на головоломках в самом коде, а не алгоритмах. На мой взгляд это положительный тренд в индустрии в целом, однако знание структур данных также очень полезно.
Я всегда будут благодарен Оливеру Кэмерону, который поверил в меня, как инженера, и Джеймсу Ричардсу, который дал мне возможность стать тимлидом в новой команде.
Мысли напоследок
Размышляя над своим путем становления в качестве разработчика ПО, я понимаю, что наделал много ошибок, но кое-что у меня при этом вышло хорошо. В общем, я сидел без работы более года. Я научился смирению, настойчивости и умению сосредотачиваться на целях.
Мне повезло работать в таком классном коллективе, на компанию, ценности которой мне по душе, и делать работу, которую люблю. Мой совет: погрузитесь в процесс, найдите наставника и не оглядывайтесь назад. Обещаю, будет нелегко.