Мое двухлетнее путешествие по карьерной лестнице

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

Обучение

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

Примерно в то же время мой друг также получил свою первую должность в Forbes в области разработки программного обеспечения. Он был действительно доволен тем, что делал, и это повлияло на меня. Я чувствовал, что хочу этого для себя, но не хотел возвращаться в колледж и тратить больше денег на обучение программированию. Мой друг предложил Udemy курс Веб-разработка Кольта Стила, чтобы начать работу. Это был отличный курс, но в то время я не мог полностью объединить концепции вместе. Мне нужно было больше структуры.

К счастью, мой друг предложил мне другое альтернативное решение для обучения: учебный лагерь по программированию Flatiron School. Он не присутствовал на самой программе, в отличие от некоторых его коллег из Forbes. Кроме того, он упомянул, что его коллеги также не имели опыта программирования и узнали основные концепции от Flatiron School, чтобы добиться успеха в такой среде, как Forbes.

Этой причины мне было достаточно, чтобы выбрать Flatiron School и сделать следующий шаг. Оттуда я подал заявку на участие в программе, прошел собеседование и был выбран в их когорту 1 апреля 2019 года. Впоследствии я принял решение оставить свою роль учителя в государственной школе и полностью посвятить себя этой программе.

Флэтайрон школа

Я учился в школе Flatiron School и одновременно учился, и преподавал.

Студенческий режим: начало

Когда я начал программу, я был очень взволнован и нервничал. После знакомства нас сразу же объединили в пары и дали проект для работы. Сам проект был несложным, но он заставил меня понять, насколько быстрым может быть темп.

Первые пару недель были так называемым модулем 1, в котором рассматривались концепции на Ruby. Для меня это было вызовом, но это было хорошо, потому что я учился и рос. Пришлось приспосабливаться к ритму программы. Нам постоянно предлагались новые концепции, и для нас было выпущено множество лабораторных работ. Первоначально я думал, что мне нужно пройти все лабораторные работы, чтобы не отставать, но я не осознавал этого до более поздних этапов программы.

Студенческий режим: борьба

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

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

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

Студенческий режим: партнер проекта

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

Раньше я работал в паре с напарником над небольшими лабораторными работами / заданиями. Это был мой первый опыт совместной работы с кем-то над веб-приложением. Это дало мне еще один познавательный опыт. Мы провели мозговой штурм по нескольким проектным идеям и обсудили различные способы их реализации.

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

Студенческий режим: финишная черта

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

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

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

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

Режим учителя

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

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

Во время моих тренировочных часов обучения просто не происходило. Попутно я продолжал смотреть обучающие видео по программированию на YouTube и Udemy. Я наблюдал за известными инструкторами TraversyMedia, Andrew Mead, Dev Ed и, конечно же, Colt Steele.

Я сосредоточился на концепциях Javascript, включая NodeJS и React. Я хотел сосредоточиться на изучении одного языка программирования и его ключевых концепций вместо изучения нескольких языков.

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

Мое время в Flatiron School было определенно большим опытом как в качестве студента, так и в качестве тренера. Обучение и рост для меня никогда не прекращались.

Поиск работы

Пришло время преследовать мою первоначальную цель и причину, по которой я поступил в Flatiron School: карьеру инженера-программиста.

Резюме / Портфолио

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

В своем резюме я использовал шаблон с сайта canva.com. У них простой, но отличный дизайн резюме, привлекательный для читателя. Единственным недостатком является то, что у парсеров возникают проблемы с точным чтением данных.

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

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

Структуры данных и алгоритмы

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

Я сразу же переключил свое внимание на это. У меня было несколько доступных ресурсов: курс Udemy по структурам данных и алгоритмам, который преподавал Кольт Стил (опять же, этот человек), Interview Cake и, конечно же, LeetCode. Моя структура обучения DS&A вращалась вокруг этих трех основных ресурсов.

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

С помощью LeetCode вы можете искать вопросы на собеседовании, относящиеся к конкретной компании. Однако вам придется приобрести подписку LeetCode. Я ни в коем случае не говорю, что это плохое решение. Фактически, у вас будет доступ к большему количеству контента, и он сосредоточит внимание на конкретной компании, для которой вы проводите собеседование. Чтобы быть прозрачным, я не хотел тратить деньги. Кроме того, я хотел сначала с комфортом решить имеющиеся вопросы.

Работа над этими техническими вопросами была, безусловно, сложной задачей, особенно с вопросами LeetCode. Даже вопросы «легкого» уровня вызывали определенные затруднения. Для меня это, безусловно, проблема и по сей день.

Но самой большой проблемой для меня было то, что я не привык к процессу. Чтобы преодолеть это препятствие, требовались постоянная выдержка и практика. Вначале были моменты, когда я тратил много времени, пытаясь решить проблемы, но не пытался найти решение. Подобные проблемы наверняка лишили меня уверенности.

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

Процесс собеседования

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

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

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

Подготовка к интервью

Однажды я получил электронное письмо о техническом собеседовании по поводу экрана телефона. Для меня это стало шоком, так как я обратился, не ожидая ответа. Для этого собеседования я решил попробовать что-то другое, помимо практики DS&A.

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

Не менее важно, что я искал в LeetCode обсуждения, связанные с вопросами компании на собеседовании. Был упомянут хороший набор вопросов, и он, вероятно, не включал все из них.

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

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

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

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

Дни, предшествовавшие интервью, были совершенно нервными. Сколько бы я ни готовился, я чувствовал, что этого недостаточно и мне нужно больше практики. Когда настал день, я провел это утро, расслабляясь и копив умственную энергию для интервью. Я чувствовал, что это помогло мне провести марафон интервью.

Результаты интервью

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

Я сделал достаточно, чтобы продемонстрировать свое понимание DS&A, устно общаясь с интервьюерами. Я разъяснил, какие проблемы мы пытались решить, прояснил предположения относительно того, какие данные мы получаем / возвращаем, и обсудил, как решить проблему, упомянув компромиссы. Что помогло, так это понимание того, каковы временные и пространственные сложности каждой структуры данных и для каких целей каждая структура данных была реализована, что Colt Steele подробно описывает.

В тот день я прошел три собеседования, но у меня был еще один финальный раунд. Это вызвало у меня беспокойство, так как это был не первый мой «финальный» раунд, и я уступал в предыдущих. Мой рекрутер упомянул, что этот не будет слишком техническим по сравнению с теми, которые у меня уже были. Это было скорее обсуждение одного из моих проектов. В процессе подготовки я просмотрел свои проекты и сосредоточился на структуре, чтобы я мог легко объяснить, почему я спроектировал ее именно таким образом.

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

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

Отражение поиска работы

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

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

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

Как бы то ни было, всегда двигайтесь вперед и продолжайте совершенствоваться, когда сталкиваетесь с отказом от работы. Это еще не конец, и есть еще много возможностей.

Заключительные замечания

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

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

Спасибо за чтение!