Задачи на программирование на техническом интервью: в чем засада?

0
395
views

Перевод статьи «The Pitfalls of Code Challenges».

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

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

Возможно, вам пока не случалось проходить технические интервью с решением задач. На таких собеседованиях вам дается от 10 до 30 минут, чтобы прочитать условие, спланировать решение и написать рабочий код. Сам процесс может быть организован по-разному. Это может быть решение задачи в автоматизированной тестовой среде на специальных сайтах, таких как Hackerrank или Codility. А может быть решение задачи на белой доске (т. н. «вайтбоардинг») на глазах интервьюеров. Причем последнее может быть организовано как «вживую», так и удаленно.

Чтобы вам жизнь сахаром не казалась, компании обычно тестируют ваше знание структур данных и алгоритмов. Любая отдельно взятая задача может иметь больше 10 вариантов решений. И чтобы выделиться на фоне других кандидатов, вам нужно выбрать самый эффективный контейнер для ваших данных и вовремя распознать, что, например, двоичная сортировка на порядок улучшит решение.

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

История

После бума доткомов и молниеносного роста Google и Facebook компании FAANG (Facebook, Apple, Amazon, Netflix и Google), базирующиеся в Сан-Франциско, начали регулярно применять задачи на программирование на своих собеседованиях. Такой подход давал возможность проверять кандидатов при помощи процедуры автоматического скриннинга. Компании могли протестировать навыки и знания кандидатов до того, как приглашать их на собеседование в офисе (на которое кандидату часто приходится лететь самолетом).

Реакцией на это стал выход книги «Cracking the Coding Interview» Гейл Лакман МакДауэлл (бывшей сотрудницы Google). Эта книга быстро стала настольным пособием для разработчиков, готовящихся к прохождению собеседований. Популярность книги способствовала дальнейшему закреплению процедуры скриннинга в системе собеседований. А поскольку в последующее десятилетие корпорации Кремниевой долины процветали, большинство компаний, занимающихся разработкой, стали брать с них пример и внедрять эту процедуру у себя.

И… в чем же проблема?

Профессиональные литкодеры

Когда на кону зарплата в 140 тысяч долларов в год, причем прямо со старта, есть смысл напрячься и подготовиться к собеседованию. Вообще-то человек, изучающий программирование, должен фокусироваться на получении настоящего, практического опыта и решении проблем бизнеса. Но вместо этого кандидаты начинают просто готовиться к прохождению технического интервью и ориентироваться на статьи в духе «Топ-10 вопросов с собеседований в Amazon». То есть, проблема та же, что с итоговым тестированием в школах.

Фактически вокруг задач на программирование развилась целая отдельная индустрия. Выдающиеся ютуберы, такие как Nick White и Kevin Naughton Jr., собрали свою аудиторию благодаря написанию решений для самых популярных вопросов, которые задают в Amazon, Facebook и т. п. компаниях. Сайты типа Leetcode и AlgoExpert взимают плату за наставничество и доступ к дополнительным задачам.

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

Задачи не помогают проверить знания, нужные на работе

Если вы разработчик-джуниор, вам в вашей повседневной работе с 95%-й вероятностью не придется переворачивать связный список. Сеньоры тоже не будут этим заниматься. От них вообще требуется опыт работы в проектах и обычно — знание паттернов проектирования.

В работе вам наверняка понадобится хорошее знание синтаксиса языка, умение взаимодействовать с API, разбираться в сохранении состояний, ориентироваться в кодовой базе. Но практически ничто из этого не проверяется при решении задач на Hackerrank.

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

С учетом всего сказанного, зачем мы вообще всех прогоняем через решение задач?

Задачи не демонстрируют, какой работой придется заниматься на самом деле

Важно не забывать, что собеседование — обоюдовыгодное мероприятие. То есть, оно проводится не только в интересах компании. Переступая порог, кандидаты интервьюируют своих интервьюеров, оценивают офис, культуру, инструменты и ежедневную жизнь, которую видят.

Мы уже выяснили, что умение решать задачи никак не отражает умения разработчика справляться с рабочими обязанностями. Но это также упущенный шанс для кандидатов оценить задачи, с которыми придется сталкиваться по работе.

Да, при помощи задач можно протестировать, каково будет работать вместе с разработчиками этой компании. Но они определенно не дадут прочувствовать, с чем столкнешься в свой первый рабочий день. Будучи full-stack разработчиком, я буду большую часть дня заниматься проектированием фронтенда или конечными точками бэкенда? Работают ли местные команды на ванильном JS или со множеством самописных библиотек?

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

Решение

Это может подойти не каждой команде. Но мне как кандидату очень понравился бы один из следующих вариантов.

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

Или можно назначить сессию парного программирования. Собеседуясь на свою текущую позицию, я провел два часа, работая в паре с разработчиком-сеньором. Мы реализовывали самописный тип данных Set, используя разработку на основе тестирования, а также геттеры и сеттеры для значений данных. Конечно, для маленьких компаний в этом нет смысла. Но компании FAANG инвестируют миллионы долларов в процесс найма, и для них время, потраченное на проверку кандидатов, точно в будущем окупится.

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

Заключение

Процедура собеседований в сфере разработки программ точно не изменится за одну ночь. Но кажется, все согласны с тем, что что-то нужно менять.

P.S. А если вы сейчас как раз в процессе прохождения собеседований, не забывайте, что есть множество ресурсов, способных помочь вам.

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here