Я руковожу разработкой ПО уже достаточно много лет. За эти годы мне пришлось провести более тысячи интервью и посчастливилось захантить больше сотни классных программистов. Естественно, у меня сложилась определенная практика проведения технических собеседований, которой я собираюсь поделиться. Возможно, это окажется кому-то полезным.
Ставим задачу
Кого ищем? Ищем эффективных бойцов. Известно, что эффективность программистов со схожим опытом может отличаться в 10 раз (Ф. Брукс) или даже в 27 раз (Р. Гласс). Сразу, оговорюсь, эффективность это не только количество трупов врагов реализованных требований к ПО на единицу трудозатрат, но и умение результативно взаимодействовать с окружающими. Это важно, потому что по моим наблюдениям 50% проектных человеко-часов тратится на коммуникации. У нас это называется «синхронизация ментальных моделей».
Поэтому задача, которую ставим себе при проведении технического собеседования это постараться оценить эффективность бойца.
Если на заводы людей нанимают за умения и обучают нужному отношению к делу, то в разработке ПО, следует поступать наоборот. Нанимать за нужное отношение к делу и учить необходимым умениям. Не следует брать людей, которые знают и умеют, а потом заниматься промыванием их мозгов и пытаться мотивировать их на эффективную работу. Их знания и умения ничего не будут стоить уже через полгода или год.
В идеале, конечно, следует стараться привлечь и знающих, и умеющих, и подходящих по своим жизненным позициям. Но если приходится выбирать, то правильнее выбрать жизненную позицию. Ищем тех, кто хочет развиться и расти, а затем, если необходимо, помогаем им получить требуемые технические навыки. Предлагаем не работу, а возможности.
Почему не тестируем
Как правило, технические тесты ориентированы на проверку узкоспециальных знаний: структур данных, алгоритмов, конкретных стандартов и API, и т.д. Правильный/неправильный ответ на вопрос: «i=1; i = i++ + ++i; чему равно i?», — мало о чем свидетельствует. Тем более, что правильного ответа на этот вопрос нет, и не дай бог написать такое в продакшен коде!
Попытки давать кандидатам олимпиадные задачки по программированию, или задачки из книжки «Математические головоломки», у меня, как правило, ассоциируются со стремлением, возможно, не очень успешных вчерашних студентов к самоутверждению или с желанием продемонстрировать кандидату его несостоятельность, чтобы затем снизить предложение по зарплате.
Технические тесты демонстрируют уровень IQ и эффективность левого полушария, возможности которого подтверждены, как правило, дипломом о высшем образовании и всем успешным опытом предыдущей работы.
Креативность и эффективность человека в командной разработке зависят в первую очередь от уровня его эмоционального интеллекта (EQ)и деятельности правого полушария, которое отвечает за целеустремленность, волю, эмпатию, интуицию, способность к эвристическим суждениям. Но, к сожалению, пока не встретились достоверных тесты правого полушария.
Поэтому слушаем, слушаем и еще раз слушаем. А главное слышим!
Принципы
При проведении технического интервью стараемся придерживаться следующих основных принципов:
- Помним, что ведете переговоры с потенциальным партнером по бизнесу, а не пытаемся сторговать на рынке товар подешевле.
- Каждый человек уникален и ему присуща своя ценность. Если нам нечего предложить кандидату, то это не значит, что он «лузер». Помним, что несправедливо обиженный кандидат – пятно на бренде компании. Сегодня это значит не меньше, чем несправедливо обиженный клиент.
- Люди не рождаются победителями, они ими становятся. Кандидата нанимаем только в случае, если мы сумеем предоставить ему эту возможность.
- Ну, и последнее. «Программист – это не профессия, это образ мышления».
Проводим интервью обычно вдвоем с человеком, который будет непосредственно руководить или работать с кандидатом. Это позволяет быть более объективными, посмотреть на кандидата с разных сторон и лучше его понять.
Начинаем
Представляемся кто мы такие. Не забываем, что смена работы это всегда «стресс», который, по мнению психологов, занимает по значению 3-е место после развода семьи и пожара. Помогаем кандидату прийти в себя. В противном случае будем беседовать с другим человеком.
Кстати, в процессе интервью не стоит сидеть через стол от кандидата, поскольку это создает формальную преграду и мешает ему расслабиться. Лучше сбоку от кандидата или рядом.
Спрашиваем
Почему рассматриваете предложения о работе? Что ищите? Что можете рассказать о вашем самом успешном проекте (если студент, то тема диплома или самый интересный учебный предмет)? Что считаете своим наивысшим профессиональным достижением?
Что меньше всего нравилось делать на прежней работе?
Уточняем детали, даже если знаем, что такое «конформное отображение», попросим кандидата объяснить, что он имел в виду, в двух словах.
Предлагаем некорректную задачу (которая при заданных условиях имеет множество решений). Например, определить количество бензоколонок в Москве (“Как сдвинуть гору Фудзи”).
Пробуем посомневаться в чем-то очевидном для кандидата и завязать с ним дискуссию.
Оцениваем
Эмоции и заинтересованность кандидата при ответах. Нет «горения» — минус. «Вполнакала проекты не делаются». Вряд ли, нам удастся его «зажечь». К нашей работе он будет относиться так же. Желания «просто работать» мало. Скорее всего, человек мотивирован на избежание неудач, а не на достижение успеха. От такого трудно ожидать инициативы, поиска новых возможностей и творчества.
Логическую последовательность, лаконичность и ясность повествования. Умение анализировать проблему, проводить ее декомпозицию на более простые компоненты, определять последовательность действий, синтезировать и обосновывать предлагаемое решение.
Зрелость личности. Если кандидат винит в своих неудачах коллег, окружение, начальство – несамостоятельная личность. Если не вспоминает коллег при рассказе о своих достижениях — возможно, недооценивает важность командной работы.
Целеустремленность. Если кандидат не знает, что он хочет, его не стоит брать. Скорее всего, мы имеем дело с человеком, который не стал лидером в своей личной жизни. Если же у кандидата есть ясное видение своих профессиональных целей и стратегии их достижения, а у нас есть проект, на котором он может свои цели реализовать, скорее всего, это «наш человек». Даже если знаний и умений пока недостаточно.
Способность к диалогу и эффективному взаимодействию. Умение рассуждать, задавать вопросы, анализировать ответы, искать взаимовыгодное решение в конфликтных ситуациях.
Отвечаем
Собеседование должно быть двухсторонним. Вы пытаетесь понять, подходит ли кандидат вам. Кандидат – подходит ли ему работа, которую вы предлагаете. Если кандидат задаёт вопросы — это хорошо.
Вопросы, которые обычно ожидаются. Что за проект, в котором предстоит работать: Какие цели? Когда начат? Каково состояние? Сколько человек постоянно на проекте? Опытность команды? Распределение ролей? Какова текучесть? Как организован процесс разработки ПО? Используемые технологии и подходы? Средства автоматизации? Техническое обеспечение? Принятие решений? Постановка задач? Отчетность и оценка результатов? Авралы? Сверхурочные? Система мотивации?
Факт наличия вопросов говорит об активной позиции и заинтересованности кандидата в работе. Правильные вопросы свидетельствуют об опытности специалиста.
Решаем
«Я могу предложить Вам…», далее следует описание позиции, должностных обязанностей и размера компенсации. Возможно, эта будет другая позиция, а не та, на которую, кандидат изначально позиционировал себя, если, на наш взгляд в этой роли он будет более эффективен.
Или «я могу предложить Вам…», далее перечень конкретных отсутствующих знаний и навыков, приобретение которых позволит кандидату, занять данную позицию в будущем. Кандидаты возвращаются!
Автор: craft_brother