Компания Geekfactor cовместно с Getmentor.dev проводит программу подготовки к трудоустройству в зарубежные стартапы (бесплатно помогаем подготовиться к интервью и показываем резюме классным компаниям) — почитать о ней подробней и зарегистрироваться можно тут. Первый бесплатный вебинар с экспертами программы пройдёт 2-го ноября.
Последние несколько месяцев многие друзья и начинающие специалисты просят рассказать о моем опыте подготовки и успешного прохождения собеседования на должность инженера-разработчика программного обеспечения в Amazon.
В этой статье я хочу предложить вам «дорожную карту», которая поможет подготовиться к работе в компании мечты. Постараюсь говорить кратко, по существу, не перегружая вас лишней информацией, и осветить все темы, независимо от наличия или отсутствия опыта. Даже если вы никогда не писали код, прочитав статью, вы сможете составить четкий план, который позволит получить работу в компании мечты.
Как я начинал...
Расскажу немного о себе. В 2021 г. я получил степень бакалавра в Технологическом институте Гувахати по специальности «Гражданское строительство» (да, именно так!). Ещё учась в университете, в декабре 2020 г. устроился разработчиком ПО в Amazon.
Я не был уверен в выборе профессии, поэтому готовиться к этому начал с середины второго курса. Чтобы было понятнее, я разобью эти полтора года на этапы. Найдите 15 минут времени и прочитайте статью до конца.
Стратегия подготовки
Прежде всего, я призываю вас отбросить сомнения и ясно представить себе описанный ниже путь. А дальше просто начните следовать ему шаг за шагом.
Основы C++/Java и ООП → Структуры данных и алгоритмы → Навыки и проекты в сфере веб-разработки → InterviewBit → Олимпиадное программирование (дополнительно) → Основы информатики → Leetcode → Повторение
Перед тем, как начать: этим рекомендациям важно следовать на всех этапах подготовки
Выполняйте эти пункты, начиная с самого первого дня подготовки, и не пренебрегайте ими ни при каких обстоятельствах. На мой взгляд, их значимость сложно переоценить.
Делайте заметки в блокноте. Ведение письменных заметок облегчает понимание материала и помогают повторять его. Особенно ярко вы поймете их ценность за месяц до начала собеседований.
Записывайте то, что важно. Не нужно записывать все, о чем вы прочитали, или отмечать каждую решенную задачу. Фиксируйте только то, что кажется совершенно новым или трудным для понимания и запоминания. Также стоит записывать решения задач, на решение которых вы потратили много времени и если вы в процессе узнали что-то важное.
Ничего не пропускайте. Старайтесь проанализировать и понять, почему вы действовали именно так, а не иначе. Как можно понять, какие задачи решаются данным методом? Почему эта задача была решена этим методом? Старайтесь разобраться в математическом смысле задач. Во всем, что изучаете, старайтесь докопаться до сути. Не игнорируйте и не зазубривайте материал, который не понимаете.
Думайте перед тем, как писать код. Никогда не начинайте писать код, не понимая четко его логику. Вначале проанализируйте задачу, постарайтесь понять все исходные условия и что от вас требуется. Затем попытайтесь описать возможное решение задачи на бумаге. И только после того, как вы сформулировали логику решения, приступайте к разработке кода. Со временем это поможет вам не только снизить число ошибок, но и улучшить скорость работы.
Меньше ошибок >>>>> Скорость. В это трудно поверить, но самым важным условием при освоении любого навыка является уменьшение числа ошибок. Скорость приходит с опытом. В качестве аналогии можно привести обучение вождению. Никто на первом уроке не разгоняется до 100 км/ч. Сначала вы едете как можно медленнее, чтобы научиться управлять машиной. Вы осваиваетесь, и через некоторое время можете вести автомобиль, почти не думая об этом. Вы действуете механически. Благодаря мышечной памяти нога перемещается между сцеплением и тормозом и т.д. И вот уже умеете, не задумываясь, водить машину на скорости 100 км/ч.
Учитесь на своих ошибках. Если вы делаете ошибки или не можете решить какую-либо задачу — не расстраивайтесь. Напротив, пусть этот момент принесет радость: ведь задачи, при решении которых вы столкнулись со сложностями, гораздо полезнее для вашего обучения. С другой стороны, задачи, которые вы сразу смогли решить, помогли вам повысить скорость работы и стать увереннее — а это тоже важно. Сталкиваясь со сложными задачами, вы получаете возможность научиться чему-то новому. Так приложите максимум усилий: читайте статьи, смотрите видео с решениями, советуйтесь с другими людьми. В конечном счете, вы должны знать и понимать все концепции, связанные с этой задачей. В следующий раз, столкнувшись с аналогичной задачей, вы сможете ее решить. Только так вы будете двигаться вперед.
Найдите друга-программиста. Если у вас есть друг-программист, то вы можете с ним обсуждать возникающие сомнения и отслеживать собственный прогресс на пути подготовки.
Думайте вслух. Попробуйте проговаривать решения задач вслух (никто не назовет вас сумасшедшим). Такая привычка полезна для онлайн-собеседований: она позволяет интервьюеру лучше понять ход ваших мыслей и более объективно вас оценить, даже если вы смогли лишь частично ответить на вопрос.
Этап 1: Базовые знания языка
Как же получить базовые знания того или иного языка?
Существует множество подходов. Выберите тот, что больше всего вам подходит.
1. Если вы не хотите тратить деньги на платные онлайн-курсы — не проблема. На YouTube есть масса хороших видео, которых более чем достаточно. Вы можете воспользоваться следующими плейлистами:
Плейлист C++ на канале CodeWithHarry. Здесь есть вся информация о С++, которая нужна вам, чтобы начать готовиться к собеседованиям. Отдельно стоит отметить, что он также включает в себя некоторые концепции ООП.
Плейлист DS Algo. Этот плейлист охватывает не только основы языка C++, но и многие структуры данных и алгоритмы, что позволяет обучающемуся меньше зависеть от конкретного языка программирования и перейти к следующим этапам подготовки. Посмотрите эти видео, и вы получите прекрасное представление о программировании и сможете самостоятельно решать многие задачи низкой и средней сложности или, как минимум, понимать их решения.
Если вы учитесь с помощью YouTube, не забывайте писать код по мере просмотра видео. Когда автор ролика поставил задачу и приступает к ее решению, поставьте видео на паузу и попробуйте написать код самостоятельно. Если решение не приходит вам в голову, не торопитесь, подумайте еще 15-30 минут перед тем, как посмотреть решение, предлагаемое в ролике.
2. Если у вас есть деньги и вы хотите получить полный набор знаний, вам лучше всего подойдет ресурс Coding Ninjas.
Структуры данных и алгоритмы C++: Этот курс охватывает практически все темы, включая синтаксис, структуры данных и алгоритмы С++, а также подходы ООП. Он предлагает и теоретические знания, и практические навыки. Пройдя курс, вы получите отличную базу, которая позволит вам легко перейти на следующие этапы. На сайте также действует «Система разрешения сомнений»: если у вас появляются сомнения или вопросы по изучаемому материалу, к вам сразу подключается консультант и помогает разобраться. На мой взгляд, это прекрасная функция. У этого курса множество преимуществ, на которых я не буду останавливаться в этой статье. Вы можете прочитать о них на сайте Coding Ninjas.
Олимпиадное программирование. При наличии свободного времени и денежных средств вы также можете пройти дополнительный курс «Олимпиадное программирование». Я прошел оба курса, хотя стоит отметить, что, когда я готовился, их цена была достаточно низкой.
Этап 2: Веб-разработка
Теперь, когда вы хорошо изучили структуры данных и алгоритмы и получили прочную базу, пора переходить к разработке проектов, которые войдут в ваше резюме.
Лучший ресурс для этого — Udemy. Здесь в основе курсов лежат практические проекты. Предлагаемый материал очень хорошо объясняется, и при этом стоимость курсов довольно низкая. Мне также понравилась «Система разрешения сомнений» Udemy. Ответы приходят меньше, чем за день, а курсы оперативно обновляются. Вы можете выбрать любую технологию разработки и пройти соответствующие курсы. Также, если у вас есть время, вы можете взять дополнительные курсы, которые вам интересны. В любом случае, я настоятельно рекомендую пройти как минимум курсы, перечисленные ниже:
Курс молодого веб-разработчика. Лучшего инструктора зовут Кольт. Он объясняет материал так, что вам сразу же все становится понятно. Курс охватывает практически все темы, необходимые для создания собственного сайта на полном стеке. Для прохождения курса опыт не обязателен, поэтому курс может быть полезен даже для тех, кто не владеет знаниями и навыками разработки. В рамках курса вам предложат выполнить несколько отличных проектов, которые дадут вам хорошее представление о том, как создаются реальные приложения. С этими знаниями вы сможете создать проекты, которые не стыдно указать в резюме.
React: Полное руководство. Великолепный курс для тех, кто хочет начать разрабатывать приложения с помощью React. Инструктор — настоящий мастер! Каждую тему он объясняет с разных сторон, демонстрируя всевозможные способы работы с React. Этот курс подробно освещает почти все аспекты React, так что, пройдя его, вы станете экспертом. Используя знания, полученные на курсе, вы также сможете разработать проекты для включения в свое резюме.
Идеи проектов найти не сложно, достаточно поискать в Google. Выберите любую идею и создайте на ее основе проект. Если созданный проект будет реально использоваться, это станет важным преимуществом, поэтому рекомендую проявить креативность и мыслить нестандартно.
Этап 3: InterviewBit
К этому моменту в вашем резюме уже должно быть несколько хороших проектов. Поэтому сейчас на первом месте уже не резюме, а практика, практика и еще раз практика.
Запустите новую сессию на InteviewBit и целиком посвятите этому следующие два месяца. Я не устаю повторять, насколько важен раздел программирования на InterviewBit. Можно сказать, что это мост к успешному прохождению собеседований.
Поэтому начните первый раздел с первой задачи и пройдите его до конца. НИ В КОЕМ СЛУЧАЕ не пропускайте ни одну задачу. Старайтесь вникнуть абсолютно в каждую задачу. Вы должны знать решение настолько хорошо, чтобы объяснить его кому угодно.
Не забывайте делать заметки.
Работа на этой платформе максимально приближена к реальным собеседованиям. Иногда ваш код проходит все тестовые сценарии, но не является оптимальным по времени или объему (а это обязательно учитывается на настоящих собеседованиях). InterviewBit классифицирует такие задания как неоптимальные и дает по ним дополнительный фидбек.
Для выполнения некоторых задач может потребоваться много времени. Это абсолютно нормально. Постепенно вы научитесь решать их быстрее.
Кроме того, предусмотренная на этой платформе функция «Streak» дополнительно мотивирует решать задачи.
Этап 4: Codeforces (дополнительно)
Если у вас есть время и вам понравилось решать задачи по программированию, сайт Codeforces предложит вам дополнительные знания, а также позволит повысить качество и скорость решения задач.
На Codeforces вы можете начать участвовать в соревнованиях. Начните с раундов Div-3. После каждого соревнования старайтесь анализировать результаты и всегда решайте одну дополнительную задачу. Например, во время соревнования вы смогли решить задачи А, В и С. После соревнования попробуйте решить задачу D. Не торопитесь, прочитайте описание, посоветуйтесь, посмотрите видео с решением на YouTube. Так вы будете двигаться вперед.
Не беспокойтесь о рейтинге. Продолжайте учиться на своих ошибках, и рейтинг неизбежно будет повышаться.
Даже если вы не решаете задачи каждый день, я рекомендую регулярно участвовать в соревнованиях на Codeforces, чтобы привыкать к стрессу во время собеседований и тестирований по разработке кода. Вы также сможете значительно улучшить скорость работы и снизить количество ошибок. Задачи на сайте не однообразные. Они развивают хорошие навыки решения, которые будут очень полезны на собеседованиях.
Допустим, вы хотите решать больше задач с сайта Codeforces. В этом случае, я рекомендую определить рейтинг задач, которые вызывают у вас трудности, затем в разделе задач отобрать все задачи с этим рейтингом с помощью фильтра и решать их одну за другой. И так, пока вы не почувствуете себя уверенно на этом уровне сложности. Затем вы можете переходить на более высокий уровень.
Кстати, рекомендую отключить теги задач. Мне это очень помогло.
Вы также можете скачать список интересных задач, которые Codeforces размещают на платформе A2oJ. Он имеет пошаговую структуру для разных уровней сложности.
Этап 5: Основы Сomputer Science
Неважно, где вы работали раньше. Даже если ваша деятельность не была связана с computer science, для прохождения тестов и собеседований вы должны владеть ее основами. Вам не нужно знать абсолютно все, но вот обязательные темы в порядке важности:
ООП. Это очень-очень важная тема. Вы должны изучить ООП настолько тщательно, чтобы уметь ответить на любой возможный вопрос интервьюера. Вы уже изучали это на предыдущих этапах, но, чтобы освежить знания, рекомендую ознакомиться с материалами сайта GFG.
ОС и СУБД. В тестах и на собеседованиях часто встречаются вопросы по этим темам. Необязательно знать их в совершенстве, но важно хорошо понимать основные принципы. Достаточную для прохождения собеседований информацию вы также можете изучить на сайте GFG. Если у вас есть время, можно посмотреть тематические плейлисты на YouTube — это позволит глубже погрузиться в тему.
Сетевые технологии. На YouTube есть прекрасные плейлисты по этой теме. Дополнительно можно почитать материалы на GFG. Распределяя свое время, учтите, что вопросы по сетям задают реже, чем по остальным темам.
Теперь, когда вы уже достаточно глубоко изучили перечисленные разделы, чтобы подготовиться к вопросам, которые встречаются в тестах и на собеседованиях, забейте в Google запросы по каждому из них. Например, «Самые распространенные вопросы по ООП на собеседованиях». Выберите вопросы из верхних позиций поиска и убедитесь, что можете ответить на каждый из них. Если нет, вернитесь к изучению материалов по соответствующему разделу. На сайте GFG по всем этим темам выложены короткие конспекты. Вы можете использовать их, чтобы быстро освежить знания перед собеседованием. После этого ваша подготовка по основам сomputer science будет завершена.
Этап 6: Leetcode
Это самый важный этап после работы с InterviewBit. Трудно поверить, но подготовки с помощью Leetcode достаточно, чтобы успешно проходить собеседования в такие компании, как Amazon, Google и Microsoft (помимо Leetcode можно использовать и другие похожие платформы - примечание переводчика). InterviewBit является частью Leetcode, поэтому я рекомендую вам сначала заниматься на платформе InterviewBit. На ней представлены наиболее важные и часто задаваемые вопросы Leetcode. Вот, как я рекомендую работать с Leetcode:
Найдите на Leetcode 100 самых популярных задач и решите каждую из них.
После этого можно перейти к другим задачам. Выберите желаемую тему, установите средний уровень сложности, отсортируйте задачи по популярности и решайте. Когда вы почувствуете себя уверенно в решении задач по выбранным темам, снимите теги и переходите к решению случайных задач.
Всегда пытайтесь самостоятельно решить задачу в течение 30-45 минут, прежде чем заглянуть в ответ.
Старайтесь делать как минимум четыре задачи средней сложности в день. Когда вы начнете решать их уверенно, попробуйте свои силы на задачах высокой сложности. Вы также можете решать по 1-2 сложных задачи за 2-3 дня, стараясь сократить это время по мере накопления опыта и совершенствования навыков. Впрочем, для прохождения большинства собеседований вам будет достаточно задач средней сложности.
Перед тем, как пытаться выполнять тесты на написание кода или проходить собеседования, вам нужно решить примерно 400 задач на Leetcode (не включая задачи начального уровня).
Еще хочу перечислить рекомендации, которые нашел в статьях на Leetcode и которые мне очень помогли:
Если вам тяжело дается тот или иной алгоритм, можете отфильтровать задачи по тегам. Я НЕ рекомендую делать так для обучения в целом, потому что умение определить тип алгоритма для решения задачи — это важная часть навыков, которые вы стремитесь развить. Например, если вы задаете фильтр по тегу «двоичный поиск», то очевидно, что для решения задачи, скорее всего, подойдет именно этот алгоритм.
Разберите несколько старых задач и убедитесь, что нашли оптимальное решение. Онлайн-судья LeetCode часто принимает условно оптимальные решения. Если можно было использовать решение O(N), а вы отправили решение O(N log N), то, скорее всего, ваш вариант пройдет. Показатели времени выполнения и используемой памяти не очень информативны, поэтому на них не стоит особо обращать внимание. Они полезны только в тех случаях, когда время выполнения существенно отличается, например, для O(N) и O(N²), и распределение времени имеет двухвершинный вид.
Еженедельные соревнования — хороший способ оценить свои силы по сравнению с другими разработчиками. Кроме того, участвуя в них, вы привыкнете к дефициту времени и научитесь решать задачи, с которыми не сталкивались раньше. (Я настоятельно рекомендую участвовать в еженедельных соревнованиях. Они проще, чем на Codeforces, но лучше подготовят вас к собеседованиям и тестам.)
«Тренировочные» собеседования — это новая функциональность, позволяющая подготовиться к дефициту времени. Еще несколько лет назад ее не существовало. К сожалению, отфильтровать уже решенные задачи нельзя, поэтому они могут повторяться. Воспринимайте это как возможность заново разобрать старые задачи. Это также поможет вам определить свои слабые места.
Дополнительные рекомендации
Прокачивайте свой профиль в LinkedIn. Регулярно обновляйте информацию и ведите его в профессиональном ключе. Не размещайте контент, содержащий спам, или сообщения с просьбой подписаться на ваш профиль. Чтобы привлечь подписчиков, публикуйте полезные статьи, видео и просто советы.
Подготовьте хорошие вопросы. Я уверен, что половину моего успеха на собеседовании обеспечили правильные вопросы, такие как «Что бы вы изменили в своей команде, если бы могли?» или «Что больше всего мешает вашей работе в Amazon?» Такие вопросы не только позволяют начать диалог, но и дают интервьюеру возможность немного поделиться своими проблемами. Это создает хорошее впечатление. Вам нужно сделать так, чтобы интервьюеру понравилось собеседование с вами...
Пройдите пару тренировочных собеседований перед реальным интервью. Вы можете попрактиковаться с друзьями или использовать любой из множества онлайн-ресурсов.
Правильно называйте переменные. На этапе собеседования, на котором нужно писать код, присваивайте переменным понятные имена, а не просто случайно выбранные буквы типа «a», «x», «p» и т.д. Пишите чистый и удобный для понимания интервьюера код. Внимательно проверяйте граничные случаи — это очень важно.
Изучайте чужой опыт прохождения собеседований. Перед тем, как пойти на собеседование, найдите как можно больше рассказов о чужом опыте прохождения собеседований в этой компании. Отсортируйте их по дате, начиная с более новых, и внимательно прочитайте. Не пропускайте ни одного вопроса. Вы должны уметь отвечать на все вопросы и решать все задачи, которые упомянуты в этих рассказах.
Самые популярные вопросы. Перед тем, как пройти собеседование в компании Х, задайте поиск: «Самые популярные вопросы компании Х».
Подготовьтесь к собеседованию с HR-специалистом. Нельзя недооценивать этот раунд. Очень важно хорошо к нему подготовиться. Отвечая на вопросы, приводите примеры из реальной жизни. Постарайтесь больше рассказать о своих технических знаниях и образовании, а не погружаться в философские рассуждения. Вы сможете ответить почти на любой вопрос HR-специалиста, если подготовитесь — ведь почти все они сводятся к достаточно узкой области. Для большинства этих вопросов, которые легко найти в Google, составьте ответы, которые представят вас в выигрышном свете.
Продолжайте учиться. Не теряйте надежду. Прилагайте максимум усилий, учитесь на своих ошибках — и когда-нибудь вы точно попадете в компанию своей мечты!
Компания Geekfactor cовместно с Getmentor.dev проводит программу подготовки к трудоустройству в зарубежные стартапы (бесплатно помогаем подготовиться к интервью и показываем резюме классным компаниям) — почитать о ней подробней и зарегистрироваться можно тут. Первый бесплатный вебинар с экспертами программы пройдёт 2-го ноября.
Перевод выполнен компанией Itrex.
Читайте также:
Комментарии (4)
YuriPanchul
30.10.2021 11:41-1Civil engineering переводится как "Гражданское строительство"? Серьезно?
protobuf
Очередная история успешного успеха
ValentinDom Автор
Ну мне кажется, набор ресурсов довольно интересен.
Мы бы рады делиться "историями неуспеха", но, к сожалению, немногие стремятся их рассказывать.
qant
Ну в заголовке же не написано как получить работу, а как подготовиться, так что все ок ))