Anatoly Vorobey (avva) wrote,
Anatoly Vorobey
avva

Category:

о двоичных деревьях и не только

На работе во внутренней рассылке опять завелся извечный спор о вопросах на интервью. Кто-то написал, что за много лет работы в компании ни разу напрямую не пользовался двоичным деревом. Зачем тогда мы задаем на интервью вопросы кандидатам про двоичные деревья и прочие алгоритмические вещи, которые имеют отношение к реальной работе в лучшем случае у крохотного процента программистов?

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

Это был ответ "стоя на одной ноге", теперь уточняющая расширенная версия. Возможно, дело не совсем в IQ, а в определенных его компонентах, позволяющих удерживать в голове много соединенных друг с другом деталей, тщательно их обдумывать, и приходить к неочевидным априори решениям. Абстрактная манипуляция и визуализация, возможно с каким-то чисто-компьютерным уклоном (потому что есть супер-умные люди, у которых просто вот не складывается с программированием). Работодателям это нужно, потому что несмотря на то, что 90% ежедневной работы программиста это не включает, те 10%, которые включают, играют гигантскую роль в общей эффективности и успешности работы. С другой стороны, кандидат на интервью может успешно болтать за микросервисы и скрам, но если его попросить распечатать двоичное дерево уровень за уровнем, он не может удержать в голове достаточно деталей и продумать алгоритм. Это реально происходит, и часто. В его работе ему никогда не нужно будет печатать двоичное дерево уровень за уровнем, но нужно будет принимать решения, сходные по сложности применения интеллекта. Как это проверить в формате интервью за 45 минут? Вот придумали спрашивать про уровень за уровнем (это просто пример, не замыкайтесь на нем).

Второй, тоже важный аспект - добросовестность (conscientiousness). Большие компании не скрывают, чего они ожидают от кандидатов, часто сами посылают примеры вопросов и тем, которые надо знать; эти темы никто не помнит как следует через год-два после окончания вуза, поэтому их надо вспоминать, повторять, щелкать простые задачки на написание кода, чтобы не тормозить во время интервью. Если кандидат этим манкирует, это тот вид сигнала, который процесс интервью как раз и должен отлаживать (потому что интеллект и добросовестность вместе лучше всего коррелируют с успехом на рабочем месте). Иногда кандидат все равно проходит за счет гениальности и великолепной памяти; тогда добросовестность может повалить его позже уже во время работы - или нет. Много лет назад я летел на интервью в Гугл, и не собирался особо повторять алгоритмы и структуры данных, думая примерно так: "я хороший программист, и знаю то, что мне нужно для работы. Я знаю, что они хотят, чтобы кандидаты помнили все про двоичные деревья; что-то я помню, а другое специально повторять не буду. Если им этого недостаточно, ну и ладно." Буквально в день отлета, за час до отъезда в аэропорт, я передумал, забежал в магазин и купил том Кормена (знающие знают). Штудировал его в полете и следующий день и вечер перед интервью. Во время пяти интервью на следующий день в двух местах мне пригодилось это штудирование. Вообще-то у меня плохо с добросовестностью и аккуратностью, но это тот случай, когда я их проявил - в последний возможный момент - и, возможно, не прошел бы процесс интервью без этого.

Ну как - ложный цинизм или азбучные истины?
Tags: культура, программирование
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 225 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →