В нашем блоге мы рассказывали о том, как разработчикам следует составлять свое резюме, чтобы получить приглашение на собеседование. Команда проекта Triplebyte, который занимается подбором ИТ-специалистов для многих известных стартапов, опубликовала материал, в котором дала советы, которые помогут программистам успешно пройти интервью. Мы представляем вашему вниманию адаптированную версию этой заметки.
Для того чтобы удачно пройти собеседование недостаточно быть хорошим программистом. Решение какой-либо технической задачи в реальных условиях может занимать недели и месяцы, на интервью у кандидата будет куда меньше времени. Именно поэтому для разработчика важно умение излагать свои мысли четко и лаконично, несмотря на психологическое давление.
Задача несколько усложняется тем фактом, что с большой долей вероятности беседу придется вести с человеком далеким от технических подробностей. Однако есть несколько простых правил, которые позволят успешно пройти это испытание.
Важно демонстрировать вовлеченность
Энтузиазм во время собеседования играет важную роль. Очень часто разработчики «заваливают» интервью своими ответами на не-технические вопросы. В таких случаях в качестве причины отказа представители компании могут указать «несоответствие корпоративной культуре». В 9 из 10 случаев это просто означает отсутствие увлеченности процессом собеседования у кандидата и тем, чем занимается сама компания. Можно долго спорить, зачем это нужно, но людям, работающим в компании нравится, когда кто-то демонстрирует искренний интерес в ее работе. Они убеждены, что увлеченные коллеги будут работать с удвоенной энергией.
Подобный интерес довольно просто продемонстрировать. Это не означает, что нужно кого-то обманывать. Лучше просто представить, что собеседование – это первое свидание. Вряд ли девушка захочет слышать на первой встрече, что она далеко не первая, и на ее месте легко могла оказаться другая. Совсем нет, она хочет знать, что она единственная и неповторимая, пусть даже это будет и не совсем так. Да, подавляющее большинство людей просто хочет иметь нормальную работу с хорошей зарплатой. Но откровенно заявлять об этом на собеседовании вовсе не обязательно.
Самый простой путь к успеху – предварительно почитать о компании в интернете, составить список того, что вам в ней нравится и упоминать эти факты во время беседы. Идея кажется банальной, но почему-то лишь небольшая часть кандидатов так в действительности поступает. Можно даже законспектировать такие факты и зачитывать их с бумаги — записи говорят о том, что вы пришли на интервью подготовленным.
Ответы на часто задаваемые вопросы нужно выучить
Существенная доля вопросов на собеседовании программистов затрагивает такие темы, как структуры данных и алгоритмы. Компания Triplebyte собрала и классифицировала эти вопросы, опросив своих кандидатов. Выяснилось, что 70% из них, так или иначе, связаны с алгоритмами. Вот список тем от компаний из пула акселератора Y Combinator:
- хэш-таблицы;
- связанные списки;
- алгоритмы поиска в ширину и глубину;
- быстрая сортировка, сортировка слиянием;
- бинарный поиск;
- матрицы;
- динамические массивы;
- бинарное дерево поиска;
- динамическое программирование;
- анализ сложности алгоритмов.
В зависимости от опыта конкретного специалиста, все это может выглядеть для него простым или сложным. Но, как бы то ни было, это список тем, которые чаще всего попадаются на интервью в технологических стартапах. Поэтому, даже если все эти вещи вам хорошо знакомы, не лишним будет освежить в памяти эту информацию. Хорошая новость здесь заключается в том, что сегодня можно легко найти огромное количество данных по этим темам — к примеру, на Coursera есть целый ряд интересных курсов, посвященных алгоритмам.
Поддержка собеседника всегда пригодится
Обычно сотрудники, проводящие интервью, готовы помочь кандидату: дать подсказку или направить в нужное русло мысль. Но нельзя забывать простой факт, говорящий о том, что к разным кандидатом – разное отношение. Некоторые способны воспользоваться помощью, не настроив работодателя против себя. Другим подсказки засчитываются как ошибки.
Все дело в коммуникации. Если собеседнику нравится, как вы с ним общаетесь, он будет не прочь оказать посильную помощь. Вот несколько рекомендаций, как выстроить разговор:
- задавайте вопросы;
- для начала предложите самые простые и убедительные решения;
- затем более сложные и эффективные;
- проговаривайте свои мысли и идеи для каждого из вариантов;
- только потом садитесь писать код.
После того, как вам задали вопрос, начните с того, чтобы прояснить сказанное. Это тот случай, когда полезно быть педантом. Выясните, правильно ли вы все поняли. Не должно оставаться никакой двусмысленности в задаче. Озвучьте конкретные примеры для входных данных, чтобы убедиться, что на выходе получится корректный ответ. Старайтесь задавать вопросы, даже если на 100% уверены в своем решении. Это создаст впечатление, что вы в курсе всех побочных вариантов и имеете представление о полном спектре проблемы. Но главное – это поможет выиграть время перед ответом.
Затем можно озвучить самое простое и убедительное решение проблемы. Проговаривайте свои мысли вместо того, чтобы немедленно кинуться писать код. Если в процессе артикуляции задачи вам удастся увлечь собеседника, то можно получить несколько полезных уточнений.
Обычно кандидаты стремятся не проговаривать банальные решения, торопясь продемонстрировать свои навыки написания кода. Это ошибка. Главное – уверенность работодателя в том, что вы всегда можете предложить решение (даже если условий для его выполнения под рукой в данный момент нет). Можно спросить собеседника, желает ли он, чтобы вы реализовали это грубое решение задачи, или он предпочитает найти более эффективное и изысканное решение? Скорее, он предпочтет второй вариант.
При поиске более эффективного метода алгоритм подачи тот же. Проговаривайте его, «накидывайте» интервьюеру идеи, прежде чем сесть писать код. В процессе вам будут задавать вопросы. Они могут относиться к упомянутым выше темам. Но, если нет, то ничего страшного. Вспомните о похожих задачах, которые вам приходилось решать. Обычно эти вопросы касаются стандартных применений алгоритмов.
Как только вы придете к общему мнению по поводу оптимального решения, настанет время писать код. В зависимости от компании, вам предложат сделать это на компьютере или на доске — во многих крупных организациях предпочитают второй вариант. Но, так как вы все уже проговорили, заминки не должно возникнуть. Для пущей убедительности, спросите, хотят ли они, чтобы вы также написали и проверочный тест.
Не стоит бояться сложных тем
На собеседовании разработчикам обычно задают вопросы по их специализации, но это не значит, что кандидату не попадется глобальный вопрос из сферы проектирования. Как правило, на таких задачках компании любят тестировать продвинутых специалистов. Вас могут спросить, как создать сложную систему — это может быть социальная сеть или API для банка.
Может показаться, что для ответа на такие вопросы необходимо специальные знание. Но не стоит воспринимать все слишком серьезно. Никто на самом деле не ожидает, что вы с листа создадите свой Facebook прямо на собеседовании. Но работодателю будет приятно знать, что вы обладаете пониманием того, как такую задачу можно было бы решать. В основном, все эти вопросы касаются программной логики в веб-разработке. Поэтому к ним можно легко себя подготовить. Вот несколько тем, изучение которых будет полезно:
- работа с протоколом HTTP;
- базы данных: индексы и план выполнения запросов;
CDN; - алгоритмы и технологии кэширования;
балансировщики нагрузки; - распределенные системы.
Нужно не только знать об этих вещах, но и понимать, как они работают вместе в сложных системах — тут придется почитать литературу. Начинайте разговор с общих вещей и понятий, спускаясь затем на ступеньку ниже. На каждом уровне можно задавать уточняющие вопросы, которые продемонстрируют уровень вашей компетенции и помогут найти следующий ответ. Проговорите несколько возможных решений. Вашему собеседнику, скорее всего, все равно, сможете ли вы создать реально работающую соцсеть. Ему важно знать, видите ли вы проблему в целом, можете ли указать на недостатки и преимущества разных подходов. Не повредит и заранее попрактиковаться в ответах на подобные вопросы.
Практические достижения нужно подчеркнуть
Один из блоков вопросов на собеседовании всегда касается опыта работы. Скорее всего, кандидата попросят рассказать о проектах с его участием. И здесь главное – не промахнуться. Многие программисты по ошибке начинают выдавать детальную информацию о сторонних проектах, бесспорно, интересных с технической точки зрения. Рассказывать о том, как они применяли классификатор нейронной сети или писали грамматический бот для Twitter. Но нельзя забывать о том, что собеседник может быть «не в теме», и потому лишние тонкости ему сложно будет понять. Многие кандидаты преувеличивают значение небольших побочных проектов. Но интервьюер даже не в курсе, были ли они удачными и действительно ли кандидат принимал в них участие.
Стоит выбрать проекты с реальными результатами и сосредоточиться на них в ходе беседы. Вполне возможно, что такие проекты могут быть не столь интересны с технической стороны. Но они будут реальны. Если вы написал игрушку под iOS и ее скачали 50 тыс. пользователей – это хороший результат. Если вы в период своей практики написали интерфейс для команды системных администраторов – это тоже стоящий результат. Проекты, имеющие практическое значение, продемонстрируют работодателю, что вы готовы решать актуальные задачи. Не бойтесь соответствовать шаблону и ожиданиям.
Практика и еще раз практика
Вы будете гораздо лучше чувствовать себя во время собеседования, если попрактикуетесь в ответах на стандартные вопросы. Интервью – в любом случае стресс. А повторение ответов в разы снижает риск растеряться. Найдите список типичных вопросов по вашей специализации и практикуйтесь. Еще лучше, если вы будете записывать ваши ответы на бумагу. Совсем хорошо, если кто-то из друзей или знакомых согласиться пройти с вами интервью в разных ролях.
Даже опытные кандидаты от практики только выигрывают. Потому что обстановка на интервью категорически отличается от той, к которой вы привыкли на рабочем месте. Многие звездные разработчики считают излишним готовиться к собеседованию и проигрывают менее опытным кандидатам.
Важно показать свою востребованность
Если у вас уже есть предложения о работе от других компаний, можно упомянуть об этом на собеседовании. Но важно, чтобы это не звучало как шантаж. При прочих равных, информация о других офферах может ускорить принятие решения компанией-работодателем.