Уже много лет IT компании проводят алгоритмические собеседования при найме технических специалистов. Подход введенный в FAANG плавно перетек в большинство крупных компаний. Яндекс, Авито, Т-Банк и многие другие хотят проверить алгоритмические знания кандидатов. Но на практике такое собеседование оказывается бесполезным созвоном на 45 минут, который ничего не говорит о кандидате.
В интернете можно найти тысячи статей о том как решать алгоритмы. Куча теоретических видео про оценку скорости и затраты на память для разных структур данных. Еще больше ресурсов про то, как алгоритмы делают вас сильнее, круче и привлекательнее для работодателя.
Но очень мало можно встретить критики и конкретного разбора проблем алгоритмических собеседований и их внедрения в воронку найма. Эта статья будет первой в цикле “в чем проблема алгоритмов”.
Кто-то может сказать: “О, человека не приняли в компанию из-за алгоритмов и он решил обидеться и сказать всем, что алгоритмы бесполезны”. Отчасти это так и было, но я решил не останавливаться на своем чувстве несправедливости и пошел дальше: адаптировал алгоритмы в компании, прошел все этапы в Google и даже решал алгоритмы на протяжении года.
Все это помогло мне понять, что многие двигаются не туда, когда решают спрашивать деревья и графы на своих интервью.
Но все это отдельными статьями, ссылки на которые я приложу сюда позже.
Сейчас я просто хочу рассказать свою историю.
Собеседование, которое меня обидело
Моя карьера началась в 2015 году. Меня взяли Java джуном в небольшую аутсорс-компанию, потому что я знал немного базы по Java, мог адекватно задавать вопросы и, наверное, не сильно бесил своего начальника.
Проработав над не очень интересными задачами около года, я решил, что пора дерзать — я должен стать “матерым” разработчиком и ходить под знаменем самого популярного IT-бренда России.
В то время на российском рынке «царем» IT считался «Яндекс». Попасть в компанию было сложно: вас ожидало нескольких этапов, первым из которых было решение алгоритмических задач.
Про алгоритмическую секцию мне рассказали на созвоне с HR и убедили, что это классный формат, который явно покажет мои знания. Я про такой фильтр услышал впервые и моментально запаниковал. Как джуну мне были известны базовые структуры данных, но я понятия не имел, как с их помощью решать задачи.
Мы договорились, что встретимся на собеседовании через 10 дней, и я начал подготовку. Воспользовавшись советом HR, я пошел на Leetcode — самую популярную площадку для тренировки алгоритмов и решал все задачи подряд.
Сейчас уже не помню, насколько я был неуспешен в своих первых попытках, но точно помню, что у меня уходило очень много времени на то, чтобы понять проблему. Что уж говорить — легкие задачи я решал час-полтора.
На второй день было понятно, что мне не хватит времени на подготовку. Мало того, впереди меня ждали еще собеседования по андройд, систем дизайну и проектированию на Java.
Внимательные читатели уже поняли, что это то самое собеседование, которое я провалил. Но давайте я расскажу детали позора.
Настал день собеседования, меня посадили в кабинет-переговорку, поставили передо мной ноутбук и связали меня с моим интервьюером. Я удивился, что не будет личного присутствия, но удаленный формат общения меня немного расслабил.
Мне скопипастили задачу в онлайн whiteboard, по сути своей задача была на работу с массивами, и это единственная тема которую я успел разобрать.
Стресс нарастал и я взял мимолетные две минуты на то чтобы прочитать и понять задачу. Проговорил ее несколько раз вслух. Получил пример входных и выходных данных, но так и не понял как ее решить. Я пытался задавать вопросы, получал подсказки и даже придумал какую-то эфемерную последовательность действий.
На это ушло слишком много времени. Мой интервьюер со словами: “Решай, у тебя есть все что нужно” пропал с экрана монитора за дверь московского опенспейса. Поставил он на мне крест, подумал что я все понял, или просто ушел за водой, я не знаю.
Когда он вернулся на нашем общем экране был корявый, точно забагованный алгоритм, а на моем лице — апатия.
Со мной попрощались и я стал ждать следующего “судью”.
Все остальные этапы прошли сносно, но мысль “я провалился” оставалась у меня с конца того звонка до вежливого отказа от HR через неделю.
С тех пор я пытался не связывался с алгоритмами.
Ты должен был бороться со злом, а не примкнуть к нему
Прошло три года. За это время я успел поработать над большими проектами в B2B и B2C, из бэкенда мигрировал в андроид-разработку, делал крутой видеоплеер, а затем ушел в маленькую криптокомпанию.
На бумаге я был миддл-инженером, но по факту мне приходилось принимать высокоуровневые решения и отвечать за разные аспекты проекта. С того провального собеседования я не написал ни строчки алгоритмов, но я бы не сказал, что потерял какой-то навык, ведь я его и не приобретал.
Тогда на подкорке сознания у меня звучала сладкая, но страшная мысль — попробовать свои силы в собеседованиях в иностранные компании. Комфортные условия жизни отодвигали эту идею, но в один день я узнал, что мой бывший коллега и ментор попал в Bolt. Видимо, я понравился ему на этапе обучения, и одним прекрасным утром он постучался ко мне в личку:
йоу как ты смотришь на вариант с тем, чтобы я тебя порекомендовал на этой неделе? Как раз на след. неделю тебе смогут запланировать тех. собес )
Я человек простой — плыть по течению это мое, но вот такие “пинки” я никогда не игнорировал.
Собеседование должно было состояться через неделю.
На этот раз не было гнетущего взгляда собеседующего, даже временного, так как всё делалось в автоматизированном сервисе. Все мои действия записывались в реальном времени. Сначала я переживал, что некому задать вопрос, но это было не нужно. Задача была на массивы, которые я зарешал и зазубрил наизусть: «Переверните все слова в массиве без знаков пунктуации».
Главное отличие от прошлой подготовки к собеседованию — я правильно решил задачу на собеседовании и получил хорошую инъекцию эндорфина от своего успеха.
Какой самый неправильный вывод я сделал из этой ситуации? Правильно — нужно внедрять подобное у себя, потому что это быстро и приносит удовольствие. А если ты разработчик и не получаешь хороших эмоций от своих решений, то ты плохой специалист.
Сама наивность.
Я был единственным андройд разработчиком на проекте и в это же время мы искали мне младшего спеца в помощь.
Я не задумываясь взял свою любимую задачу «Найти k максимальный элемент в списке» и взял ее как практическую задачу вдобавок к теории, которую я спрашивал.
Конечно я предусмотрел, что задача сложная в той постановке, которая озвучена на сайте, поэтому я не запрещал сортировку. Но спрашивал дополнительно, если мы справлялись быстро.
После одного из таких собеседований, один из кандидатов, которого я мучал этой задачей и я вышли из переговорки и состоялся следующий диалог:
Он: А зачем ты меня это спрашивал, как тебе это помогло
Я: Я смотрел на то как ты пишешь код и задаешь вопросы
Он: А не легче было написать какой-нибудь код, который что-то делает полезное в рамках приложения
Я: У моей задачи есть решение, мне важно чтобы ты его нашел
Он молча попрощался и пошел по своим делам, а я понял, что мне не важно было, чтобы он дошел до решения. Мне было важно, чтобы мы нашли общий язык и я понял, что я могу с ним работать. Я навсегда выкинул алгоритмы из уравнения, а его принял на работу.
Момент, когда я понял, что алгоритмы адаптируются неправильно
Мы возвращаемся в (почти) настоящее время, в 2022 году я взял выше и собеседовался в Google
На этот раз я был настроен на успех, для подготовки я взял два месяца. При этом у меня не было работы, поэтому алгоритмами я занимался по восемь часов в день. За два месяца я решил 300+ задач, с упором на средние и сложные — других Google не спросит.
На тот момент алгоритмы плотно уже въелись в IT-культуру бигтеха СНГ, так что у меня была возможность попрактиковаться. Я подавался на собеседования везде, где были алгоритмы, и без особых проблем их проходил. Мне давали хорошие отзывы и офферы, но я чувствовал себя мошенником — я не считал себя крутым специалистом, я просто уделил кучу времени алгоритмам.
Однако мой фокус был именно на собеседовании в Google. Я стремился к точке отсчета, чтобы понять, как они проводят собеседования.
То что я увидел в Google — совсем другая история, на нее я напишу отдельную статью, но если кратко, то именно тут я увидел, что алгоритмы это ширма за которой прячется множество других критериев по которому вас оценивают. Вы не решаете алгоритмическую задачу, вы с вашим потенциальным коллегой решаете рабочую проблему, тут не важен язык программирования и даже не всегда важен рабочий код.
Ваш способ мышления, то, как вы общаетесь и обсуждаете проблемы, — вот что оценивают на собеседовании. Да, задачу все еще нужно написать полностью, но это не самое важное, это просто один из паззлов большой мозайки.
На этом моменте стоит сказать что мое мнение сугубо субъективное, я пытаюсь собрать больше точек зрения, поэтому недавно на подкасте я поговорил с моим соведущим Игорем Климовым про его мнение на этот этап собеседований
Игорь работал в VK и тоже в одно время со мной собеседовался в FAANG, мы вместе готовились к собеседованиям. Что уж там, мы даже приходили на канал Mobile Developer, чтобы побатлиться и порешать задачи перед большой публикой (Игорь победил, я считаю)
Несмотря на то что мы уже давно не практикуем алгоритмические задачи у Игоря остается вера в то что это эффективный фильтр на собеседованиях, хотя он согласен что знания эти в работе редко применимы и нет гарантии объективной оценки.
А вот пример, почему алгоритмы полезны…
Ровно такой комментарий я ожидаю от вас под этой статьей, поэтому пишите, не стесняйтесь. Даже если я найду аргументы на ваше мнение, я постараюсь дать самый конструктивный ответ и привести пример, как это можно сделать по другому.
На мой взгляд, алгоритмическая секция это рудимент того подхода, который разрабатывали FAANG компаниях под свои нужды, почти все компании перенимают его из-за его простоты и популярности.
Лень сделала много, вся индустрия айти делается на столпах оптимизаций и капитализма. Та же лень внесла алгоритмы в современные хайринг воронки — тут тебе и 3000+ готовых задач разной сложности и отсутствие инструментов для собеседования — открыл блокнот и решай проблемы, а мы уже скажем правильно ты это сделал или нет.
Самое смешное, что если вы дадите своему коллеге решить алгоритмическую задачу забавы ради, то он ее не решит — это не тот скилл, который часто используется в работе.
Если у вас в собеседованиях есть алгоритмы, спросите себя: “Если кандидат уже успешно прошел все остальные этапы, давать ли ему задачу с Leetcode” А даже если решили дать, представьте что он ее не решил. Стал ли он после этого плохим специалистом?
Эндшпиль
Круто что вы дочитали до этого момента, вот вам за это картинка (там кстати еще два полных месяца в 2022 году, это момент подготовки в Google)
На ней мой эксперимент: “А буду ли я крутым специалистом, если буду продолжать решать алгоритмы каждый день в течении года”.
Этот эксперимент я делал ради вас, прошу не повторять, все трюки уже выполнены и не очень впечатляют.
Какие выводы за этот прекрасный год я сделал:
на дворе 2024 год, я все забыл
это нужно только для собеседований
я не стал круче, наоборот, иногда я пытаюсь “сделать алгоритм” там, где это не нужно
компании плохо адаптируют алгоритмическую секцию
Что в алгоритмах дает вам понять, что человек классный специалист? Что даст вам понять, что он готов расти? Как алгоритмы позволяют брать на себя ответственность? Зачем и как правильно внедрять алгоритмы?
Эти вопросы мы частично разобрали на подкасте
и на оставшиеся я подробно отвечу в следующих статьях, поэтому подписывайтесь, чтобы не пропустить!