Про второе тестовое интервью

Всем привет,

Сегодня я публикую результаты опроса по второму тестовому интервью.

Вопросы

Q1: В качестве вопроса на разогрев я подготовила вопрос про сбалансированность скобок. Вот эта задача, только начали мы со скобок одного вида – ‘(‘ и ‘)’ – и постепенно перешли к скобкам трех видов.

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

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

Вот эти задачи на geeksforgeeks с решениями:
One
Two
Three

Кандидат

Нашим кандидатом был Эржан – человек с где-то пятью годами опыта в разных областях. Администрирование баз данных, программист, сисадмин, продуктовый менеджер… Также у него в анамнезе было олимпиадное программирование несколько лет назад.

Результаты

После интервью я попросила зрителей ответить на вопрос – наняли бы они Эржана по результатам интервью. Я получила 29 ответов с таким результатом:

ans1

Отзывы

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

Супер!! Мне очень понравилось. Только мне показалось что в описании опыта в ответе на вопрос о работе слишком часто звучали ссылки на проекты out of work, создалось впечатление что кандидат распыляется.

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

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

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

Понравилось:
Хороший английский. То, что во время решения задачи он рассуждал вслух (пусть даже иногда сбиваясь и перескакивая с одной мысли на другую). Адекватно отреагировал на критику и понял свои ошибки. Хорошо знает синтаксис и особенности выбранного языка, уверенно пишет на нем (так мне показалось, мне С++ не знаком).
Не понравилось:
Сразу бросилось в глаза, что Аржан начинал писать код, не задумываясь над задачей и не пытаясь выстроить алгоритм решения заранее.
Понятно, что на интервью мало времени, но даже на нем можно потратить некоторое время на тестовый прогон решения еще до начала написания кода, попробовать объяснить рекрутеру, что именно он хочет сделать – шаг за шагом, на словах. Это позволит сразу выявить слабые места и, возможно, покажет, что выбранное решение неверное.
Как верно было замечено – он умный, мне тоже это показалось, но нет опыта решения алгоритмических задач (хотя он сказал, что занимается программированием еще со школы). Вероятно, это связано с тем, что Аржан не работает программистом, многое могло забыться, а хобби-проекта явно недостаточно для развития нужных навыков. Мне не показалось, что он как-либо готовился к интервью либо готовился мало и в последний момент. Возможно, это из-за понимания, что интервью “ненастоящее”.
Немного не понравился рассказ о себе в начале. Он либо не готовился к такому вопросу, либо готовился плохо – рассказ был сбивчивым, иногда перескакивал с одного на другое, ничего не рассказал о текущей работе, очень мало о проекте – например, какие технологии использовал, с какими трудностями во время разработки столкнулся и как решил их.
В целом, у него явно есть потенциал, который можно развить более активно программируя и решая подобные задачи, тем более сейчас, с таким количеством сервисов с задачами. Я полностью разделяю мнение, что пусть такие задачи могут и не пригодиться в реальной работе, но они невероятно развивают мозги и формируют мышление. Мозг привыкает мыслить более алгоритмически и это сказывается даже в обычной жизни, даже при решении бытовых проблем.

Не знаю как вы, а я из рассказа о себе почти ничего не понял. То есть, я понял, что Эржан что-то программировал.

По резюме сразу было ясно, что кандидат может не дотягивать в плане практики программирования, т.к. мог рассказать только о pet-projects, а не реальных проектах. Другой “звоночек” – не стал решать первую задачу с помощью стеков (во всех классических книгах по алгоритмам всплывает именно оно), или мог бы объяснить почему свой вариант лучше стеков. Не уточнил какой язык можно выбрать для решение задачи, а принялся писать на С++, который видимо знает хуже Python (упомянутого в pet-project). Итог: налегать на hackerrank.com, найти работу Software Engineer, подтянуть знания языка, на котором пишешь код на собеседовании.

Лариса, спасибо за предоставленную возможность посмотреть на пример интервью – не такое уж оно и страшное, как казалось раньше. Задачки вполне себе решаемые, а раньше думалось – о боже, Гугл, да они наверное только суперчеловеков берут.

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

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

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

Мои выводы

1. Практика тестовых интервью – невероятно полезная. Смотрите – ребята, которые видели интервью, отчетливо заметили какие моменты сразу бросаются в глаза и задали себе вопрос – а не делаю ли я так же. Это отличный и очень эффективный метод учиться на чужих ошибках (спасибо Эржану, что согласился быть подопытным кроликом!).

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

3. Готовьте ответы на вопросы вроде “Расскажите мне о вашем проекте из резюме” или “Расскажите мне о вашем профессиональном опыте” заранее. Желательно попросите кого-нибудь дать вам отзыв – насколько ваш ответ понятен.

4. Интервью на самом деле довольно несложные. Посмотрите уровень задач, которые я задавала. Если бы вы решили до этого 50+ задач на массивы в разных вариантах, то вы бы справились наверняка без проблем. Поэтому опять же – практика-практика-практика.

5. Нужно обновлять тестовые интервью. Для начала я проведу вебинар о том, как проводить интервью (он будет в открытом доступе в записи, поэтому не волнуйтесь, если у вас не получится посмотреть вживую). Мне понадобится около 8 человек в hangouts для интерактивности. Формат будет такой – я рассказываю, потом вопросы и обсуждения. Запись для участия в hangouts откроется завтра. Тестовые интервью откроются на следующей неделе.

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