Уже много лет 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 год, я все забыл
это нужно только для собеседований
я не стал круче, наоборот, иногда я пытаюсь “сделать алгоритм” там, где это не нужно
компании плохо адаптируют алгоритмическую секцию
Что в алгоритмах дает вам понять, что человек классный специалист? Что даст вам понять, что он готов расти? Как алгоритмы позволяют брать на себя ответственность? Зачем и как правильно внедрять алгоритмы?
Эти вопросы мы частично разобрали на подкасте
и на оставшиеся я подробно отвечу в следующих статьях, поэтому подписывайтесь, чтобы не пропустить!
Комментарии (69)
ganqqwerty
05.08.2024 12:15Воспользовавшись советом HR, я пошел на Leetcode — самую популярную площадку для тренировки алгоритмов и решал все задачи подряд.
Ну а насчет литкода - ну может быть, просто не дано. Кто-то действительно за десять дней умудряется подготовиться, а вот мне надо не меньше полугода по паре-тройке часов в день.
semyon_zdrg Автор
05.08.2024 12:15Понимаю, я два раза пытался начать и решать на постоянной основе, но не было достаточной мотивации, поэтому бросал.
Если растянуть мои 2 месяца подготовки по 8 часов в день для Гугла, то примерно тоже получится пол года по 2-3 часа в день.
Я вообще себя убер лернером не считаю
wataru
05.08.2024 12:15+9На мой взгляд, алгоритмическая секция это рудимент того подхода, который разрабатывали FAANG компаниях под свои нужды, почти все компании перенимают его из-за его простоты и популярности.
Да, копировать интервью у ФААНГа, если вы не ФААНГ - глупость и карго-культ. То, что отлично работает там, не обязательно лучший вариант в других местах.
Если бы ваша статья прямо содержала "в маленьких компаниях", я бы целиком и полностью согласился с вашей статьей. А так выглядит, что вы считаете, что и ФААНГам стоит от них отказаться. И с этим я категорически не согласен. У меня даже целая статья есть на тему того, что алгоритмические собеседования для ФААНГов и других больших компаний нужны: https://habr.com/ru/articles/774862/
Сами по себе они не так уж и плохи. Алгоритмы действительно пригождаются, особенно в ФААНГах, так что проверяется весьма релевантный навык. Плюс, программиста заставляют писать код - эта часть обязательно должна быть в любом интервью.
Разве что false negative у алгоритмических интервью побольше каких-нибудь других типов. Но зато они с лихвой это компенсируют масштабируемостью и низким false positive, что ФААНГам важно в в первую очередь.
вы с вашим потенциальным коллегой решаете рабочую проблему, тут не важен язык программирования и даже не всегда важен рабочий код.
Всегда стараюсь делать именно так. Но, к сожалению, редко когда можно взять рабочую проблему, абстрагировать и ужать ее, чтобы можно было дать это на интервью. Поскольку задачи постоянно утекают и их приходится ротировать, далеко не всегда можно так сделать. Поэтому появляются чуть более абстрактные и, возможно, искусственные задачи.
amazingname
05.08.2024 12:15+17По моему опыту, основная причина провальности лайвкодинга - привычный способ мыслить. Обычно если программист видит алгоритмическую задачу, он думает о ней, визуализирует проблему, получает ощущение охвата проблемы, ее осознания, потом его мысли блуждают вокруг и в какой-то момент из ничего выскакивает видение решения. Сделать это под стрессом невозможно - мозг пугается, все время сбрасывается и не входит в нужное состояние.
Для того чтобы решить задачу на собесе нужно уметь мыслить как чат GPT - сразу с ходу генерить и озвучивать идеи и постепенно приходя к решению.
Чтобы подготовитсья, я делал так. Брал не сложную задачу с литкода и вместо того чтобы думать о ней начинал сразу в слух ее обсуждать, пытаясь найти решение (второй этап - обсуждать еще и на английском). Таким образом удается перестроить мышление с образного на вербальное. Дальше, на собесе когда предлагают ливкодинг, сразу начинаешь обсуждать задачу, это нравится интервьюеру, он участвует и ждет, через какое-то время надо выйти на решение. До решения задач на собес гугла я не дошел, но после этой тренировки вербального мышления, задачи типа обхода бинарного дерева или ревью кода на собесе перестали быть катастрофой.
andreishe
05.08.2024 12:15Сделать это под стрессом невозможно
Тогда собеседованя не работали бы совсем. И соревнования по программированию не существовали бы.
amazingname
05.08.2024 12:15На соревновании никто не сидит напротив, глядя тебе в рот и оценивая насколько ты хорош.
Есть варианты. Можно научиться не испытывать стресс чтобы нужный глубокий креатив работал на собесе, можно научиться решать задачи настолько хорошо чтобы креатив на собесе был уже не нужен. Научиться говорить и думать параллельно это самое прямое решение проблемы собеседования. И может пригодиться в работе в качестве софтскила.
menelion_elensule
05.08.2024 12:15Наконец-то хоть кто-то про это написал, спасибо вам! Считаю, что лучшее собеседование (да, сам проходил успешно именно такие) — это тестовое задание для отсева, причём желательно похожее на то, что человек будет делать на работе, а потом интервью с просьбой написать кусок кода, спроектировать БД или что-то такое же, максимально приближенное к области работы. Понимаю аргументы автора комментариев выше, что для реально большой компании с 800 человек на место это не работает (наверное). Но я не знаю ничего более стрессового, чем алгоритмические задачи на собеседовании. Хуже этого — только алгоритмические задачи на бумажке.
Alexandroppolus
05.08.2024 12:15+14Наконец-то хоть кто-то про это написал
В смысле "наконец-то"? За последний год штук 5 таких статей было.
Тестовое задание считается ещё более спорным и ненавистным (для многих) пунктом.
А насчет бумажки вы зря, там зато не надо дебажить под ключ, бумажка простит всякие мерзкие ошибки на единицу и прочие корнер-кейсы.
kimisa
05.08.2024 12:15+1Тестовое задание хорошо, если вы выбираете из 2х компаний. Ну и если оно рассчитано не больше, чем на 2 часа. Но и тут есть но - для вас эта задача может занять 2 часа, т.к. вы часто кодите в этом направлении. А для другого в 3 раза больше, т.к. он кодил в другом направлении.
menelion_elensule
05.08.2024 12:15+3P.S. Уважаемый автор, если я вас случайно минуснул, извините, ради всех богов, — accessibility Хабра оставляет желать много лучшего, и разработчики обе кнопки пометили как «Голосование» (спасибо, очень полезно).
vcKomm
05.08.2024 12:15Я видел, так делают: @Boomburum
Действительно странно: уbutton
свойствоtitle
правильное расставленно — «Нравится» и «Не нравится». Но вот внутри кнопки лежит svg, внутри которого тэгtitle
со значением «Голосование»
40oleg
05.08.2024 12:15+5Здравствуйте. Так и не понял почему это самый провальный этап собеседований, если, например, использовать его как инструмент уменьшения количества кандидатов на вакансию, то очень даже прекрасный. В действительности есть корреляция между хорошим инженером и умением решить алгоритмическую задачу, следовательно и предпочтению желательно отдать кандидату умеющему решать такие задачи.
Oceanshiver
05.08.2024 12:15+8Как инструмент отсева он примерно так же хорош, как и просто случайно выбрать 15 резюме из 100. Где гарантии, что люди, прошедшие отсев алгоритмами, умеют только в алгоритмы, потому что месяцами учили только их, а в работе они "не очень"?
wataru
05.08.2024 12:15+5Если человек способен выучить алгоритмы и структуры данных так, чтобы решить незнакомую до этого задачу, то: он умеет думать, способен выучить большую и сложную тему, способен написать более менее понятный и корректный код.
В этом случае работу работать он точно может. Выучить один фреймворк по сравнению с дюжинами алгоритмических тем - элементарно. Перекладывать джсоны по сравнению с динамическим программированием - не составит никакого труда. Спроектировать маленький модуль проще, чем разбить задачу на подзадачи и связать воедино несколько шагов алгоритма.
Плюс, если алгоритмическая задача, таки, попадется (а в ФААНГах они попадаются, я на личном опыте знаю), то такой человек ее решит, а не напишиет наивное плохое решение даже не задумываясь, что тут какой-то этот ваш алгоритм вообще нужен.
qeeveex
05.08.2024 12:15+1Да ладно)
Архитектурные навыки набиваются исключительно на практике. И именно эти навыки решают как много бизнес будет тратить денег на поддержку и развитие продукта.
Алгоритмы тут вообще ни каким боком.
wataru
05.08.2024 12:15Да, но ведь архитектурные навыки должны быть только у более сеньерских позиций. И на них всякие гуглы проводят отдельное system design интервью. Но эти интервью гораздо дороже алгоритмических, ведь их могут проводить только очень опытные и высокопоставленные сотрудники, а задачи сложнее придумывать. Поэтому у сеньеров спрашивают одно system design и несколько алгоритмических интервью, а не наоборот.
Oceanshiver
05.08.2024 12:15В том-то и дело что нет. Вы проверите, что он умеет только решать плюс-минус стандартные задачи на алгоритмы, не более того.
Что у него с работой в команде, с чистотой кода, ответственностью, умением разбираться в предметной области - нет. Если вам нужна код-мартышка, может это имеет смысл, да. Но опять же нет гарантий, что он не "задрочил" алгоритмы и не сядет в лужу на первой же бизнесовой задаче.
wataru
05.08.2024 12:15Что у него с работой в команде, с чистотой кода, ответственностью, умением разбираться в предметной области - нет.
Работу в команде вы кроме как испытательным сроком не проверите. Фаанг вообще проводит behavioral собеседования для этого, но я их презираю. Их завалить может только полный социопат. Ну и людям с не очень подвешенным языком надо будет сильно напрячься.
Чистота кода - конечно, проверяется. Если кандидат способен выдаивть из себя 10 чистых строк кода на интервью, то уж и в работе сможет это сделать, если захочет. А он захочет, ибо в ФААНГах код ревью всего кода.
Ответственность - это как вообще проверить? Поболтать по душам? Вы так только полных аутистов отсеите, остальные вам будут просто врать.
Предметная область - у ФААНГа она своя внутренняя. Ее снаружи никто не знает в основном, зачем ее проверять. Если же там какая-то специальная позиция, например machine learning, то для этого проводят дополнительное интервью. Но, опять же, они сильно дороже и сложнее для компании, чем алгоритмические, поэтому они - последний этап после отсева несколкими алгоритмическими.
geotech
05.08.2024 12:15Ваше утверждение кажется мне контринтуитивным. У нас есть 100 резюме из них нам нужны 5 программистов с хорошей базой программирования. Известно, что 20 из всех резюме хоть сколько-то годны в разной степени, а остальные "грузчики". Наша задача нанять лучших. При отсеивании мы гарантированно будем выбирать из 20 тех, кто хоть сколько-то умеет программировать, при случайно выборке в 15 мы в даже в самом лучшем варианте, когда все 15 из тех 20, что на что-то способны, мы, возможно, убрали из выборки 5 самых лучших. Даже если не придираться к числам, отсев будет всегда давать лучше результаты. Ну и явление "в работе они "не очень"" - при случайном отборе будет проявляться чаще.
AngusMetall
05.08.2024 12:15Более того, если посмотреть, то отлично пишет алгоритмы, чаще всего даже лучше кожаных мешков именно ЧатГПТ, а вот нормальный код он пишет мягко говоря так себе.
wataru
05.08.2024 12:15+2Он отлично пишет только очень баянистые задачи с литкода, у которых решение по всему интернету раскопипасщено. Вы там условие чуть-чуть переформулируйте и он вам начнет бред генерировать.
domix32
05.08.2024 12:15когда твоих эйчаров перманентно брутфорсят индусы с китайцами случайная выборка будет фильтровать заметно хуже чем литкодом
Neikist
05.08.2024 12:15+7Я был единственным андройд разработчиком
Я бы понял написание "андройд" от кого угодно, но не от андроид разраба... И встречаю все чаще и чаще такое написание. Что вообще происходит?
Radisto
05.08.2024 12:15+2В английском это дифтонг и типа один гласный. Таким образом можно подчеркнуть ориджинал проноунсэйшн и хай лэвэл. До́быча, компа́с, не плавают, а ходят.
flx0
05.08.2024 12:15+4Только суффикс -оид вообще не английский, какой тут, к хренам, ориджинал прононсиейшн? Да в английском там никакого "й" даже близко не звучит. В отличие от того же биткойна, который в обратную сторону почему-то любят коверкать.
AYamangulov
05.08.2024 12:15+2А еще повсеместно входящее в оборот "мозайка" - не пойму, что это, бабка Деда Мазая?
akk0rd87
05.08.2024 12:15Да, она самая. https://play.google.com/store/apps/details?id=org.popapp.jdraw
geotech
05.08.2024 12:15+1В крупную компанию и устоявшийся проект нужны рабочие "пчелки", ничего личного - просто бизнес. Алгоритмические задачи подразумевают подготовку, усидчивость, и IQ не ниже среднего, а также мотивированность и целеустремленность. То есть такие сотрудники смогут решать хорошо сформулированные "простые" задачи. Чтобы не брать совсем "роботов" требуют вести какой-никакой диалог, а также, всякие там, софт скиллы. Последний рубеж - вайб-тест, или насколько кандидат подойдет команде и компании по вайбу. Все вышеперечисленное - это легко тренируемые навыки, разное время может потребоваться, но 1 года хватит на подготовку в любую крупную компанию мира на должность миддла. Для синьоров есть еще предметная специфика - ее уже трудно натренировать - это, в основном, опыт.
ЗЫ: я не прошел ни одного собеседования, что у меня были :(
Batalmv
05.08.2024 12:15Читая такие попытки рефлексирования, я вот хочу понять. Вот мы, или они, ищем программиста. Вот как его проверить?
Всем хочется, чтобы и код полезный писал, и работящий был, и "спикал" на всякий случай. Но проблема в том, что это надо проверять.
А программист - это ж не грузчик. Качество написания кода зависит от того, как он думает, что знает, какой имеет опыт, как он реагирует на ранее допущенные ошибки
---------------
Иногда мне кажется, что люди, и даже сами програмисты смотрят на себя, как на грузчиков. Вот я не применяют в работе напрямую - значит мне не надо. А то, что это сформировало твое мышление и ты уже полузуешься чем-то не особзнавая этого - это не важно.
Вот автор статьи решал алгоритмы - это же наверняка его развивало, прокачивало "думалку". Может и нет, я не знаю, может он заучивал решения. Но он для себя пользы не видит. Ну ОК, в итоге каждый приходит сам к тому, кто он есть
gBear
05.08.2024 12:15+1Вот мы, или они, ищем программиста. Вот как его проверить?
Если вот вам - т.е. непосредственно вам - нужен программист, вы разве не знаете как вам его проверить?! Проблема - которую затрагивает автор - она вообще не про это, имхо.
Вот я не применяют в работе напрямую - значит мне не надо. А то, что это сформировало твое мышление и ты уже полузуешься чем-то не особзнавая этого - это не важно.
Кто бы спорил за "мышление" и его "развитие"... вот только мой личный опыт мне "шепчет", что освоение - например - теории сложности вычислений - вполне может, если и не "сформировать твое мышление", то уж точно на это "мышление" повлиять. А вот знание (причем весьма условное "знание", в подавляющем большинстве случаев) конкретных решений конкретных задач - очень сильно вряд ли.
В этом смысле, "алгоритмы" - сугубое имхо - это такой аналог насмотренности у каких-нибудь, условных, "дизайнеров". Весьма условный, надо понимать, аналог... но, с ровно такой же "ценностью для".
Batalmv
05.08.2024 12:15А вот знание (причем весьма условное "знание", в подавляющем большинстве случаев) конкретных решений конкретных задач - очень сильно вряд ли.
Если програмист "запоминает" решения, чтобы их выдать на собеседовании - это не имеет смысла. Если он учится их решать - это развивает его "думалку", что полезно. Вопрос в том, кто что делает. Понятно если кто-то делает "первое" - то вывод о вредности справделив. Но только для него
В этом смысле, "алгоритмы" - сугубое имхо - это такой аналог насмотренности у каких-нибудь, условных, "дизайнеров". Весьма условный, надо понимать, аналог... но, с ровно такой же "ценностью для".
Насмотренность тоже полезна, так как "изобретение колеса" требуется не так часто. Но тут действительно не нужны "алгоритмы". Я обычно прошу рассказать о каких-то примерах из реального опыта решения бизнес задач, а дальше куда "кривая" выведет
Кстати я лично не задаю задачи на алгоритмы, так как часто на собеседование выделяется час, а на это нет времени. разве что спросить что-то вроде "как передать максимум инофрмации между космическим кораблем и землей, если окно связи равно 20 минутам, а сигнал идет 5 минут" или подобные вопросы для понимания кругозора кандидата
gBear
05.08.2024 12:15+1Если он учится их решать - это развивает его "думалку" ...
Что значит "учится их решать"?! Как? На основе чего?
Есть разница между "протыкать" задачи сортировки (пусть даже - сложные) на каком-нибудь, условном, leetcode, и усвоить третий том Кнута? Нет?
Насмотренность тоже полезна ...
Разве кто-то с этим спорит?! Речь о её ценности. Если хотите, о её пригодности в использовании в качестве меры. Т.е. - даже если для "реципиента" есть какая-то польза (условное, "развитие думалки") - то пригодность такого рода "насмотренности" в качестве меры - имхо - около нулевая.
Batalmv
05.08.2024 12:15Что значит "учится их решать"?! Как? На основе чего?
На основе практики и теории :) Ну блин, я даже не знаю как вам пояснить.
Школьник как учится решать задачи? А студент? Ну или ... а как в шахматы учатся играть
Или это был риторический вопрос? Тогда прошу прощения, не понял
Разве кто-то с этим спорит?! Речь о её ценности.
Ну почему же? У вас есть два кандидата, оба показали все одинаковое, но в алгоритмической секции результаты разные ... :)
Плюс надо понимать, что задачки показывают:
как человек думает
как борется с трудностями
как может пояснить свое решение
Т.е. легко оценить способность к:
коммуникации и передаче знаний
реакции на изменение вводных
готовность вообще чего-то делать
Вы же надеюсь понимаете, что на любом вопросе кандидат раскрывается не только как "чистый" програмист, но и как человек
gBear
05.08.2024 12:15На основе практики и теории :)
Ну вот выше были "задачи сортировки" c - условного - leetcode. С "практикой" - более менее понятно. Что за "теория"?
Или это был риторический вопрос? Тогда прошу прощения, не понял
Нет. Это не риторический вопрос.
Вот "научился" я - например - десяти разным способам сортировок. Даже - предположим - я знаю и понимаю области применений этих - конкретно этих - "решений". Т.е. я без проблем смогу их воспроизвести, рассказать "что-по-чём" в рамках каждого конкретного "решения" и т.п. Я - типа - "мастер вот этих вот десяти способов сортировки".
Упустим, что это дает лично мне. Важно, что это дает "нанимателю"? Т.е. вот кроме того, что он теперь знает, что я могу и "так", и "сяк" и ещё восемь разных "-як".
Ну почему же? У вас есть два кандидата, оба показали все одинаковое, но в алгоритмической секции результаты разные ... :)
Ну ок. Вот есть я - "такой красивый". Но, не могущий "обобщить" свои "знания" до - допустим - задач поиска. А рядом - не менее красивый - "мастер вот этих вот пятнадцати способов поиска", который не умеет в сортировку.
Дальше что?
Плюс надо понимать, что задачки показывают ...
"Задачки"-то, может и показывают. "Алгоримы"-то - сиречь, конкретные решения - тут причем?
При всей "ремесленности" нашей области деятельности, т.н. "алгоритмические задачи" ведь даже не являются в ней типовыми.
Т.е. легко оценить способность к ...
Ну т.е. важно не само "решение". Так?
Batalmv
05.08.2024 12:15"Задачки"-то, может и показывают. "Алгоримы"-то - сиречь, конкретные решения - тут причем?
Важно не "знание" конкретных алгоритмов, а умение их строить. Я напомню, что "алгоритм" по сути равен решению задачи. Ну и вообще теоретически это две половинки одного целого :)
Вообще мне сложно ответить на ваш вопрос, так как на собесебовании проверяется:
знания / опыт
умения
софт-скилы
Так вот, самое легко прниобретаемое - это знания. Понятно, человек должен иметь базу, но в реальности это самая малоценная для меня категория
Умение же решать задачи мжет оказаться таким, что человек никогда не дорастет до требуемого уровня
Так вот, задачи могут показать все это, если вы
просите решить задачу -> алгоритм
уточняете как это работает под капотом (к примеру коллекции в Java) -> знания
смотрите на реакцию -> софт скиллы
----------------
Я наверное отвечу вам так. Когда вы что-то хотите узнать, не обязательно задвавать прямой вопрос. К примеру, в проекте достаточно спросить разработчика о статусе и начальная инфа моет быть уже получена по тону, или выражению лица, или паузе перед ответом.
Тоже самое на собеседовании. Косвенная информация не менее важна, вопрос в умении ее видеть.
Не надо смотреть "одноклеточно". Знает "сортировку пузырьком" - подходит. Но я допускаю, что есть компании, которые так и поступают. Ну такое, мне лично что до этого?
viordash
05.08.2024 12:15+1а если бы у работодателя была возможность увольнять "по щелчку", не стали бы эти этапы интервью лишними? Я к тому что, достаточно провести устное тех-интервью и определив что кандидат более-менее подходит брать сразу на работу. Не подошел, до свидания.
wataru
05.08.2024 12:15+1Нет. Ибо даже хорошие кандиадаты довольно долгое время въезжают в кодовую базу, и по началу все работники будут очень мало продуктивны. Потом, когда зерна от плевел отсеются уже пара месяцев и прошло. И это 2 месяца потерянного времени, а не только 2 зарплаты. Плюс у больших компаний будет оплата переезда и стартовый бонус. Это еще несколько зарплат. Но потерянное время, конечно, компании дороже.
Nialpe
05.08.2024 12:15Сталкивался с ситуацией, когда некоторые "эффективные" притаскивают kpi другим "эффективным" - увольнение на испытательном, увольнение в первый год... После первого лоботряса, которого сохраняют "эффективные" ради своих цифирок в ущерб команде, тех.иньервьюер решает жестить больше. Случай из практики, не более.
Politura
05.08.2024 12:15+2на дворе 2024 год, я все забыл
это нужно только для собеседований
я не стал круче, наоборот, иногда я пытаюсь “сделать алгоритм” там, где это не нужно
Ерунда, сам поменял работу в 2022, так что тоже тогда решал много задачек, недавно позвали на собеседование и я опять взялся за литкод, да, медленнее, чем раньше было в конце пути, но намного быстрее, чем было на старте, сейчас зачастую средние задачки делаю сходу быстрее, чем раньше делал легкие задачки.
Любое перекладывание джосонов, это алгоритм. Где также можно напортачить. Навык решения алгоритмических задач дает меньше шансов этого сделать. Практический пример: так уж сложилось, что попал в крупную компанию, где литкодовского этапа не было, был как-раз приземленный: бакендщику дают написать сервис под заданные параметры за полтора часа, а потом еще час обсуждений с пятью человекама того, что получилось и на околозаданные темы, включая систем дизайн и прочее. Так вот, после опыта литкода, делая код ревью я частенько заворачивал код, когда, например, в цикле запрашиваются одни и те-же тяжелые данные, которые можно было запросить один раз за пределами цикла. Или, например, когда какой-то метод в цикле вызывает метод другого класса, а тот метод опять-же в цикле берет из базы, или из стороннего сервиса данные, которые есть у вызывающего, так что можно было их просто передавать в метод. Таких вещей просто море и у сеньеров и у тех, кто даже еще выше. А если есть опыт алгоритмических задач - глаз их ловит на лету.
Это всего-лишь один из навыков, который полезен в работе.
Neikist
05.08.2024 12:15+2Честности ради - второй пункт глаз цепляет у многих и без сидения над задачами по дп или на графы. В остальном спорить не буду, литкод скорее полезен (ну или если в вузе это все изучалось хорошо).
AYamangulov
05.08.2024 12:15+1С того провального собеседования я не написал ни строчки алгоритмов, но я бы не сказал, что потерял какой-то навык, ведь я его и не приобретал.
По моему скромному разумению, все холивары вокруг нужности или не нужности алгоритмов на собеседованиях порождаются тем, что действительно, для подавляющего большинства компаний удается не обращать особого внимания на алгоритмическую сложность задач просто потому, что либо задачи по настоящему не слишком высоконагруженные, либо для заданной нагрузки ресурсов хватает, чтобы потребности заказчика были сносно удовлетворены. Ну конечно, эти компании считают себя крупными, и это так - в отношении ворочаемых ими финансовых оборотов. Но зачастую это не обязательно связано с тем, что ворочаемые ими данные действительно очень большие. А вот когда вы наконец-то попадете в компанию, где действительно будете работать с big data, вот тут-то все самое интересное и начнется, и опыт работы с алгоритмами и их понимание ой как пригодится, честное слово. И тогда будет понятно, что FAANG не зря их включали в интервью, и точно уже не только и не столько для тестирования, как вы умеете всякие софт скиллы на них продемонстрировать, а все-таки глубоко под капотом проверяли, до какого именно уровня сложности задач вы сможете добраться на вашем текущем уровне, ИМХО.
AndrewN
05.08.2024 12:15+6Проходил этапы в Т-банк, на первой встрече с HR сказал, что хочу Х денег, меньше не рассматриваю, сказали что отлично, в вилке. В итоге прошел 3 секции, после каждой HR нахваливала мои результаты. Затем встреча с командой, дали добро, созваниваемся обсудить оффер и предлагают мне 0,8X. При этом уже на руках была пара офферов 1,1-1,15Х. Вот что это было? Сожгли кучу своего и моего времени (1,5+1+1+1+0,5 ч). Зато алгоритмы... Систем-дизайн... Карго-культ какой-то.
Advisers
05.08.2024 12:15Чтобы не было таких вопросов - не называйте сумм сами, вообще..., как? - сами решайте.
kimisa
05.08.2024 12:15Но тогда будут лезть с собесами те, которые готовы нанять за гроши. Зачем тратить время на того, кто изначально не готов платить эту сумму? И от HR на 100% никогда не услышишь вилку.
AndrewN
05.08.2024 12:15Сам назвал сумму и ясно обозначил, что меньше не рассматриваю
wataru
05.08.2024 12:15Жадный или ленивый HR решил, "а вдруг прокатит". Им же за найденных кандидатов не то бонусы дают, не то повышения, в общем - им выгодно, что бы на работу устроились.
Пишите жалобу кому-нибудь в компании в следующий раз, чтобы этому HR-у прилетело по голове. Если все так делать будут, эта практика исчезнет.
Advisers
05.08.2024 12:15Хотите зарабатывать больше - не называйте сумм никогда, пусть они сами предлагают. 100%.
qeeveex
05.08.2024 12:15+1Алгоритмы полезны так помогают сэкономить время и отсеять компании где есть такая секция.
Ещё они полезны потому что помогут гарантированно устроиться на не плохую работу, если ты сидишь без работы и восемь часов в день надр... натаскиваешь навык решения алгоритмических задач. Как в спорте качают мышцы, так и с алгоритмами - легко можно натаскаться.
Проблема в том что настоящие профи без работы не сидят и им тупо некогда надр... натаскивать навыки алгоритмов. И их хантят как правило компании попроще.
Плюс алгоритмические секции позволяют снизить ценник к дорогим спецам. Типа ты не прошел секцию, но мы готовы тебя взять за прайс ниже.
heartdevil
05.08.2024 12:15+5"За два месяца я решил 300+ задач, с упором на средние и сложные — других Google не спросит." - а сколько из этих 300 задач вы реально решили сами? И, позвольте спросить, а какое у вас образование? Просто решать в день по 5 задач уровня (middle/hard), это просто выглядит не реально, на мой субъективный взгляд. Конечно, может быть вы решали задачи (weak middle/ weak hard). Там, где успешных посылок +80%/100%, но даже в этом случае, это почти невыполнимая задача, ПРИ УСЛОВИИ, что у вас нет сильного технического образования, которое привило вам умение очень хорошо думать. Я уже молчу про реальное понимание всех тех техник и наблюдений (а зачастую каких-то математических фактов), которые требуют такого рода задачи. Я не нападаю, просто хочу некой ясности. Я просто часто видел статьи, где людям "всего-то" требовалось 2-3 месяца на подготовку на литкод. А это 150-200 задач. По моим наблюдениям, "среднему разработчику", даже со "средним" техническим образованием, требуется, скорее всего, 1-2 года, чтобы пришла уверенность.
semyon_zdrg Автор
05.08.2024 12:15У меня высшее математическое образование, но больше мне нравилась информатика и все что связано с языками (кроме алгоритмов)
Начинал я конечно с изи задач - leetcode 75/150 чтобы набраться базы. Решал я конечно не все, но все пытался понять и проработать
Когда выходишь на уровень Хард задач, то понимаешь что это все комбинации/вариации средних, редко встречается что-то уникально нерешаемое
Мне кажется, что у меня просто был хороший мотиватор в виде грядущего интервью, поэтому получилось, но срабатывает инстинкт самозванца - если я смог, то любой сможет
heartdevil
05.08.2024 12:15Спасибо за ваши уточнения.Я где-то так и полагал, что у вас, скорее всего, есть так сказать "математическое мышление", помогающее вам в решении задач.
Я думаю, что даже сильнейшая мотивация, скорее всего, НЕ поможет, человеку, если он раньше не решал "много" и не уделял достаточно времени математике или каким-то логическим задачам.
Все эти литкод паттерны упрощают сильно изучение, но только, когда у человека есть привитое умнение учиться и учиться долго. Наряду с уже схожим умением думать. А без этого, кандидат будет просто 2 месяца только "привыкать" к чтению условия задачи и пытаться понять разборы этих задач. Я уже молчу про технические затруднения в реализации этих самых идей в коде, под конкретные задачи, ну и понимание, а почему, собственно это все должно рабоотать.
Реальность, как говориться, может быть гораздо печальнее.
A по поводу нужны ли алгоритмы или нет, скажу что, когда они есть, то это не навредит, а только улучит человека.
Я склолен думать, что любой "алгоритмист", может стать разработчиком любого профиля, но не любой разработчик сможет в алгоритмы.
Еще одну более специфичную вещь выскажу, но опять же, это мое сугубо личное мнение. Я думаю если разработчик увлекается алгоритмами, то он куда более лучше может отлажививать программы. Просто потому, что читать код, держать в уме стэктрейс, графы объектов или функций вызовов - это все на фундаментальном уровне дают как раз алгоритмы и структуры данных. А отлаживание программ - это одна из самых частых задач в любом программировании.
Marsezi
05.08.2024 12:15Ребят такой сайт был, потерял и у них на видео он на секунду появляется.
Английский Сайт с топ популярными задачами которые задавали в компаниях. Там можно каждому проголосовать за 'тебя спрашивали эту задачу?', сами задачи перекидывали на leetcode. Ты мог галочки ставить какие решил и верху ещё показывался прогресс easy медиум hard в количестве для каждой сложности тира 5/100. Ещё были верху несколько фильтров.
semyon_zdrg Автор
05.08.2024 12:15Платный leetcode это поддерживает
Но первое что в голову приходит - neetcode
Flux
05.08.2024 12:15+2Tl;Dr: очередной неосилятор обиженный Яндексом (haha, classic) рекламирует свой подкаст.
unity92
05.08.2024 12:15Потому что все хотят как в FAANG и в виду инвалидности управленцев принимается решение об оптимизации, чего есть в FAANG и чего будет в ИП Рога и Копыта. По случайному совпадению в ИП оказываются алгоритмы, непрозрачные годовое цели и вот это все, а всякие истории про оклады\мотивации\бонусы оптимизируются.
andreishe
05.08.2024 12:15У вас есть 45 минут, чтобы оценить реальные знания интервьюируемого (а не то, про что он так красиво заливает). Алгоритмическая задача a la литкод имеет очень хорошо очерченные границы. "Реальная задача" имеет таковые только в голове интервьюера. Собеседуемый не знаком с контекстом реального проекта и передача значительной части этого контекста займет нетривиальное количество времени, а у вас 45 минут.
У меня были пройденные собеседования, где собеседующий рассказывал подходящий алгоритм и я его реализовывал после обсуждения.
Было и такое: пришел на собес, мне рассказывают, что работают и поддерживают свой форк MySQL (тут наверно уже стоило сбежать) и предлагают в качестве задачи изменить код их форка так, чтобы функция AVG возвращала удвоенное значение среднего. Я нашел, поправил, скомпилировал, проверил. Показываю. Спрашивает как я это сделал, я рассказываю, что нашел функцию, где реализован подсчет этого среднего и добавил "*2" перед возвратом. Он хлопает глазами. Я хлопаю глазами. Очевидно ожидалось что-то дополнительное, которое существовало в контексте собеседующего, но отсутствовало в моем. Собеседующий не донес, я не допытал.
Давайте, я лучше вам с литкода задачи порешаю.
avengerweb
05.08.2024 12:15+1Для большинства компании долины алгоритмические задачи являются простым способом отказа. (Чтобы не засудили. Всем давно известно что спокойнее не нанят хорошего кандидата чем нечаянно нанять плохого. Опять же, чтобы не засудили, придется год пипать человека чтобы просто уволить - ресурсы и деньги.
Большая часть больших компаний вам отправит задачку онлайн чтобы вы решили без участия людей, этот процесс является отсеиванием (то о чем тут пишу в коментах), очень сложно провалится если вы понимаете в программирование.
С точки зрения проверки знаний, алгоритмы были хорошей темой, когда только появились на интервью, к примеру такие простые как найти первый не повторяющиеся символ в строке. Цель была простоая пообщаться посмотреть на кандидата. Как обычно потом программисты сами себе выстрелили в ногу, появились книги типа хакнуть интервью или сервисы как литкод, что привело к невероятному росту сложности задач и их формулировок, потому что каждый второй был тут чтобы хакать интервью, а не беседовать про свой скил.
leon0399
05.08.2024 12:15Вставлю свои пять копеек про то, как мы проводили подобные лайв-кодинги, и как мы, на мой взгляд, их улучшили
У нас это, действительно э, было больше похоже на парное программирование, кандидаты могли пользоваться всеми инструментами, поиском, stack overflow, chatgpt, мы вместе обсуждали подход к задаче и тд
И смотрели мы не на финальный результат, какая там у него сложность по памяти и времени к, а на то как подходят к проблеме и решают ее. Могло быть такое, что кандидат решавший, например 2 из 5 задач пройти на следующий этап, а кандидат решивший 4 из 5 - не пройти, просто потому что второй кандидат тупо перебирал стандартный набор вариантов (а давайте через стек, а давайте жадный подход и тд), даже не задумываясь о том почему выбирают то или иное решение
Ну и чуть позже мы вообще взяли и поменяли описание этих задач, так, что бы они были близки к нашему продукту (у нас на самом деле нередко нужно применять алгоритмы). Это сильно уменьшило «нервозность» кандидатов, когда вместо животных и геометрических форм, ты оперируешь виртуальными машинами
ganqqwerty
А вот пример, почему алгоритмы полезны. Есть у тебя вакансия. На нее нужен один человек и на нее скажем 800 претендентов. Хрюши отсеяли тех, кто вообще ни в какие ворота и теперь претендентов 300. Кто-то из команды или нанимающий менеджер почитал резюмешки, и теперь их 100. Надо чтобы осталось хотя бы человек 15, с которыми можно будет по-человечески поговорить часа два. Как это сделать?
Ну вот есть статистика, что если взять сотню чуваков со знанием алгоритмов, 70 из них не вылетят после первого полугода. А если случайную сотню - то 20. Почему так? Да хрен его знает, наверное, как-то связано. Если бы вместо алгоритмов там было жонглирование или решение задачек на
стулья с пикамипинг-понговые шарики - задавали бы задачки на пинг-понговые шарики.То бишь, это исключительно статистическая история для больших чисел. Другой вопрос, если у тебя вакансия и на нее пять претендентов, а не восемьсот. Да ты можешь с каждым из них целый день провести в парном программировании или беседах за жизнь - лучше это и предпочесть. В этом случае литкод-собес не оправдан.
DarthVictor
У меня сейчас скорее не 70 и 20, а 90 и 80. Да и в целом довольно смешной выглядела ситуация в том же Яндексе в году 17-м, когда джуны умели решать алгоритмические задачи, а начальники и авторы многих вполне успешно работавших сервисов честно признавали, что нет. То есть умение решать алгоритмические задачи на собеседовании не очень коррелирует даже с умением решать алгоритмические задачи на работе. Потому что в одном случае нужно уметь быстро вспомнить одно из типовых решений, а в другом - медленно и вдумчиво выбрать из нагугленных решений. Да, кругозор полезен, чтобы как минимум знание что гуглить. И пока люди специально не готовились к алгособесам от них был толк. Они позволяли понять этот самый кругозор. Проблема началась, как только к собеседованиям стали массово готовится. Теперь они показывают только усидчивость.
VPryadchenko
Если вы быстро вспомнили и применили типовое решение без лишних слов, и интервьюер остался этим доволен, значит это плохой интервьюер.
slonopotamus
Не можешь, кандидаты пошлют такое лесом.
unity92
не решается никакая проблема 800 претендентов. Эти претенденты в 1 секунду вывалилисиь на рынок труда, эти претенденты могут уйти в другие компании пока ты устраиваешь 8 раунд алгоритмического собеса, претенденты это не собаки безвольные и так уж вышло пока имеют выбор где работать.
Найм нового работника всегда будет риском для обеих сторон, а искусственное затягивание процесса найма, как раз таки и может позволить себе Только гигант, коих примерно 5, да, потому что фактически успех\не успех найма ничего не изменит в бизнесе.
Исходя из этого смешно говорить что яндекс=фанг, потому что яндекс таки пылесосит рынок как не в себя.
wataru
Фаангу эта проблема не грозит. Люди знают, на что идут, но люди хотят получать заметно выше средней зарплаты и всякие бонусы. И практически все компании в этом сегменте делают по несколько раундов интервью, так что люди отваливаются по пути относительно редко.
Яндекс - ФААНГ, потому что это большая компания, у которой много данных и много прибыли, поэтому алгоритмы им релевантны, а зарплаты там выше рынка, а следовательно, у них толпы за забором.
unity92
у яндекса выше рынка? выше рынка чего, овощей, одежды?
wataru
300 тысяч в месяц мидлу в москве - это не выше рынка?
semyon_zdrg Автор
Спасибо за коммент!
Если стоит задача из 100 отобрать 15 то, как пример, можно ввести ещё одну линию отсева, например 15-ти минутный скрининг с hr, где есть варианты ответа на вопрос, либо чуть более углубленный первичный технический скрининг, опять же, по вопросам домена вакансии. На нем мы, например, оставляем только тех кто ответил отлично, но не копаем сильно в глубину. По кандидату записываем результаты, чтобы на основном интервью не возвращаться к вопросам и говорить на другие темы (либо вообще в другом формате - парное программирование или сис диз например) в любом случае это даст скосить столько же людей, но не по знаниям алгоритмов, а по доменной сфере работы