Как готовиться к собеседованию WEB программисту

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

Что же я вижу когда собеседую людей?

Выделю 2 категории кандидатов:

  1. Те кто слабоват для вакансии на которую притендует
    1. Но готовился
    2. Не готовился
  2. Те кто выглядит уверенно
    1. Но готовился
    2. Не готовился

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

На моей практике(а это около 50 собеседований за последнее время) никто не назвали всех принципов, максимум S и D

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

С этой задачей справляется очень мало кандидатов.

Но все же есть те кто проходит и этот квест достойно.

Как же готовиться?

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

Стажер

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

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

Джун

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

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

Мидл

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

Синьер

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

Так же вы должны уметь решать сложные проблемы, в том числе и архитектурные. Здесь вам точно пригодится книга «System Design. Подготовка к сложному интервью«. Если вы не можете спроектировать небольшой сервис, к сожалению вам не получится получить должность ни в одной крупной компании. А если вы хотите получить максимально большой оклад, то прохождение алгоритмической секции обязательно. Повторяюсь, но leetcode.com маст хев.

Тимлид

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

Итог

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