Hi-Tech

От новичка до разработчика за девять месяцев

Остин Такаберри

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

Скрывать нечего

На первом курсе колледжа немного изучил C, Python, Matlab и Labview (семь лет назад). Итак, в средней школе я прошёл курс по VBA (девять лет назад). Вне учёбы программированием я никогда не занимался. Учился я на химика-технолога и окончил университет с хорошим средним баллом (три года назад).

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

Почему я хотел сменить профессию

Где-то глубоко внутри меня сидела мысль об MBA, но цены на обучение заставляли отодвинуть свои желания на второй план. Мне нравилось решать определённые технические задачи, но я был твёрдо уверен, что рано или поздно свяжу себя с бизнесом или стартапом.

Вот оно, подумал я. Около года назад, 27 мая, я в очередной раз искал информацию о программах MBA и случайно наткнулся на программы по разработке ПО.

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

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

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

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

Цель

Особенно тогда, когда вы пытаетесь учиться, работая полный день. Прежде всего, вам нужна цель. Поэтому создайте внутренний стимул. Без какого-то внешнего стимула ваши занятия будут тянуться бесконечно долго. У меня получилась такая формулировка. Сформулируйте вашу цель коротко и чётко, проведите небольшое исследование, чтобы не поставить неоправданную цель.

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

План

Как раз на этом этапе следует прочесть как можно больше историй успешных людей. Обозначив цель, займитесь планом её достижения. Свой план я составил, используя, например, сабреддит learnprogramming, форум freeCodeCamp и Medium. Да, ни одна из них не впишется в вашу жизнь целиком, но из каждой можно извлечь полезный урок.

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

В итоге мой план, претерпевший множество изменений, приобрёл вот такой вид.

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

Своё обучение я решил построить вокруг программы для разработчиков от Google и поэтому начал с Udacity CS101, рекомендованного вводного курса. Довольно просто для начала.

Месяц первый — Udacity CS101, Harvard CS50

По возвращении домой с работы я сразу начинал писать код и сидел до самой ночи, в том числе и по выходным. Как только я со всем определился, меня охватила эйфория. Я отмечал свой прогресс каждый день, преодолев 75% программы за десять дней. В Udacity CS101 есть замечательная шкала прогресса, которая послужила неплохим мотиватором. На весь курс у меня ушло 20 дней. Последние 25% дались мне не так легко, эта часть была нацелена на повторение.

Там я вычитал, что для разработчика-самоучки, который хочет сменить работу, очень важно быть активным в сети. Занимаясь по Udacity CS101, я налёг на чтение сабреддита learnprogramming. Используя своё реальное имя, я создал новые аккаунты на Twitter, Reddit, Stack Overflow, Medium и Quora, чтобы нарастить присутствие в интернете.

Телефон я проверял только на наличие новостей и записей, связанных с кодом. Вместе с тем я отказался от Instagram, Facebook и чтения сабреддитов, не относящихся к программированию. Как-то раз я наткнулся на программу Harvard CS50. Так я не сомневался, что следую лучшим обучающим методикам.

По словам студентов, освоивших эту программу, CS50 научил их большему, чем год или два в университете. Поначалу я собирался пройти лишь один вводный курс, однако очень многие лестно отзывались о Harvard CS50, поэтому я решил ознакомиться и с ним. К концу первого месяца я прослушал пять лекций и выполнил домашнее задание к ним. Общее мнение было таково: курс сложный, но стоит затраченных усилий.

Месяц второй — Harvard CS50, Linux, freeCodeCamp и первый семинар

Не стану много рассказывать о своём опыте, ему я посвятил отдельную статью. К середине месяца я разделался с CS50. Дэвид Малан — блестящий лектор, сам курс полон вспомогательных материалов. В двух словах: программа великолепная, рекомендую. Расписание очень насыщенное. Занятия начинаются с языка C, затем идёт Python, следом — веб-разработки. Обязательно попробуйте.

Выходные выдались тяжёлыми — я напутал с разделом диска и едва не угробил ноутбук. Окончив курс, я решил установить на свой Dell XPS 15 две ОС — Windows и Ubuntu.

Желая освоить работу с командной строкой, я полностью перешёл на Ubuntu, что в определённом смысле дало свои плоды, хотя многое ещё предстоит изучить.

Также очень важно документировать свой прогресс. Для самоконтроля я принял вызов «100 дней кода». Имея же под рукой какие-то записи, вы поймёте, что за последние пару месяцев немалого достигли, и желание продолжить работу станет только сильнее. Продвигаясь по чуть-чуть каждый день, вы вряд ли заметите улучшения.

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

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

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

Как раз в то время внутри меня зрела неопределённость — предстояло решить, разработчиком какого ПО я хотел стать.

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

Но через пару дней я передумал. Руководитель еженедельных семинаров, которые я посещал, знал Ruby и хотел заниматься проектами на этом языке, и во многом подтолкнул меня к решению поставить всё на Odin Project.

Оказалось, Ruby теряет популярность, в чём я убедился, сравнив число вакансий с Ruby и JavaScript. Это один из минусов самообучения — вечером ты уверен в своём выборе учебной программы, а на утро неприятно удивлён вчерашним решением.

Поначалу я был действительно этим озабочен, ведь мне хотелось выделиться, чтобы меня заметили работодатели. Поэтому я перешёл на freeCodeCamp, лишь одно здесь вызывало у меня беспокойство — все участники делали одинаковые проекты. Впрочем, со временем freeCodeCamp мне очень полюбился.

Месяц третий — YDKJS, фронтенд на freeCodeCamp, React

Несколько глав, правда, пришлось перечитать, так как книга оказалась не из лёгких. В качестве дополнения к программе freeCodeCamp многие рекомендовали книгу «Вы не знаете JS» Кайла Симпсона, поэтому я взялся и за чтение. Тем не менее она послужила отличным подспорьем в работе и помогла разобраться в тех элементах JavaScript, о которых я слышал, но к которым боялся подступиться из-за сложности.

Формат чеклистов и примерное время на выполнение задания здорово подстегнули меня писать быстро. Так или иначе, я завершил часть, связанную с фронтендом. Вместе с тем в моих проектах фактически отсутствовал стиль — я делал всё возможное, чтобы выполнить «требования заказчика» и ничего кроме. Мне также не терпелось приступить к обучению работе с React, фреймворком для создания интерфейсов.

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

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

От кого-то я услышал, если React не идёт, то ты просто недостаточно хорошо понимаешь JavaScript. Cходу разобраться в React у меня не получилось. Я снова вернулся к чтению «Вы не знаете JS», но толком так и не продвинулся. К сожалению, тогда на примете не оказалось хороших обучающих программ (теперь их наберётся сотня).

Месяц четвёртый — freeCodeCamp React, CodeClub, начало курса по бэкенду на freeCodeCamp

Он оставил плохое впечатление, но помог прояснить кое-какие моменты. В конце концов я решил разобраться с этим фреймворком, взглянув на код React-проектов, опубликованных на freeCodeCamp.

Первым нашим полноценным проектом стал сайт для наших встреч CodeClub. В то же время моя группа на семинаре решила отказаться от Ruby в пользу JavaScript. Social.

Было немного сложно переключиться с заданий на freeCodeCamp, но такую возможность я упустить не мог. Я, например, используя React и Meetup API, разработал страницу для записи на три предстоящих занятия. Наш сайт также помог мне разобраться в Git и Github. Я был рад поработать над проектом в небольшой команде. Месяц ещё не подошёл к концу, когда я приступил к секции бэкенда на freeCodeCamp.

Месяц пятый — с бэкендом покончено, Yeggle

Однако приступив к слоям абстракции, я начал отходить от программы, так как у меня появилась идея для собственной разработки. Со временем я проработал все доступные на freeCodeCamp проекты, связанные с API.

Мне в голову пришла идея — написать приложение на Node, которое хранило бы в своей базе данных случайные ссылки на изображения с Imgur и по требованию пользователя выдавало определённое им количество случайных изображений из базы.

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

Зато работало. Закончив, я был ужасно горд собой, хотя приложение и выглядело жутко. На freeCodeCamp я учился определять, какие проекты мне по силам, и наконец-то почувствовал, что готов писать полноценные приложения, которыми не стыдно было бы поделиться и вложить в портфолио.

А что если сделать приложение, которое объединило бы отзывы с этих платформ? В поисках нового кафе я часто пользовался Yelp и Google Maps, чтобы ознакомиться с отзывами.

При разработке я использовал Node, Express и React, а ещё API Google Maps и Yelp. Так появился Yeggle. Я опубликовал приложение на Reddit, но никто не обратил на него внимание, что немного меня расстроило. Да, была пара препятствий, которые, казалось, мне преодолеть не по силам, но я справился и остался доволен проделанной работой. Но я не опустил руки.

Месяц шестой — StockIT

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

Задача — обойти рынок. Тут я вспомнил про одну игру: на экране выстраивается график Dow Jones, а у вас есть одна возможность купить и продать акции. В результате появился StockIT. Я задумал создать похожую игру, только вместо рынка противником будет самообучающийся алгоритм.

Сначала я собирался задействовать продвинутые методики, но затем осознал, что для этого требуются большие базы данных и много времени. На Pandas и Scikit Learn я прослушал пару видеокурсов о самых разных техниках машинного обучения.

Я предполагал, что самой сложной частью станет как раз машинное обучение, но не тут-то было. Вместо этого мой выбор пал на простую модель линейной регрессии. Наладить их работу мне удалось с помощью других библиотек, при этом меня не покидало ощущение, что код слишком раздут. Самым сложным оказалось совместить работу библиотек D3 и React, так как обе пытались контролировать DOM. В итоге я использовал D3 для генерации SVG, а React оставил для DOM.

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

Месяц седьмой — jobSort() и подготовка к поиску работы

Чтобы придать разработке индивидуальности, я решил добавить фильтры — пользователь мог сам выбрать область, в которой хотел бы работать, и определял степень своего желания. Едва закончив StockIT, я приступил к реализации другого проекта — доске объявлений, на которой были собраны вакансии с таких сайтов, как Stack Overflow, Github и Hacker News. Замысел получил название jobSort().

Таким образом, я даю JavaScript и React три балла, а Python — один. Приведу пример: скажем, я ищу работу, где требуется специалист, знающий JavaScript, React или Python, и хочу работать с JavaScript и React, а на Python мне всё равно. И получаю соответствующую выборку.

При создании приложения я задействовал React, Node, Express и MySQL. Над этим проектом пришлось попотеть и пару раз даже сменить курс, но я остался доволен результатом. Из-за возникших проблем я провозился с jobSort() большую часть месяца. Опубликовав проект на сабреддите cscareerquestions, я получил 650 просмотров, затем мою запись удалили, так как в этом разделе размещать персональные проекты запрещено.

Тогда он посоветовал мне не мешкать и искать работу. Как-то раз мы с приятелем по семинару решили выпить кофе. Но у меня же был план. Я и до этого наталкивался на подобные рекомендации в интернете. Однако приятель посоветовал мне отложить его в сторону и начать поиски, что я и сделал в следующем месяце, собрав портфолио и написав резюме.

Месяц восьмой — отладка, поиск работы

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

Над последним пришлось поломать голову. На сайте нашего семинара я добавил поддержку флексбоксов, чтобы улучшить отклик, а также обновил графический интерфейс мобильной версии jobSort(), проведя тестирование с помощью Mocha, Chai и Enzyme.

Если да — над чем следует поработать, чтобы как следует подготовиться к собеседованию? К концу месяца я разослал 63 заявления, как бы оценивая самого себя: хороши ли мои портфолио и резюме? Для HN я использовал jobSort() — так легче выделить технологические компании. Сначала я размещал объявления на Hacker News: Who is Hiring и сайте Indeed. На Indeed я оставлял заявки на работу в предприятиях, не связанных с ИТ — просто хотел узнать, перезвонят ли мне вообще.

Затем всё-таки я решил рассказать о себе поподробнее и сразу отправлял письма прямо в компанию, а не на сайт. Сперва я делал быструю рассылку, не вдаваясь в подробности ни в резюме, ни в сопроводительном письме. Такой подход оправдал себя.

Всего за месяц я получил пять звонков — три из них от компаний, разрабатывающих ПО.

  • Подряд в отделе интеграции разработки и эксплуатации в одной дотком-компании. Сюда же отнесём и отладку продукта.
  • Место в развивающейся компании по анализу продуктов питания.
  • Должность в меру большом и успешном стартапе, недавно приобретённом крупной корпорацией.

Впрочем, я был доволен и узнал много нового. В двух случаях я прошёл предварительный отбор, но до реального собеседования дело не дошло.

Главное — любить своё дело и желание учиться. В сети только ленивый не писал: на старте от начинающих разработчиков никто не ждёт чего-то особого. Звонки же дали мне понять: разработчик-любитель никому не нужен. Легко, мотивации у меня хоть отбавляй. Итак, усвоил я следующее. С первого рабочего дня от вас ждут чёткого понимания того, чем вы занимаетесь.

  • Будь готов повышать отдачу с первого дня.
  • Будь достаточно уверен, чтобы убедить в своей готовности работодателя.

Месяц девятый — ночные смены, Redux, волонтёрство, настоящее собеседование

40 дней я работал в ночную смену — шесть дней в неделю, 12 часов в день, с пяти вечера до пяти утра. Тут мне пришлось нелегко. Я понимал, что с таким графиком много не сделаю, но у меня была цель, и я хотел достичь её, потому не мог себе позволить выпасть на целый месяц.

Честно говоря, с этой библиотекой я разобрался, только когда начал ею пользоваться: ни подкасты, ни статьи не помогали. Сперва я переписал jobSort() с использованием Redux, что, к моему удивлению, оказалось не так сложно.

Для категоричных заявлений опыта у меня маловато, но от редюсеров я просто в восторге. Мне действительно пришёлся по душе поток данных, который создаёт Redux, поэтому я с удивлением замечаю нынешнее недовольство библиотекой.

Я намеревался сделать свой первый вклад в проект с открытым исходным кодом — не в какой-нибудь, а в React. В дополнение ко всему этот месяц был полон волонтёрской работы. И пусть он был бы небольшим, я всё равно решил попробовать.

Чтение документов оказалось весьма полезным занятием. Для начала я проштудировал все официальные документы, а затем погрузился в базу кода, пытаясь отыскать неполадки. И всё же довольно быстро я смекнул: серьёзных проблем в React не так много, да и те живо расхватывают.

Наконец-таки идеальный проект. На одном из семинаров Энтони обратил моё внимание на Downshift, виджет автозаполнений, созданный Кентом Доддсом. К тому же в добровольцев, готовых помочь, набралось немного, да и сопроводитель был просто прекрасным. Мало того, что я неплохо разбирался в подобных вещах — виджет Доддса оказался достаточно сложным, и его предстояло доработать, несмотря на чистый хорошо отлаженный код. Downshift здорово помог мне с решением некоторых проблем jobSort().

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

Большую часть времени я рассказывал о своих разработках и причинах принятия того или иного решения. Они искали программиста с таким же набором навыков, как у меня — React, Redux и D3. Моё первое собеседование в качестве разработчика. В итоге они пригласили меня на настоящее собеседование.

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

Терять было нечего: в худшем случае я бы просто получил ценный опыт, в лучшем — приглашение на работу.

Когда я понял, что в любом случае не выполню задание до конца, мне стало всё равно, и я спокойно искал ответы в интернете, не оглядываясь на работодателя. Сперва я засомневался в собственных знаниях — вспомню ли я всё без того, чтобы куда-то подсмотреть? Тест я так и не закончил, а в голове вертелось: «Полный провал».

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

Месяц десятый — приглашение на работу

С одной стороны, я был уверен в своих силах, если учесть: это было первое собеседование, на которое я отправился в качестве программиста. Таким образом, через девять месяцев и семь дней я получил своё первое приглашение на работу. Но я нисколько не жалею о своём решении. В то же время меня не покидала мысль: а что было бы, не согласись я на первое предложение? Я любил программировать и хотел получать за это деньги!

Советы

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

  • Определите, что вас мотивирует и используйте это с выгодой для себя. Мне нравилось визуализировать свой прогресс, а также общаться в разных сообществах. Если у вас нет мотивации, добиться желаемого вам не поможет ничего.
  • Ставьте цели и достигайте их. Я бы сказал, что цели нужно ставить и на год, и на месяц, и на день. Так вы не собьётесь с пути и не будете лениться, думая при этом, что в чём-то продвинулись. Сравнивайте свои успехи за день, за месяц и год с намеченными целями.
  • Посещайте семинары, не задумываясь, готовы ли вы к ним. Да, может быть страшно. Но на деле все очень милые и отзывчивые. Кто-то, конечно, не захочет с вами общаться, но таких немного. И вот ещё: все любят давать советы (прямо как я сейчас).
  • Работайте над проектами с открытым кодом, не задумываясь, готовы ли вы к ним. Поначалу Github вселяет ужас, но в действительности там очень тепло относятся к новичкам. Более того, на Github можно ознакомиться с хорошим кодом и представить свой. Если же вы до сих пор сомневаетесь, можете прочесть мою запись.
  • Подавайте заявления на работу, не задумываясь, готовы ли вы к ней. Этот пункт дался мне тяжело, ведь я считал себя особенным. Я думал: «Зачем мне изучать рынок, я и так соображу, в каком направлении продолжить развитие». Я был уверен, что пойму, когда буду готов к работе. Говорю откровенно — не ждите, такой момент не настанет. Поэтому начинайте искать место прямо сейчас. Конечно, не стоит сходить с ума и отправлять заявки в 300 компаний, когда вы даже не усвоили неопределённые циклы. И всё же лучший ориентир для развития дают изучение рынка и попытки найти работу.

#карьера #образование

Показать больше

Похожие публикации

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»