
Брать или не брать? или Как собеседовать разработчика
–Был бы готов сообщить заказчику, как мы будем исследовать и решать эту проблему.
Многие из этих пунктов может сделать и менеджер, но они должны быть основаны на технических знаниях, на знании архитектуры приложения. Для того, чтобы разработчик стал высокооплачиваемым, ему нужно быть готовым такие проблемы решать.
При обсуждении технических вопросов играют роль не собственно технические знания, а способность кандидата использовать эти знания в условиях, приближенных к реальным. Я беру случаи из своей практики, выкидываю из них ненужные подробности и получаю ситуации для обсуждения: «Заказчик просит ускорить приложение», «Вам нужно исправлять баги в большом legacy проекте с кучей технического долга», «Вы делаете ревью кода и заметили, что вся команда делает одни и те же ошибки». Когда кандидат будет описывать, что он будет делать в этих ситуациях, он должен будет использовать свои знания из разных технических областей и свои soft skills.
Если вы не сможете эффективно обсуждать подобные ситуации в тепличных условиях собеседования, то будьте уверены, что в реальной работе вас будут ждать большие проблемы.
Побег из курятника
Из компании, которая описана в истории «Про агрессивного Алексея » потянулась целая череда разработчиков. Зная, как там организуется работа, я этому не удивлялся. Собеседования я проводил совместно с лидом соседнего проекта, Евгением, с которым мы уже долго вместе работали и с которым процесс совместных собеседований был отлажен.
Первым пришёл совсем слабый junior-разработчик. Он выслушивал наши вопросы, улыбался, пытался что-то ответить, но получалось у него так себе. Практические задания он совсем не сделал. Хотя парень был активным. Он задавал много вопросов по тем темам, которые были ему наиболее непонятны, и расстались мы с надеждой, что через пару лет сможем поработать вместе.
Второй разработчик был уже сильней. На некоторые вопросы отвечал бодро. Техническое задание, с которым не справился junior, выполнил хорошо. На более сложном задании, правда, уже совсем ничего сделать не смог. Но тоже был активным, и мы хорошо поговорили.
Третий разработчик практические задания выполнил отлично. С теорией было похуже. Он хорошо отвечал на основные вопросы, но когда я начинал копать глубже, то выяснял, что понимания ему не хватает. Как-то царапнуло меня такое несоответствие знания теории и практики. Но Евгений первым догадался, что происходит. «Ты знаешь, Константин, – сказал он мне, – А ведь эти кандидаты сливают своим товарищам все наши вопросы и задачи».
Я немного подумал, и правота Евгения стала для меня очевидной. С теоретическими вопросами это не было проблемой, так как мы проверяли понимание, а не знание каких-то формулировок. Так что единственное, что нам нужно было поменять в процессе, чтоб не выслушивать заученные ответы – это сразу начинать со сложных вопросов, ответы на которые посмотреть нигде нельзя.
А вот с практическими задачами было гораздо сложнее. В моём арсенале было буквально две любымые задачки, и кандидаты уже наверняка их совместно прорешали дома. Когда кандидат, не задумываясь, пишет заранее подготовленное решение, это не даёт возможности понять ход его мыслей. Поэтому нужно было придумать что-то новенькое. Причём придумать надо было быстро, так как четвёртый кандидат был назначен буквально через полчаса после третьего. В результате пока Евгений гонял четвёртого кандидата по теории, я в быстром темпе сочинял практические задания.
С тех пор я имел запас практических задач на случай, если кандидат придёт с «домашней заготовкой». Ну и обращал внимание на то, были ли недавно кандидаты из той же компании.

3.4 Вопросы на собеседовании: Изучение нового
Очень часто в работе нужно изучать абсолютно новую область. Тестировщики изучают автоматизацию и тест дизайн. Разработчики изучают новые технологии. Аналитики изучают новые инструменты и языки описания систем. Все изучают новые методологии разработки. Очень важно знать, может ли кандидат взять новую для себя область и стать в ней экспертом в короткие сроки.
Как всегда, лучшим способом определить, может ли кандидат быстро учиться, будет просто задать прямой вопрос кандидату: «Предположим вам нужно выучить совершенно новую область для вас (библиотеку распознавания образов, например). Как вы подойдёте к этому?»
Хороший ответ, который я получаю на такой вопрос, звучит примерно так:
«Я попробую найти коллегу, который знает эту область, и спрошу его, как лучше всего её изучать и на что стоит обратить внимание. Если такого коллеги нет, то я могу найти специалиста в интернете. Например, задать вопрос какому-нибудь эксперту на форуме.
Обычно стоит начать изучение с каких-нибудь tutorials, чтобы реализовать что-то реально работающее. В процессе обязательно возникнут какие-то вопросы и проблемы. Их решение можно найти в Google или с помощью знакомых экспертов. Когда уже будут какие-то навыки, лучше начать писать реальный проект. Реализация будет неоптимальной и, наверняка, придётся много переписывать, но зато выучишь именно то, что тебе надо, и будет виден прогресс.
Чтобы глубоко изучить эту нужную область, можно найти какую-нибудь обстоятельную книгу. А ещё сейчас много обучающих сайтов, вроде Coursera, где можно найти нужный курс».
В таком ответе мне нравится сразу несколько моментов:
Кандидат не надеется только на себя, а сразу хочет найти кого-то, с кем можно посоветоваться. Видно, что человек готов работать в команде. В новой области он не сможет сразу стать экспертом, но, пользуясь «коллективным разумом», он сможет принимать разумные решения.
Перечислено много разных подходов. Какой-то один может не подойти, но что-нибудь да сработает.
Ориентация на практику. При таком обучении, есть надежда, что проект начнёт получать какую-то пользу в минимальные сроки. Причём итеративный подход к обучению мне тоже нравится. Кандидат готов ошибаться, учиться на своих ошибках и двигаться вперёд постепенно.
Для примера могу привести ответ, который я слышал от одного из кандидатов и который я считаю проблемным:
Лучший способ что-то выучить – это книга. Я возьму хорошую книгу и прочитаю её от корки до корки. Только в этом случае можно быть уверенным, что я действительно имею хорошую базу. Я так выучил всё, что знаю. Например, чтобы выучить C++ я взял классический труд Страуструпа и долго читал его, чтобы узнать все детали языка.
В каких-то областях так можно учиться, но в моей практике обычно приходится изучать что-то, для чего просто нет хорошей литературы[7]. Да и читать серьёзную книгу часами тяжело и неэффективно. Можно потратить много недель, а потом выяснить, что на практике применить полученные теоретические знания не так-то и просто. Поэтому с таким кандидатом я не могу рассчитывать на быстрое изучение нового. Я могу только надеяться на те знания, которые он уже имеет.
Очень хорошо кандидата спрашивать о изучении тех областей, в которых у него проблемы. Например, у кандидата проблемы с английским языком. Но он говорит, что готов быстро закрыть все пробелы. Пусть он достаточно хорошо знает грамматику, но испытывает трудности с говорением, а ему нужно задавать вопросы и получать ответы на английском. Этот навык действительно легко развить, но справится ли конкретный кандидат с этим? В такой ситуации я спрашиваю напрямую, как он планирует это сделать.
Однажды я получил такой ответ:
Я готов вкладываться в своё обучение. Я пойду на платные курсы английского языка. Сейчас много таких. Оплачу курс и стану учиться вечерами.
Такой ответ для меня неубедителен. Желание платить свои деньги и тратить своё личное время, чтобы чему-то научиться, очень похвально. Но позиция кандидата очень пассивная. Он ожидает, что кто-то его научит, но сам он учиться, похоже, не умеет. Мы с ним обсудили очень конкретную проблему, и решение для этой проблемы должно быть очень конкретное. Следующий ответ был бы гораздо лучше:
Я пойду в несколько местных обучающих центров и посоветуюсь, как мне лучше подтянуть английский. Но чтобы улучшить говорение, надо его практиковать. Так что я постараюсь найти кого-нибудь с кем можно говорить по-английски. Есть специальные сайты, где можно найти собеседника из других стран. У меня есть знакомые с хорошим английским, попробую попрактиковаться с ними. Кроме того, мне надо улучшить восприятие английской речи на слух. Например, слушать сериалы на английском языке. Если буду заниматься по часу-два каждый день, то через пару недель эффект уже будет значительный.
В таком ответе есть и активная позиция, и несколько вариантов решения проблемы. Если даже ни один из этих вариантов не подойдёт, то можно быть уверенным, что такой кандидат придумает ещё что-нибудь.
3.5 Вопросы на собеседовании: Сложная задача
Один из обязательных вопросов на моём собеседовании звучит так: «Представьте, что вы работаете над какой-то задачей и она оказалась очень трудной. Вы не знаете, как двигаться дальше и не уверены, что вообще её решите. Что вы будете делать?»
Этот вопрос не настолько прост, как кажется, так как покрывает сразу несколько областей: технический кругозор, стрессоустойчивость, умение работать в команде. Задача поставлена очень общо, конкретные действия, конечно, зависят от деталей проблемы. Поэтому самое главное, что ожидается от кандидата – это большой список возможных действий, чем больше, тем лучше:
Погуглить возможные решения;
Попросить помощи у коллег;
Задать вопрос на специализированном форуме;
Если проблема связана с какой-то коммерческой библиотекой, то обратиться в службу поддержки этой библиотеки;
Сообщить своему менеджеру и попросить у него помощи;
Если возможно, то вообще не делать эту задачу (изменить требования);
Переключиться на другую задачу. Возможно, решение придёт, когда над ним не работаешь;
Закопаться в код поглубже, нерешаемых задач нет.
Длина такого списка возможных действий определяет способность кандидата работать над такими «нерешаемыми» задачами. Эти задачи не решаются в лоб, поэтому чем больше вариантов может придумать кандидат, тем больше вероятность, что один из них сработает.
Особенно хорошо, когда в этом списке есть неочевидные решения (вроде варианта не решать эту задачу). Просто прекрасно, когда кандидат учитывает нетривиальные проблемы, связанные с этими вариантами. Например, просить помощи на форуме можно, только если проблемный код не содержит значимой интеллектуальной собственности (чтобы можно было его разместить в общем доступе).
Но кроме того интересно, есть ли у кандидата в ответе варианты попросить у кого-то помощи (у менеджера, у коллег, у экспертов в интернете). Если этого нет, то у кандидата проблемы с коммуникацией.
Отдельно интересно, упомянет ли кандидат, что о проблеме нужно сообщить менеджеру или лиду. Если кандидат работал в команде с нормальными процессами, то он проблему обязательно озвучит, чтобы вся команда знала о ней. Если нет, то вы можете получить в команду человека, который периодически «закапывается» в какую-то задачу и никто не знает, что вообще есть какая-то проблема в проекте. Такое поведение очень распространено и очень разрушительно, поэтому обратите внимание, готов ли кандидат рассказать другим, что у него есть трудности, с которыми он не может справиться.
Один раз у меня было очень показательное обсуждение с кандидатом. Вместо списка возможных решений, он возмущённо сказал, что очень странно спрашивать про сложные задачи, так как единственное, что тут можно сделать, это нырнуть в код поглубже и работать над задачей, пока она не будет решена.
Я не видел смысла продолжать обсуждение, так как вопрос вызвал у кандидата негатив, поэтому просто пошёл дальше. Но это кандидата тоже не устроило и у нас состоялся следующий диалог:
– Постойте. А какой ответ вы ожидали на этот вопрос?
– Я не ожидаю какого-то определённого ответа. Здесь именно важно, узнать, что вы думаете. Например, многие говорят, что они первым делом попробуют нагуглить решение.
– Но ведь это очевидное решение! Конечно, я тоже попробую погуглить! Неужели вы думаете, что я не умею пользоваться Гуглом?
– Уверен, что умеете. Но это вопрос не на ваши навыки, а на образ ваших мыслей. Например, после вашего ответа я знаю, что вы не считаете нужным проговаривать очевидные вещи.
– Конечно! Они же очевидные!
Я думаю, что кандидат так и считал меня и мои вопросы глуповатыми. Но зато этот вопрос вскрыл очевидную проблему кандидата с общением. Он не указал, что можно посоветоваться с кем-то насчёт возникшей проблемы. Кроме того, он считает вещи, очевидные для него, очевидными для других. И он возмущённо отреагировал на абсолютно нейтральный мой вопрос и столь же нейтральное обсуждение. Не имеет даже смысла оценивать способность такого кандидата решать сложные задачи. С такими проблемами в коммуникациях в большинстве проектов до сложных задач он не дойдёт.
Также обращу внимание на важный момент: вы всегда должны понимать сами и быть способны объяснить кандидату, зачем вы задаёте тот или иной вопрос. Кандидату это объяснение может не понравиться, но вы не должны задавать вопросы вслепую, надеясь, что потом сможете сделать какой-то вывод из всех полученных ответов. Осмысленные действия интервьюера – это необходимый минимум для проведения собеседования.
3.6 Вопросы на собеседовании: Болевые точки в коммуникациях
У каждого из нас есть какие-то проблемы, которые нас раздражают, с которыми мы плохо справляемся, которые отравляют нам жизнь. Для кого-то это включённый кондиционер, для кого-то это разговор на повышенных тонах, для кого-то это нечёткая постановка задач. Особенно большое влияние имеют такие проблемы при общении людей в команде. Поэтому такие болевые точки кандидата должны быть выделены на интервью в обязательном порядке.
Здесь, как и во всех других ситуациях, лучше всего работает прямой и открытый подход. Я просто спрашиваю кандидатов: «С какими людьми вам тяжело общаться?» Примерно в трети случаев в ответ вы получаете рассказ о прошлом менеджере или заказчике, с которым у кандидата были проблемы. И дальше уточняющими вопросами вы проясняете, что мешало кандидату нормально общаться в такой ситуации.
Примером подобного обсуждения может служить следующий диалог из моей практики:
– С какими людьми вам тяжело общаться?
– Обычно проблем с общением у меня нет, но вот сейчас у меня заказчик, с которым мне трудно разговаривать. Из-за любой мало-мальской проблемы он начинает ругаться матом на меня. Я считаю это неприемлемым. После каждой такой стычки я хожу расстроенным.
– Вы пробовали это как-то решить?
– Да, я несколько раз говорил об этой проблеме заказчику. Объяснял, что это неконструктивно и что это меня оскорбляет. Но он не обращает внимания. Похоже, это единственный способ общения, который он понимает.
– Как-то ещё пробовали оказать воздействие на заказчика?
– Да, я эскалировал эту проблему своему руководителю, но он сказал, что заказчик очень важен и надо терпеть. Тогда я написал письмо заказчику, поставив в копию своего руководителя, где прямо написал, что если он продолжит общаться в подобном тоне, то я буду просто вешать трубку. Всё равно через маты никакой вопрос решить нельзя. Теперь так и делаю. В принципе, это помогает. По крайней мере, я теперь не хожу, как оплёванный.
– То есть проблема решена?
– Не совсем. Мне не нравится, что приходится применять такие жёсткие методы. Я предпочитаю общаться в атмосфере взаимного уважения. Собственно, это одна из причин, по которой я меняю работу. Смена работы должна стать решением проблемы.
Достаточно прямой, подробный и понятный ответ. Само решение, придуманное кандидатом, меня не особо волновало. В моих проектах таких агрессивных заказчиков нет, а если и появятся, то привести их в чувство можно будет легко. Я обращал внимание только на то, что кандидат активно пытался решить проблему, пытался договориться, обращался за помощью. Кандидат сделал со своей стороны достаточно, чтобы справиться с проблемой. И пришёл к некоторому решению. Так что такой кандидат мне подходит. Критичных для меня болевых точек он не имеет.
Но гораздо чаще вместо такого разговора случается совсем другой:
– С какими людьми вам тяжело общаться?
– С теми, кто тебя не слушает. Вообще с такими людьми непонятно, как разговаривать. Вот только с утра была такая ситуация. Пытаюсь объяснить человеку, что ему надо бумажку подписать, а он не слушает! В ответ бурчит что-то непонятное. Я раз ему объяснил, второй, третий. А он не слушает! Всё своё что-то талдычит и талдычит!
– А что талдычит-то?
– Да кто его знает? Я не слушал даже. Ерунду какую-то. Да и не важно это! Важно, что не слушает совсем меня!
Видите парадокс? Кандидат не слушал своего собеседника, но осуждал, что его самого не слушали.
Человек часто считает очень плохими именно те проблемы, которые имеет он сам. Это распространённый психологический паттерн поведения. Вы слушали когда-нибудь участников «кондиционерных войн»? Они ведут себя одинаково и высказывают абсолютно одинаковые доводы. Те, которым жарко, говорят: «У меня есть право включить кондиционер, если мне жарко! Кому-то холодно, но почему я должен страдать? От жары я болею. А им всё равно! Они даже прячут пульт от кондиционера. Это низко! А когда я прячу пульт, они приносят откуда-то другой и выключают мой кондиционер!»
Вы можете заменить пару слов и получить позицию противоположной стороны. Потому что реально эти позиции одинаковы. И такая же ситуация с большинством других конфликтов. Возможно, у вас бывало так, что вы заходили в комнату и видели разгар какой-то перепалки. И часто в такой ситуации, если вы не видели начало конфликта, то вам невозможно определить зачинщика, определить кто прав и кто виноват.
Потому что так работают реальные проблемы в коммуникациях. Если человек не умеет работать с чужой агрессией, то он часто отвечает такой же агрессией. Человеку кажется, что его реакция обоснована, ведь его притесняют. Но на самом деле его реакция так же разрушительна, как его притеснение.
А часто чужая «агрессия» надумана. Как в вышеприведённом диалоге, где кандидат думал, что его не слушают. Неизвестно, прислушивались к нему или нет. Из-за своих проблем он настолько был настроен против других, что не мог понять, что происходит в реальности. Его собеседник мог очень внимательно его слушать, но это не имело значения.
Аналогичное поведение встречается очень часто. Люди обвиняют других в отсутствии чувства юмора, потому что те не смеются над их шутками (несмешными). Или осуждают коллег за то, что они очень громко разговаривают (даже если орать на них по этому поводу десять раз на дню).
Когда кандидат отвечает на любой вопрос отслеживайте такие «выпады» в сторону других и пытайтесь немного исследовать каждый такой случай. Во многих ситуациях вы выясните какие-то особенности характера кандидата, с которыми вам придётся как-то жить в случае найма.
Но и не стоит сразу любую жалобу обращать на самого человека, так как иногда действительно может попасться кандидат, пытающийся сбежать от ужасного коллектива и неадекватного руководства.
Про ненадёжного разработчика
Как-то в мой проект предложили перевести одного очень ненадёжного разработчика, Петю. Вроде, несколько лет назад он работал хорошо. И даже карьеру некоторую начал, получив пару повышений. А потом потерял мотивацию, начал деградировать, обиделся на весь мир и никак не мог найти себе место, где он справлялся бы с работой. Так как когда-то он работал нормально, то просто увольнять Петю не хотелось, вот и пытались HR найти ему место, где он мог бы снова найти себя.
Мой тимлид Петю давно знал и видеть его в проекте не хотел.
– Ну давай его хотя бы прособеседуем. Узнаем, что он из себя представляет, – предлагал я.
– Да фигня эти твои собеседования! – говорил тимлид, – Он будет говорить одно, а в работе будет вести себя совсем по-другому.
– Да не бывает такого. Люди не считают своё поведение чем-то плохим, поэтому и говорят, что думают, – настаивал я.
– Не, нифига. Все себя с хорошей стороны пытаются показать, а не правду сказать.
– Ну вот чего самого плохого ты боишься?
– Да я боюсь, что он при появлении сложной проблемы просто встанет и уйдёт. А мне за ним разгребать!
– Ну вот давай это и выясним.
На том и порешили. Назначили интервью с Петей и стали беседовать. Мне, конечно, хотелось понять, что из себя представляет Петя, но ещё больше мне хотелось передать своему лиду свой подход к собеседованиям и показать, что можно понять, как себя будет вести человек в реальной ситуации.
У меня была подсказка, мой лид знал Петю и знал, что нам надо выяснить. Поэтому я задал вопрос, который потом стал частью моего стандартного опросника: «Петя, представь, что ты работаешь над какой-то задачей и она оказалась очень трудной. Ты работаешь-работаешь, но никакого результата не видно. Как её решить, ты не знаешь. Что ты будешь делать?»
Пете вопрос не понравился. Он скривился и ответил: «Ну что тут сделаешь? Ещё поработаю». Меня такой ответ не устроил, так как это не ответ на поставленный вопрос, а некоторая отговорка. Поэтому я продолжал настаивать: «Так ты же уже поработал. И результата нет. Может быть, если продолжать так же, как раньше, то результата и не будет. Как решить задачу, если она не решается? Возможно раньше были такие ситуации и ты как-то с ними справлялся?»
Петя погрустнел ещё больше. Явно идея работы над задачей, которую он не может решить, его не вдохновляла. Но он ответил: «Я для себя понял, что не имеет никакого смысла продолжать работу, если она не приносит результата. Я трачу силы – и всё впустую. В таком случае лучше пойти домой и отдохнуть. Результат такой же, но хотя бы не измотаешься».
Таким образом я получил для себя доказательство того, что опасения моего лида оправданы. А ему показал, что Петя не особо скрывает, что он готов бросить работу, если встречается сложность. Для Пети всё логично. Если ты работаешь и не получаешь результата, то зачем работать? Можно бросить работу.
С моей точки зрения и с точки зрения моего лида такое поведение очень плохое. Но не для Пети. Поэтому он не видит смысла скрывать своё отношение. Да, он знал, что «надо упорно работать», «стремиться находить нестандартные решения» и т.д. Но это для него было пустыми словами, поэтому он не мог давать развёрнутые ответы, исходя из этой «идеальной» установки, в которую он не верил. А свои реальные убеждения для него естественны и обоснованы, поэтому он их и высказывает.
3.7 Никто не считает себя плохим
Есть один момент, который очень важно понимать. Ни один кандидат не считает свой образ мыслей и действий неправильным. Это очень помогает при собеседовании, так как кандидат готов давать честные ответы.
Например, я как-то собеседовал менеджера, который считал, что он может уволить любого члена команды просто за то, что тот не нравится. Он довольно детально объяснил свою точку зрения: «Да, можно тратить время, пытаясь понять, что именно не нравится, и потом выискивая поводы для увольнения. Но зачем это всё? Мне с ним не нравится работать, я начальник – можно увольнять».
Для меня такие рассуждения были дикими. То есть я даже не могу сказать, что эти рассуждения неправильные. Вряд ли кто-то из команды, непонравившийся тому менеджеру, смог бы дальше с ним работать. Но сам подход для меня очеь странный. Но не для этого кандидата!
Он так работал долгое время. На его месте работы этот подход всех устраивал. Его, возможно, даже хвалили за решительность. Почему он должен был мне отвечать не так, как он думает? Как он может предугадать, что я отношусь плохо к такому подходу? Никак. Поэтому кандидат просто будет отвечать то, что думает. И это прекрасно.
В истории «Про ненадёжного разработчика » я уже показывал кандидата, который прямо говорит, что если у него что-то не будет получаться, то он просто пойдёт домой. Потому что он считает это нормальным. У меня как-то был диалог на подобную тему с кандидатом:
– Предположим, вы задержались на работе, исправляя мелкий, но очень важный баг, – описывал я ситуацию – Все разошлись, вы доделали свою работу, но заметили другую очень серьёзную проблему, с которой нельзя делать релиз. С утра нужно отправлять релиз заказчику, а приложение сломано, и ошибка не в вашем коде. Что вы будете делать?
– Подойду к менеджеру и сообщу о проблеме, – отвечает кандидат.
– Но менеджер ушёл домой. Вы одни в офисе.
– Тогда я тоже уйду домой. Зачем мне что-то делать?
Для меня это ответ неприемлемый, а для кандидата естественный. И тут худшее, что интервьюер может сделать, это показать своё негативное отношение к словам кандидата. Потому что люди в IT работают умные, опытные и профессиональные. Они очень быстро поймут, какие ответы вы ждёте, и будут вам их давать. С тем же успехом вы можете вести собеседование собственного отражения.