Обложка: Как пройти собеседование? Советы разработчика из Кремниевой долины

Как пройти собеседование? Советы разработчика из Кремниевой долины

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

Я успел поработать в 7 местах, от стартапов до крупных IT-компаний. В данный момент работаю в стартапе, разрабатывающем систему для оценки рисков при выдаче медицинских страховок в США.

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

Как готовиться к собеседованиям

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

  • Российские большие компании — в этом случае теория преобладает над практикой. У вас будут спрашивать принципы написания кода, паттерны проектирования, особенности вашего языка программирования и фреймворка. Для таких компаний надо учить термины и определения.
  • Российские стартапы — похожи на своих больших братьев, но тут уже чаще требуют поработать с кодом. Сделать код-ревью, порешать логические задачи, иногда пописать код. Начинают спрашивать, как поступить в той или иной ситуации в проекте. Тут больше оценивают ваш кругозор и возможность решать любые задачи.
  • Зарубежные стартапы — по моему мнению, такие собеседования близки к российским. Вас ещё могут спрашивать про ваш язык и фреймворк. Лайвкодинг встречается почти всегда. Как правило, это несложные задачи, направленные на проверку ваших знаний по структурам данных и Big O. Всё ещё смотрят на ваш кругозор, но уже с прицелом на то, чтобы вы в первую очередь были хорошим программистом, а если чего-то не знаете, то научитесь.
  • Зарубежные большие компании — эти собеседования вообще не похожи на российский рынок. Почти не спрашивают банальную теорию, которая гуглится за 2 минуты. Вас будут гонять по алгоритмам, структурам данных, Big O, будет много лайвкодинга. Не важен ваш стек, важно ваше знание Computer Science.

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

Как готовиться к теоретической части собеседования

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

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

Я .Net-, React-разработчик, вот мой пример:

  • С#, .Net — для меня источником информации была книга CLR via C#, её знают все разработчики. На данном этапе я читаю официальную документацию по всему, что выходит, будь это C# 9 или .Net 5.
  • JavaScript, React — тут мне очень помогла самая популярная книга по JavaScript на Амазоне — JavaScript: The Definitive Guide. Ну и затем я перешёл на новую документацию по JS. В React я начинал с видеоуроков, ссылки кидать бессмысленно, ибо они уже 100 раз устарели. И опять же закончил чтением документации.

В итоге всё сводится к официальной документации, но если вам тяжело в неё вникать, то можно поискать, книги, курсы, статьи и прочий контент.

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

  • «Чистый код» Роберта Мартина — хорошая, лёгкая книга, описывающая доступным языком практики написания хорошего кода. Описывает всё: от количества отступов и имён переменных до принципов разделения зависимостей и других полезных практик. Поможет пройти любой тест на код-ревью.
  • Head First Design Patterns: A Brain-Friendly Guide  — на мой взгляд, самая простая и лёгкая книга по паттернам. Мне кажется, что сама идея строгих паттернов давно устарела, но их ещё много где спрашивают. Так что если вы чувствуете необходимость в их изучении, то это самый простой способ.
  • Cracking the Coding Interview: 189 Programming Questions and Solutions — книга описывает все популярные структуры данных, про которые спрашивают на собеседованиях, и разбирает связанные с ними примеры задач. Отлично подходит как краткий курс по всем популярным вопросам на эту тему.
  • Introduction to Algorithms, 3rd Edition — большая и самая серьёзная книга из текущего списка. Покрывает все популярные алгоритмы и разбирает их во всех подробностях. Если осилите её, то сможете ответить на все вопросы по теории, которые только могут задать.
  • И напоследок — хорошая шпаргалка по Big O.

Как готовиться к практической части собеседования

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

В ранее упомянутой Cracking the Coding Interview собран большой список реальных задач с многочисленных интервью. Она хороша подойдёт в качестве начального этапа подготовки к практике.

Для живой практики задач отлично подойдёт LeetCode. Там есть большой перечень различных задач с редактором кода под любой язык и готовыми решениями. Есть отдельные списки задач под каждую крупную зарубежную компанию. Мой совет — начинайте решать с самых популярных задач и постепенно идите к менее популярным. Прорешав 50+ задач, вы будете готовы к любой практической части.

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

Отдельно стоит упомянуть задачи на дизайн систем. Тут, к сожалению, очень трудно рекомендовать что-то одно. Эта сфера балансирует между теорией и практикой, здесь может помочь только опыт. Самое лучшее, что я могу найти, это книга по подготовке к задачам по дизайну систем — System Design Interview

Главный совет

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

Когда вы последний раз проходили собеседование и сколько заняла подготовка к нему?