Алгоритмические собеседования нужны

840c81512a19f223f5239d921ba8b840.jpg

Я утверждаю, что эти собеседования более-менее релевантны.

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

Далее, эти интервью в значимой степени проверяют умение мыслить алгоритмически и знание каких-то чуть-чуть нетривиальных структур данных и алгоритмов (стеки, хеш-таблицы, обход графа, бин поиск, динамическое программирование и т.д.). Конечно могут быть индивидуумы, которые довели решение задач до автоматизма не имея этих умений, или им попалась заученная задача, но это очень большая редкость. А эти умения в ФААНГе применяются относительно часто. Я лично коммитил в прод и динамическое программирование, и бинарный поиск по ответу и всякие структуры данных из хитрых стеков или очередей. И на интервью спрашиваю ту задачу, которую лично коммитил. И она на фоне других литкод задач ничем не выделяется.

Часто встречаю мнение, что алгоритмы нужны только разработчикам библиотек и фреймворков, а «инженеры-прикладники» просто используют эти готовые решения. Но в ФААНГах значимая доля разработчиков именно такими библиотеками и занимается! И даже остальные разработчики относительно часто вынуждены писать именно алгоритмы уровня medium литкод задач.

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

Плюс, такие интервью проверяют умение писать код, а это и есть основная работа программиста.

Да, такие интервью не проверяют другие навыки: например, умение проектировать системы, работать в команде или какие-то специфичные знания под проект. Но для этого в ФААНГах проводятся отдельные интервью: system design, behavioral и domain specific knowledge interview.

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

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

Это несколько нивелируетсяправом на ошибку. В гугле, например, аж до 5 алгоритмических секций дается. И если вы одно из них завалите, а в другом чуть затупите — это не приговор. В самом интервью прощаются мелкие ошибки вроде опечаток. Никто не требует знания наизусть стандартных функций. Я лично, когда проходил интервью, забыл, что про lower_bound или upper_bound: какой там порядок параметров и что конкретно оно возвращает. Интервьювер разрешил предположить, что мне удобно, и лишь в комментарии написать, что эта функция по моему предположению делает. Интервью я прошел.
Но, как я выше уже говорил, этот критерий — не самый определяющий для ФААНГов. Все еще достаточное количество отличных разработчиков справляются с такими интервью.

© Habrahabr.ru