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

Как учиться

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

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

Разница между обучением и пониманием

Проходя учебную программу, я учился, но не всегда понимал основные понятия. Например, я узнал, что у javascript есть асинхронные характеристики, но я не понял, что позволяет ему быть асинхронным (т. е. цикл обработки событий, куча, очередь и стек). Во время моего обучения в предоставленных материалах курса эти подробности были опущены и, вероятно, по уважительной причине. Учебные курсы по кодированию предназначены для нетехнических людей, чтобы получить общее представление о навыках программирования. Ни одно содержание курса не предназначено для отдельного человека, а скорее для многих, многих студентов. От вас не ожидают понимания того, как работает цикл событий, только то, что он существует и делает JS потрясающим, потому что большинство рабочих мест не требуют от вас этого. Изначально вы сосредоточены не на масштабируемости или всех винтиках, которые заставляют машину работать, а на создании минимального жизнеспособного продукта, который просто работает.

Мои наставники подчеркивали, что я не должен тратить слишком много времени на то, чтобы сосредотачиваться на том, как или почему что-то делать, а должен уделять как можно больше внимания кодированию, работая над проектами. . У них была справедливая точка зрения; если бы я прыгнул в кроличью нору, чтобы понять анатомию цикла событий, глубоко понять, как Node.js работает с движком JavaScript V8, или другие области, то я не смог бы получить ни один из моих проектов. Выполнено. Тем не менее, они не препятствовали моему любопытству к изучению или пониманию вопросов, которые у меня были, а вместо этого попросили меня пройти через мои проблемы и провести исследование в свободное время.

Так я и сделал. Каждый раз, когда я не решал свои задачи по созданию http-сервера и подключению его к базе данных, я находил время, чтобы попытаться понять, как все работает. Во время поездок на работу с BART или во время перерывов я читал статьи на Medium или Reddit, чтобы укрепить свои знания в области, которую я пытался понять. Если во время моих задач/проектов я сталкивался с новой концепцией, я писал кучу заметок по этой концепции или добавлял TODO комментарий, чтобы вернуться к ней позже.

https://gist.github.com/50d79ed0f1d682204e5e7ce227a1708e

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

Учиться лучше (и эффективно)

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

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

  • Нарисуйте схему, чтобы упростить понимание концепции
  • Наметить, как я собираюсь достичь цели в текущем проекте
  • Реализовать это в моем текущем проекте как собственную изолированную функцию
  • Напишите модульные тесты для этой функции
  • Настройте функцию, чтобы убедиться, что она удовлетворяет всем моим случаям
  • Документация: используйте JSDocs, пишите много комментариев, создавайте заметки уценки для README и/или сохраняйте фрагменты в Evernote/BoostNote.

Совет: если вы видите решение от Stack Overflow или от коллеги или коллеги, но не понимаете его полностью, напишите для него модульный тест и убедитесь, что у вас включен отладчик, чтобы вы могли пошагово выполнять функции с точками останова. Вы можете выбрать и просмотреть определенные переменные, чтобы увидеть, мутируют ли ваши данные или работает ли поведение, как задумано. Вы также убедитесь, что найденный код работает с тем, что вы пытаетесь сделать. console.log, println, fmt.Println и т. д. не всегда полностью раскрывают другую историю.

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

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

Хорошо, понял… Что еще?

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

То, что вы узнали, и весь опыт, через который вы только что прошли, — это то, что вы из этого сделаете. Если вы действительно хотите выделиться среди новоиспеченных разработчиков, только что окончивших буткемп, то вы должны быть увлечены непрерывным обучением. Часто менеджеры по найму будут судить вас по тому, что вы действительно знаете из вещей, которые вы указали в своем резюме. Помните, что все, что вы укажете в своем резюме, является хорошей игрой для вопросов на собеседовании. Поэтому, если вы говорите, что «продвинуты в Node.js», я ожидаю, что вы знаете, как использовать встроенный debugger вместо console.log. Это не то, чего вы должны ожидать от своего буткемпа, потому что их работа — помочь вам начать. Как только вы оторвались от земли, вам нужно сделать следующий шаг вперед, чтобы улучшить свои знания и игру.

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

Кроме того, избегайте перечисления большого количества элементов в качестве навыков в своем резюме, если вы имели минимальное представление о них. Вы всегда можете добавить те навыки, с которыми у вас было минимальное знакомство, в пунктах описания работы и объяснить, как вы использовали их в проекте. Все, что вы перечисляете в разделе «Навыки», является хорошей игрой для глубокого погружения или допроса. Я брал интервью у многих соискателей и обычно задаю вопросы исходя из их навыков; значительная часть этих кандидатов использовала базовую технологию только один или два раза, но на самом деле мало что о ней знала.

Обучение на рабочем месте

Когда я получил свою первую работу после буткемпа, было много информации, к которой нужно подготовиться, чтобы подготовиться. Я столкнулся с необходимостью выяснить, как настроить восходящие потоки и http-прокси с NGINX поверх приложения node.js, как масштабировать приложение node.js, использовать различные базы данных, о которых я никогда не слышал, и многое другое. более. В дополнение к стеку и инфраструктуре, есть также куча общих знаний, например, почему предыдущие разработчики приняли решение сделать что-то, а не другое, или различные причуды аутентификации и управления сеансами, через которые должны пройти сервисы. Никто не узнает и не поймет, что все в один день. Важно не волноваться и иметь настойчивость и стремление переваривать всю эту информацию в своем собственном темпе.

Вывод

Чтобы было ясно, я не выступаю против посещения курсов по программированию. Я чувствую, что они делают идеальное количество для того, чтобы вы начали, и чтобы вы продолжали самостоятельно. В какой-то момент вам придется покинуть гнездо и продолжить обучение самостоятельно. Во время поиска работы я понял, что учиться означает адаптироваться. Просматривая описания вакансий в первый раз, вы, возможно, не знаете, как масштабировать приложения Node.js, Dockerize приложения, использовать NGINX, создавать микросервисы или использовать AWS (не только S3 или lambda). Мне пришлось потратить время, чтобы изучить и понять это, прежде чем подавать заявку на эту работу, просто для того, чтобы я чувствовал, что у меня есть преимущество перед своими коллегами или другими сотнями кандидатов, претендующих на эту работу, или что я адаптируюсь, чтобы стать идеальный кандидат.

Я всегда продолжал учиться и старался понять все как можно лучше. Я закончил буткемп около двух лет назад и многого добился. Я стал руководителем группы инженеров по продукту (дважды в двух разных компаниях), получил сертификат архитектора решений AWS, сыграл неотъемлемую роль в переносе локальной инфраструктуры компании на AWS, и в настоящее время я являюсь старшим специалистом по программному обеспечению. Инженер в Zendesk. Я не оставил эту часть для себя, чтобы похвастаться своими достижениями; многие мои сверстники, которые нашли отличную работу или добились больших успехов, чем я, всегда постоянно учатся, пытаются понять или экспериментируют с новыми вещами. Я искренне надеюсь, что ваши результаты окажутся лучше моих.

TL;DR: продолжайте учиться и хорошо понимать свою область. Работайте над тем, чтобы овладеть вещами, которые вы хотите делать достаточно хорошо. Экспериментируйте с вещами и попытайтесь узнать все тонкости того, как они работают. Выделите 5–10 минут, чтобы прочитать статью о своем домене или попробовать что-то новое.