Whiteboard/Coding interview

На днях я прочитал прекрасный текст «Я видел халтуру в лицо» про whiteboard interview (это когда перед кандидатом ставят доску или кладут листик бумаги и говорят: «напиши на доске вот такую программу»). В статье все по сути правильно, только немного в стиле плача царевны по утраченной молодости, ну, и главные дураки, конечно, — кандидаты. Но открою секрет: те, кто нанимают, тоже часто дураки, ведь кандидаты сами рано или поздно оказываются в позиции нанимающих, а дурость-то никуда не уходит.

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

b2befb3ac581e47146874647c054c6f7.jpg

Кто перед вами?

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

Даже если вас хотят взять, перед вами может быть упертый баран, который даже может и часто проводит интервью, и может даже делает это года три или пять лет, но за это время ни минуты времени не потратил на то, чтобы понять, а почему и зачем он задает эти вопросы? И, тут внимание! Почему он засчитывает только определенные варианты ответы: ни шагу в сторону и даже вверх (в стиле: вы слишком усложняете, я не о том вас спрашивал и проч).

О чем с вами говорят?

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

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

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

Чего от вас ждут?

Вот опять про баранов. Есть люди, которые ждут от вас правильных ответов. Ну, что тут поделать? Рассказать историю из жизни СПбГУ.

На Физическом Факультете СПбГУ самым сложным предметом была… военная кафедра. Там ничего нельзя было понять, а можно было только зазубрить: нельзя было менять обозначения переменных, все формулы были представлены в максимально сложном виде (и их нельзя было упрощать), про интегралы нужно было забыть, про гениальный курс по радио-физике, который вам только что прочитали, — тем более. Одним словом — беда, особенно для тех, кто в физике действительно разбирался.

Если вы попали к человеку, который хочет услышать от вас правильный ответ, то ничего вы с этим сделать не сможете. Биться и давить интеллектом — бесполезно. Но зато из такого интервью можно извлечь косвенную информацию о том, что там происходит внутри компании. Ничего хорошего: засуха и уныние.

Я как-то и сам был в такой ситуации. Мне постоянно тыкали майкрософтом, хотя мы говорили о совершенно абстрактных вещах. Потом оказалось, что у майкрософта есть какой-то то ли текст, то ли директива: «всем людям с интерпрайзом головного мозга ходить и думать по этой линии».

Кстати, это самое больше разочарование и самая большая ошибка, которая отпугивает сильных кандидатов: если человек чего-то не знает, но предлагает это вывести, придумать, поговорить об этом — это находка, но часто интервьюер говорит «стоп, мне не интересно», и ставит себе в бумажку минус. А кандидату в этот момент скучно и уныло, потому что он понимает, что никакие его способности решать проблемы компании не нужны. И, поверьте, это просто не ощущение, скорее всего внутри компании действительно не нужно решать сложные технические проблемы.

38aceb72af534925599e8c382ec0213d.jpg

Технология

Но все-таки, что делать кандидату во время white board interview, чтобы пройти его максимально хорошо? Тут я исхожу из предположения, что вы попали к вменяемому интервьюеру, который не хочет вас завалить (но это не значит, что он будет вас спасать).

  1. Всегда говорите. Говорите о том, что вы думаете, о том, какие у вас есть идеи. Объясняйте ход своей мысли. Ни один человек не может сразу дать правильный ответ, а ваш ход мысли — на самом деле, это самое в вас показательное.
  2. Ошибаться — нормально. Спокойно говорите: «теперь видно, что я ошибся» или «мое решение не было идеальным, посмотрим, как его можно улучшить» или «да, я предложил плохой вариант, давайте предложу другой».

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

  3. Начинайте с простого. Не усложняйте решение, пока вас не попросили. Вспомните, как вы программируете. Почти никогда вы не пишете решение целиком, вы приходите к нему постепенно: сначала один аспект, потом другой, потом третий (а иногда даже останавливаетесь, потому что преждевременная оптимизация — зло)
  4. Не угадывайте. Интервьюеры редко хотят вас запутать. Если вы не знаете куда идти, то так и спросите: с большой вероятностью от вас ждут этого вопроса. Такой вопрос показывает, что вы понимаете область вширь. И с большой вероятностью ответ (допущение о данных) сделает ваше решение проще и прозрачнее.
  5. Забыли название метода? Не проблема. От вас никто не требует помнить имена методов и их правильное написание. Достаточно того, что вы знаете, что такая-то функциональность легко откуда-то достается. Требовать на собеседовании знания порядка параметров (в наше время, когда даже уже в MS Word есть комплишн) — дикость.
  6. Не бойтесь. Если вам кажется, что вас пытаются на чем-то поймать, то с большой вероятностью, у вас в голове слишком сложная или туманная модель, а от вас ждут простого и внятного ответа. Отвечайте просто, описывая границы применимости. Если от вас захотят услышать больше — у вас спросят (или не спросят, потому что увидят, что вы и так знаете, что там, за этими границами).
  7. Забудьте про конкретные языки и фреймворки. Чаще всего от вас требуется понимание того, как вещи сделаны внутри. Если вас спрашивают, как устроен HTTP протокол, то не надо рассказывать, как сделать http вызов из Java/С#/Python или вашего любимого языка. Расскажите, что есть DNS, TCP, keep-alive, заголовки и тело запроса (и про то, почему HTTP/2.0 — боль).

Если же вас все-таки завалили на интервью, то мой совет: напишите этим идиотам хлесткое письмо о том, что вы занимаетесь действительно сложными вещами, а раз вас пытались заставить написать на доске алгоритм, то они ищут кодера, а не такого серьезного человека как вы. После этого расслабьтесь и идите читать очередную мутную книгу про про то, как писать xml-конфиги.

И весь мой текст, конечно, не отменяет того, что вы знаете все про мясо и кости: структуры данных и алгоритмы. Но про это очень легко найти в интернете по запросу hacking code interview. Иначе, конечно, мой первый пункт («Всегда говорите») сделает вам только хуже. Всегда учитесь!

© Megamozg