В этом тексте я пытаюсь отрефлексировать вопрос о том, почему кандидат после технических собеседований слышит "да" или "нет", и что на самом деле происходит за кулисами этого процесса.
Оговорюсь сразу, чтобы не вызывать вопросов. Всё написанное здесь - это рефлексия над моим собственным опытом проведения интервью, либо над наблюдениями за этим процессом со стороны. Оно не отражает мнение каких-либо компаний и на 100% состоит из моего субъективного мнения.
Ещё одна оговорка: я большую часть карьеры провёл в достаточно специфической области (разработка компиляторов и JVM). Очень может быть, что что-то, с чем я сталкивался постоянно, вообще не происходит в других областях, и наоборот. Хотя есть основания считать, что эти явления достаточно общие.
Я провёл в общей сложности где-то в районе 100-150 технических интервью программистов. Это были люди разной степени экспертности (от студентов-второкурсников до инженеров с 20-30 лет релевантного опыта), из разных локаций (Россия, Европа, Америка, Индия), из разных академических сред (от summa cum laude из Лиги плюща и до заштатных заборостроительных институтов; людей совсем без образования после 3-месячных курсов в силу специфики области у нас нет, поскольку не существует подобных курсов). Мой вердикт по кандидатам был "да" примерно в 15% случаев (тут стоит пояснить, что в моей команде решения обычно принимаются коллегиально, и ответ каждого интервьюера может быть "да", "может быть" и "нет". Конечное решение принимает менеджер, но обычно, если нет ни одного "нет" и есть некоторое количество "да", то человек получает оффер).
Попробую описать некоторые интересные моменты, которые я замечал за собой и коллегами.
Решают первые минуты
Исключения бывают, но по моему опыту, я в 80% случаев точно знал, каким будет итоговый ответ, уже в начале интервью. Оно у нас обычно занимает час или чуть меньше, и первые 10-15 минут кандидат рассказывает о себе и прошлом опыте, по ходу отвечая на какие-то вопросы по ходу дела. Проверка знания теории и решение задачек с написанием кода, которым обычно уделяется наибольшее внимание в процессе собеседования, почти не влияют на результат. Почему так? Думаю, что причины три.
Баг мышления самого интервьюера. Об этом писал Каннеман, и похоже, что от власти первого впечатления никуда не деться. Впрочем, она не абсолютна: случаи, когда человек очень гладко рассказывал в начале, а потом писал бредовый код и был не в состоянии объяснить термины, которыми активно сыпал, у нас были. Конечно, в этом случае решение менялось. Однако если качество дальнейших ответов не вступало в жёсткое противоречие с первым впечатлением, то оставалось изначальное решение. Нужно очень сильно порвать шаблон, чтобы исправить плохое первое впечатление.
Человек, который не умеет связно рассказывать свою историю (уж что-что, а это он точно знает), скорее всего, он просто не умеет связно мыслить. В этом случае логика решения задачки и качество кода будет соответствующее.
Интервьюер на самом деле не выбирает из имеющихся кандидатов лучшего программиста. Он выбирает того, с кем ему будет достаточно комфортно регулярно общаться по рабочим, а может быть и не только рабочим, вопросам. И уже из них по возможности выбирает лучшего программиста. Если с самого начала оказалось, что человека тяжело слушать (например, он говорит слишком нудно, слишком умничает или наоборот тупит, пользуется иной терминологией и т.п.), и это вызывает отторжение интервьюера, то скорее всего ответ будет отрицательный.
Поэтому, как бы ни банально это ни звучало, первое впечатление критически важно. Если вы завалили общение в первые пять минут, то дальше уже, скорее всего, ничего не исправите. Исключения столь же редки, как и прекрасны. Грустно, но правда.
Кланы решают всё
Нет, конечно же, речь не идёт о найме племянника тёти Зины, которая очень просит. Тем не менее, сообщество инженеров явно или неявно, но делится на кланы (или, если хотите, секты) по самым разным принципам. Причём некоторые из них - это 100% вкусовщина. Приведу несколько примеров из виденного лично или подсмотренного в других компаниях:
Иногда интервьюеру важно, читает ли кандидат книги по профессии, какие и как давно. В то же время существуют полярные мнения по вопросу о том, можно/нужно ли учиться по книгам (или же сразу читать кодовую базу и документацию, или всё постигать через руки и опыт).
Иногда интервьюеру важно, знаком ли кандидат с фичами последнего (или ещё даже не вышедшего) стандарта языка, или же предпочитает консерватизм без всего вот этого вот новомодного сахара.
Иногда интервьюер и кандидат не сходятся по вопросу отношения к функциональному программированию, чистоте ради чистоты и всему вот этому вот. Короче, к коллективному хаскелю.
Разным может оказаться отношение к научным статьям и академическим регалиям: кто-то их ценит и считает критерием хорошего специалиста, а кто-то всю эту академию терпеть не может и считает, что они там занимаются никому не нужной фигнёй.
Ну и так далее. Моё наблюдение такое: небольшие шансы попасть в радикализированную по одному или нескольким подобным вопросам команду имеет представитель той же, ну или хотя бы не антагонистичной, секты. И тут не имеет никакого значения, если вы, например, в совершенстве умеете писать идиоматически православный код на хаскеле: вам запишут это в минус, а не в плюс.
В результате (по крайней мере, в моей сфере) бывают целые команды фанатов ФП с кандидатскими степенями, а бывают команды, где таких людей 0. Оставим вопрос о том, делает или не делает вас принадлежность тому или иному идеологическому клану лучшим программистом, для специальной олимпиады. Важно то, что несовпадение клановых взглядов (особенно выраженное в радикальных формах) резко понижает ваши шансы на интервью. Оно, думаю, и к лучшему: меньше потом будете с ними мучиться и страдать.
Иногда "не знаю" - лучший ответ
Вообще-то, разговаривать с человеком, который знает ответы на все ваши вопросы, скучно. Для меня интересная часть интервью начинается после того, как мы дошли до точки, что человек чего-то не знает. Тогда можно с ним порассуждать, а как оно могло бы быть устроено. Для меня критерий хорошего инженера - это умение решить незнакомую задачу настолько логично, что решение будет не хуже, чем то, как она решена на самом деле. Если вообще решена.
Вообще, умение говорить "не знаю [, но могу порассуждать, как оно могло бы быть]" - это достаточно надёжный критерий эксперта. Если у человека не наблюдается нимба над головой и стигмат на ладонях, то он не может знать всего. Самый страшный грех в моей личной иерархии грехов - это когда человек боится показаться глупым, и вместо того, чтобы честно признаться, что он не знает, с покерфейсом втирает какую-то чушь. Видимо, в надежде, что интервьюер идиот и не поймёт, что ему вешают на уши лапшу.
Цель интервью - не продемонстрировать всеведение, а найти границы собственного незнания. Иногда их прямо в ходе интервью удаётся расширить.
За базар ответить можешь?
Людям (особенно молодым людям) часто кажется, что если они будут употреблять больше количество терминов, аббревиатур, а в некоторых случаях и именных теорем, то все решат, что они очень умные. На самом деле за такой базар могут и спросить. А именно - попросить объяснить значение того или иного термина, или рассказать, как устроена (или хотя бы что делает) какая-то сложнопоименованная штуковина. Теорем мы, кажется, на интервью не доказывали, но в теории такое может быть.
Если человек понимает, о чём говорит, то в его речи есть термины, но они строго дозированы и используются к месту, а не чтобы продемонстрировать широту кругозора. Ближайшая аналогия - это когда какой-нибудь заслуженный ветеран может ходить с одним-единственным орденом на груди, а какой-нибудь владелец рыбной лавки (не имею ничего против владельцев рыбных лавок в целом - прим.) ходит с ног до головы обвешанный знаками почётного мецената (7000 р/шт) и заслуженного работника рыботорговли 3 степени.
По моим наблюдениям, человек, который не в меру сыплет слишком умными словами, не слишком понимает их смысл. Спросите у него, что они означают, и узнаете, что "я на гитхабе в каком-то репозитории видел, точно не помню" или "ну оно там было целых 2 года назад в университете, я щас такое уже и не вспомню". Ну а именная теорема была почерпнута вчера из препринта статьи на архиве, и как её применить в жизни, неведомо (зато название отличное). Вероятность успешного прохождения интервью в таком случае балансирует в районе нуля.
Будьте скромнее. Если вы умный, это поймут и так.
Маленько выводов
На интервью не определяют, являетесь ли вы хорошим программистом о том смысле, в котором вы сами себе придумали. Там определяют, смогут ли ваши знания, навыки и стиль дополнить команду, или будут там не к месту (даже если они хорошие!)
На интервью легко испортить впечатление в начале и потом его сложно исправить. До определённой степени верно и обратное. Думайте, что скажете в начале.
Не бойтесь показаться глупым. Вспомните того парня, который знает только то, что ничего не знает. Если вы умный, это поймут и без ваших усилий по демонстрации сертификатов IQ и перечисления всех известных вам умных слов. Обратное скорее навредит.
P. S. Надеюсь, не сильно задушнил.