Люди часто спрашивают меня, как я начал кодить и всегда удивляются, узнавая, что научился я после 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 делают больший акцент на головоломках в самом коде, а не алгоритмах. На мой взгляд это положительный тренд в индустрии в целом, однако знание структур данных также очень полезно.
Я всегда будут благодарен Оливеру Кэмерону, который поверил в меня, как инженера, и Джеймсу Ричардсу, который дал мне возможность стать тимлидом в новой команде.
Мысли напоследок
Размышляя над своим путем становления в качестве разработчика ПО, я понимаю, что наделал много ошибок, но кое-что у меня при этом вышло хорошо. В общем, я сидел без работы более года. Я научился смирению, настойчивости и умению сосредотачиваться на целях.
Мне повезло работать в таком классном коллективе, на компанию, ценности которой мне по душе, и делать работу, которую люблю. Мой совет: погрузитесь в процесс, найдите наставника и не оглядывайтесь назад. Обещаю, будет нелегко.
Комментарии (38)
saboteur_kiev
05.07.2017 17:02+2Статья понравилась, но
«Все началось с того… В январе 2014 года я записался на буткемп General Assembly по Ruby/Rails, проходивший в Сан-Франциско.»
мне напоминает КВН 90-х:
«Здравствуйте, меня зовут Стинг, и я живу в Англии. Неплохо, правда?»Alexey2005
06.07.2017 10:17IT по поверхности планеты распределены неравномерно, увы. Если вы живёте в Москве, вам тоже будет относительно неплохо, хоть и не так круто, как в Калифорнии. Хуже, если вы обитаете в Питере, Екатеринбурге или Новосибирске. А уж за пределами этих четырёх городов всё совсем грустно и печально, тысячи километров IT-пустыни.
При этом кроме геолокации существует проблема языка. Английский — это аналог «всеобщего языка» или космолингва из научной фантастики. Если вы его знаете просто по праву рождения — это охрененный джекпот. Пока другие тратят десятилетия на изучение языка, вы уже сразу можете начать заниматься IT.boombick
06.07.2017 19:46Это кто тратит десятилетия на английский? На уровне simple он изучается за полгода и уже вполне можно общаться и читать тексты.
Mantikor_WRX_STi
05.07.2017 20:59Я так понял, еще и заплатив за этот буткемп 10к долларов, еще + к старту. Интересно насколько применим этот опыт в наших нынешних реалиях?
SteelRat1
05.07.2017 21:57Интересно, зачем нужен наставник, если все нужно узнавать самому? Мне сейчас 35 и я потихоньку разбираюсь в Qt. Сам. Тяжело, но интересно. Гугла хватает. И в процессе самообучения я так и не понял, зачем наставник. Может это мне так «везет»… )
Кстати, перейти от желания стать программистом к действию помогли курсы. Походив на них, я зацепился, так сказать, за практику. Сейчас пишу программу для своей основной работы.DMGarikk
06.07.2017 09:15+1Одно дело программить самостоятельно и для развлечения на основной работе
а другое, пройти собеседование и пойти работать программистом с нулевым коммерческим опытом без потери 50% ЗП (а в 30 лет уже какая-никакая карьера есть почти у каждого)
И наличие наставника/репетитора который сможет правильно организовать мышление в реалиях рынка это очень ценно
TsiVit
07.07.2017 11:13Наставник нужен чтобы направлять. При этом процесс по-прежнему держится на самообучении, ментор дает вам прежде всего структуру, отточенную не только его опытом — структуру, которую не даст гугл или википедия.
Достигнуть тех же вершин можно и без ментора, но эффективность процесса будет меньше прежде всего по затратам времени.
tj-rave
06.07.2017 08:47Если уж пошла такая тема, то позволю себе задать вопрос компетентному сообществу. Хочу освоить основы программирования для написания простеньких программ по работе. Для автоматизации и упрощения некоторых расчетов. Какой язык лучше выбрать для программ под винду? Пытался гуглить, толковых ответов не нашел.
Arastas
06.07.2017 09:23Я думаю, Вы получите больше содержательных ответов, если приведёте два-три примера задач.
tj-rave
06.07.2017 09:58Боюсь скатиться во флуд и оффтопик. Напишу один пример и надеюсь пообщаться в компетентными людьми уже в личных сообщениях.
Работаю на производстве. Есть состав 1 и состав 2. Состав 1 включает компоненты А, Б и В. Состав 2 — компоненты Г, Д и Е. Есть табличка со списком сырья (А, Б, В и т. д.), табличка с рецептами каждого состава в процентах. Суть вопроса: в конце месяца снять остатки по всем составам с последующим раскладыванием их на компоненты и сведением в итоговую таблицу. Сделал это всё в Excel, но не имею возможности внести изменения. Т.е. если компонент А поменяли на компонент Ж, то для перерасчет надо перелопачивать весь файл.
Т.е. помимо ввода алгоритмов расчета (рецептуры), надо еще будет создать хоть какой-то внешний интерфейс ввода данных. Коллега один умеет такое созидать, но он использует Бэйсик.DMGarikk
06.07.2017 10:03такие штуки делаются в рамках общей автоматизации производства во всяких ERP и прочих (шёпотом)1С
Время самопала на бэйсике и прочего паскаля в таких сферах, к счастью проходит
Rokov
07.07.2017 11:14Я бы порекомендовал гугл таблицы и гугл скрипты. Таблицу использовать в качестве интерфейса ввода-вывода данных, скрипты — для бизнес-логики и расчетов. Скрипты там пишутся на javascript, как раз такие задачки было бы очень удобно решать, по крайней мере на первый взгляд.
slkl
07.07.2017 11:14Наверное нахватаю минусов. Если Вы начали ковыряться в екселе — попробуйте vba (Visiual Basic for Application). Он уже встроен в ексель (Ctrl+F11 переход в программную часть). Можно тестить такую штуку как запись макроса. Включили запись, потыкали, потом глянули какие команды ексель записал. Как обучалка — вполне. Есть масса минусов в вба. Основной — сделано мелкософтом. Если вам токо локально для себя, без установки на другие машины или вэб морды, и не нужна скорость. Иначе — могут начаться траблы. Ну и если вы не думаете в дальнейшем посвятить себя програмированию. Тогда уж лучше не портить себе карму и сразу изучать че то нормальное.
Как вариант — гугл доки. Визуально тот же ексель, есть свой язык (на вба не похож, кацца JavaScript).
Имхо, как вариант сделать либу под себя — вба вполне.
Ckpyt
06.07.2017 12:28Смотрите(очень упрощенно):
Скомпиленный jar-Ява работает везде, на любой операционке. Если у вас на работе зоопарк операционок — ваш выбор Java. Ну и плюс, у нее низкий порог вхождения и много чего реализовано "из коробки".
С любым другим языком — придется отдельно компилить под линуксы и винды. И то, на разных версиях винды могут быть не очень приятные последствия.
Если у вас чисто винда от семерки и выше:
а)нужно много работать с интефейсом и рюшечками — ваш выбор C#. Тоже, скомпиленный запустится на любой винде, где стоит соответствующий .net(3.5 — везде).
б)Если охрененно тяжелые расчеты и хватит консольного вывода — ваш выбор с++. Он хорош тем, что можно оптимизировать любую задачу по самое "не балуйся".
Если не нужна компиляция, а хватит скриптового выполнения, можно попробовать питон — он тоже сравнительно легкий в изучении + большой набор библиотек. Можно найти либу под любую задачу.
Если нужен веб-сервис, то тут хорош Golang. Но у него пока с библиотеками проблема.
П.с. мнение сугубо субъективное, основано чисто на личном опыте работе с вышеперечисленными языками.
sergarcada
06.07.2017 12:34Для автоматизации работы я пользуюсь autoit3. Простой скриптовый язык. Подойдет и для автоматизации существующих программ (я-ля кликер), и для небольших программ с гуи. Например, на нем я писал генератор кредитных договоров в банке (тогда их еще писали вручную), парсеры, и даже чат.
Для более сложных задач начал использовать python. Тоже простой язык c множеством библиотек. Подходит, имхо, как для автоматизации, так и для программирования.
Akdmeh
06.07.2017 23:51Посмотрите Python. Он очень помогает в автоматизации рутинных задач и при этом довольно доступный для изучения + имеет множество готовых библиотек
tj-rave
07.07.2017 07:48Да, спасибо. В итоге остановился на питоне. Осталось найти хорошую литературу по нему. Но тут уже гугл нормально справляется.
qant
07.07.2017 11:15И не найдете, тк вариантов уйма… Нужно конкретнее понимать задачу.
Но думаю что python подойдет ко всем, но… есть Excell и его скрипты, powershell… просто в батниках делать код тоже можно…
victorghost
07.07.2017 11:15хмм… интересно. в первый раз услышал о том, что сушествует программистское волонтерство :)
как и кому только написать о том, что я хотел бы научиться кодить на яваскрипте (вообще с нуля)?
rina_volk
07.07.2017 11:16+1Совет полностью погрузиться и пахать «не выныривая» звучит, как инструкция к выгоранию.
Tremere
07.07.2017 11:16я решил пойти в программирование года два назад, не получав никакого образования, с трудом, на за пол года я смог найти себе работу, попутно ходя на курсы и решая задачи после собеседований, а сейчас уже занимаюсь тем что мне более менее интересно, и старая работа менеджером больше не нужна
STingerOid
07.07.2017 11:17Ситуация очень близка к моей =)
Мне 33, и я пытаюсь трансформироваться из одмина-эникейщика с примесями знаний Linux и виртуализации в javascript/node.js разработчика. Нужна практика и… еда, а где взять два в одном — непонятно =)
И проблема «наличия степени компьютерных наук или двух лет работы по профессии» тоже присутствует в виде повсеместного требования высшего образования (на мой взгляд нафиг не нужного).DMGarikk
07.07.2017 11:28И проблема «наличия степени компьютерных наук или двух лет работы по профессии» тоже присутствует в виде повсеместного требования высшего образования
По факту эта надпись в ИТ вакансиях совершенно номинальная, на неё можно не обращать внимания отправляя резюме.
P.S. Упоротые конторы конечно всёравно бывает, но их далеко не большинство
kiiger21
07.07.2017 11:17Стало интересно — а глухой человек сможет так же научиться? Без наставника и тд.
Akdmeh
07.07.2017 18:07Запросто!
Я целый год работал по удаленной связи чисто в текстовом режиме. Хотя по телефону иногда быстрее, но это небольшая помеха. Иногда можно поставить так рабочий процесс, что ваш работодатель даже не будет знать о каких-то особенностях вашего организма.
MarkNikitin
12.07.2017 11:27Главное это целеустремленность, и желания работать я считаю что код можно менее чем за год знать очень хорошо и уже брать какие то проекты на фрилансе. Аще сейчас есть множество разных курсов, вебинаров и так далее
Nekto_Habr
Наконец-то :) Теперь на Тостере можно будет давать ссылку на эту статью в ответ на вопросы о работе в IT после 30 / 40 / N лет.