о двоичных деревьях и не только
Jul. 25th, 2018 11:04 pmНа работе во внутренней рассылке опять завелся извечный спор о вопросах на интервью. Кто-то написал, что за много лет работы в компании ни разу напрямую не пользовался двоичным деревом. Зачем тогда мы задаем на интервью вопросы кандидатам про двоичные деревья и прочие алгоритмические вещи, которые имеют отношение к реальной работе в лучшем случае у крохотного процента программистов?
Я не стал вмешиваться, напишу лучше здесь. Вот вы мне подскажите, я совсем впал в нездоровый цинизм или просто озвучиваю очевидные вещи. В больших компаниях принято задавать программистам вопросы "про двоичные деревья", потому что способность ответить на такие вопросы лучше всего коррелирует с IQ, а просто давать IQ-тесты по ряду причин они не могут.
Это был ответ "стоя на одной ноге", теперь уточняющая расширенная версия. Возможно, дело не совсем в IQ, а в определенных его компонентах, позволяющих удерживать в голове много соединенных друг с другом деталей, тщательно их обдумывать, и приходить к неочевидным априори решениям. Абстрактная манипуляция и визуализация, возможно с каким-то чисто-компьютерным уклоном (потому что есть супер-умные люди, у которых просто вот не складывается с программированием). Работодателям это нужно, потому что несмотря на то, что 90% ежедневной работы программиста это не включает, те 10%, которые включают, играют гигантскую роль в общей эффективности и успешности работы. С другой стороны, кандидат на интервью может успешно болтать за микросервисы и скрам, но если его попросить распечатать двоичное дерево уровень за уровнем, он не может удержать в голове достаточно деталей и продумать алгоритм. Это реально происходит, и часто. В его работе ему никогда не нужно будет печатать двоичное дерево уровень за уровнем, но нужно будет принимать решения, сходные по сложности применения интеллекта. Как это проверить в формате интервью за 45 минут? Вот придумали спрашивать про уровень за уровнем (это просто пример, не замыкайтесь на нем).
Второй, тоже важный аспект - добросовестность (conscientiousness). Большие компании не скрывают, чего они ожидают от кандидатов, часто сами посылают примеры вопросов и тем, которые надо знать; эти темы никто не помнит как следует через год-два после окончания вуза, поэтому их надо вспоминать, повторять, щелкать простые задачки на написание кода, чтобы не тормозить во время интервью. Если кандидат этим манкирует, это тот вид сигнала, который процесс интервью как раз и должен отлаживать (потому что интеллект и добросовестность вместе лучше всего коррелируют с успехом на рабочем месте). Иногда кандидат все равно проходит за счет гениальности и великолепной памяти; тогда добросовестность может повалить его позже уже во время работы - или нет. Много лет назад я летел на интервью в Гугл, и не собирался особо повторять алгоритмы и структуры данных, думая примерно так: "я хороший программист, и знаю то, что мне нужно для работы. Я знаю, что они хотят, чтобы кандидаты помнили все про двоичные деревья; что-то я помню, а другое специально повторять не буду. Если им этого недостаточно, ну и ладно." Буквально в день отлета, за час до отъезда в аэропорт, я передумал, забежал в магазин и купил том Кормена (знающие знают). Штудировал его в полете и следующий день и вечер перед интервью. Во время пяти интервью на следующий день в двух местах мне пригодилось это штудирование. Вообще-то у меня плохо с добросовестностью и аккуратностью, но это тот случай, когда я их проявил - в последний возможный момент - и, возможно, не прошел бы процесс интервью без этого.
Ну как - ложный цинизм или азбучные истины?
Я не стал вмешиваться, напишу лучше здесь. Вот вы мне подскажите, я совсем впал в нездоровый цинизм или просто озвучиваю очевидные вещи. В больших компаниях принято задавать программистам вопросы "про двоичные деревья", потому что способность ответить на такие вопросы лучше всего коррелирует с IQ, а просто давать IQ-тесты по ряду причин они не могут.
Это был ответ "стоя на одной ноге", теперь уточняющая расширенная версия. Возможно, дело не совсем в IQ, а в определенных его компонентах, позволяющих удерживать в голове много соединенных друг с другом деталей, тщательно их обдумывать, и приходить к неочевидным априори решениям. Абстрактная манипуляция и визуализация, возможно с каким-то чисто-компьютерным уклоном (потому что есть супер-умные люди, у которых просто вот не складывается с программированием). Работодателям это нужно, потому что несмотря на то, что 90% ежедневной работы программиста это не включает, те 10%, которые включают, играют гигантскую роль в общей эффективности и успешности работы. С другой стороны, кандидат на интервью может успешно болтать за микросервисы и скрам, но если его попросить распечатать двоичное дерево уровень за уровнем, он не может удержать в голове достаточно деталей и продумать алгоритм. Это реально происходит, и часто. В его работе ему никогда не нужно будет печатать двоичное дерево уровень за уровнем, но нужно будет принимать решения, сходные по сложности применения интеллекта. Как это проверить в формате интервью за 45 минут? Вот придумали спрашивать про уровень за уровнем (это просто пример, не замыкайтесь на нем).
Второй, тоже важный аспект - добросовестность (conscientiousness). Большие компании не скрывают, чего они ожидают от кандидатов, часто сами посылают примеры вопросов и тем, которые надо знать; эти темы никто не помнит как следует через год-два после окончания вуза, поэтому их надо вспоминать, повторять, щелкать простые задачки на написание кода, чтобы не тормозить во время интервью. Если кандидат этим манкирует, это тот вид сигнала, который процесс интервью как раз и должен отлаживать (потому что интеллект и добросовестность вместе лучше всего коррелируют с успехом на рабочем месте). Иногда кандидат все равно проходит за счет гениальности и великолепной памяти; тогда добросовестность может повалить его позже уже во время работы - или нет. Много лет назад я летел на интервью в Гугл, и не собирался особо повторять алгоритмы и структуры данных, думая примерно так: "я хороший программист, и знаю то, что мне нужно для работы. Я знаю, что они хотят, чтобы кандидаты помнили все про двоичные деревья; что-то я помню, а другое специально повторять не буду. Если им этого недостаточно, ну и ладно." Буквально в день отлета, за час до отъезда в аэропорт, я передумал, забежал в магазин и купил том Кормена (знающие знают). Штудировал его в полете и следующий день и вечер перед интервью. Во время пяти интервью на следующий день в двух местах мне пригодилось это штудирование. Вообще-то у меня плохо с добросовестностью и аккуратностью, но это тот случай, когда я их проявил - в последний возможный момент - и, возможно, не прошел бы процесс интервью без этого.
Ну как - ложный цинизм или азбучные истины?