Собеседования (1)
Переписывался на тему собеседований (привет, А.!) и вспомнил: в черновиках лежит заметка о том, как бы я провел собес сейчас.
Надо сказать, что я давно этого не делал. Уже 10 лет я удаленьщик без права принимать решения, в том числе в плане найма. Однако я вижу, что происходит в индустрии, замечаю, как работают те, кто прошел собес. На базе этого складываю (теоретическое) представление о том, как собеседовать сегодня.
Проблема собеседований в том, что соискателям дают одну сложную задачу. Она проверяет что-то одно, например знание деревьев или рекурсии, но ничего не говорит о других навыках. Деревья – это хорошо, но работу можно делать и без них, а если где-то застрял – спросить у коллег.
Я уже рассказывал, как знакомый собеседовался в Яндекс. Он прошел один технический собес, дали второй. Он прошел второй, дали третий. Третий он не прошел, и в работе отказали. Знакомый тут же устроился в Газпром. Спрашивается, что это было?
Напоминает развлечение, популярное в Средние века. Если женщину подозревали в колдовстве, ее топили. Если тонула, все вздыхали с облегчением – одной ведьмой меньше. Если всплывала, значит ей помог дьявол, и женщину сжигали.
В чистом виде подход Яндекса: если ты прошел собес, это наша недоработка. Держи еще. Ты должен его провалить, познать унижение и пойти на грейд ступенью ниже.
Чтобы не уподобляться Яндексу, давайте задания, которые проверяют все понемножку. Пусть человек форкнет пустой репозиторий и скачает себе. Далее пусть напишет физ-баз и проверит, нет ли в нем ошибок. Попросите добавить тест – выясните, пишет ли кандидат тесты в принципе, какой фреймворк использует. Встанет вопрос о том, как перехватывать вывод в консоль, здесь может быть до пяти вариантов. Предложите сделать функцию чистой. Попросите сделать физ-баз ленивым, то есть написать генератор. В чем разница между генератором и лист-компрехеншеном? Что такое оператор yield и как он здесь поможет?
Результат запушить в форкнутый репозиторий и открыть мердж-реквест в исходный репозиторий.
Видите: даже простое задание можно накрутить так, чтобы покрыть многие темы. Оно проверяет, умеет ли человек пользоваться гитом, может ли писать простой код, может ли писать тесты, а также продвинутые техники языка. А начиналось все, напомню, с физ-база.
Задание должно быть простым и четким. Не давайте графоманию с порталами и эльфами – такие задания дают только моральные уроды. Делайте скидку на волнение – иные люди действительно волнуются, путают функции, додумывают за вас какой-то контекст.
Дизайнер Людвиг Быстроновский рассказывал про сумму навыков. Речь вот о чем: профессионал считается таковым потому, что каждый этап он делает качественно. Спортсмен дышит, набирает скорость, отрывается от земли, летит, приземляется – и все это правильно. Даже если он накосячил на одном этапе, суммарное качество ставит его выше любителя. Так и в айти – если человек владеет гитом, пишет код, тесты, понимает продвинутые моменты, ходит в базу – на кой хрен гонять его целый час по деревьям? Или требовать с него интерпретатор Лиспа?
Заданий вроде того, что я описал, можно придумать много. Например, что-то с двумя таблицами и джоином, дерганьем урлов, вариации физ-база. Придумывать задания полезно, они развивают ваши навыки.
Похожие мысли я читал у Кирилла Мокевнина. Он проводит собеседование так: нужно скачать реальный проект (один из сервисов Хекслета), запустить локально, поправить минорный баг, отправить пул-реквест. Все. С этим справляются единицы, большинство виснут на первом шаге, не могут выполнить две команды make.
Проверяйте все понемножку, а не узкие вещи вроде рекурсии. Цель собеседования в том, чтобы понять – насколько легко включить человека в работу. Если ваше задание не отвечает на этот вопрос, это плохое задание. Проведение собесов в таком случае надо подтянуть.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter