Привет, Хабр!
Недавно Яндекс изменил процесс отбора кандидатов, теперь перед алгоритмической секцией добавилась секция Advanced Code. Секция заявлена как более близкая к практике, в статье я расскажу правила нового формата.
Я не связан с Яндексом, описываю процесс как он выглядит с моей, программерской, стороны. Пару лет назад я проходил три секции лайвкода, получал оффер, но тогда не смог принять его. А на днях побывал на новой секции Advanced code. Лично для меня это испытание прошло тяжело, как говориться lessons learned, но я узнал правила игры, и буду писать сугубо технически про условия и цели. Личную историю и мнение, шероховатости нового процесса, свои эмоции и фейлы уберу в спойлер в конец статьи.
На сегодня описание новой секции от Яндекса такое:
1 секция - Advanced code
Секция длится 1 час.
В отличие от АА это будет более близкая к практике задача.
Тебе предложат ознакомиться с уже существующим небольшим кодом и попросят его дописать или написать какую-то комплементарную часть (например, будет тест, нужно будет реализовать функцию удовлетворяющую этому тесту, или наоборот и т.д.).
Условия проведения секции приближены к реальной работе, разрешается пользоваться интернетом, справками по языку программирования, справками по стандартным библиотекам
Старая добрая секции «алгоритмы» (АА) осталась, она теперь следует за AC. По AA много материалов (видео и примеры от Яндекса, список тем, статьи с опытом прохождения на Хабре, даже перечислены темы, которые там не встречаются), правила игры и критерии оценки доступны всем желающим. Поэтому будет удобно описать новую секцию (AC) в сравнении с AA. А заодно сравнить с подготовкой на leetсode. Да, литкод по-прежнему актуален для подготовки к AA.
Среда разработки. Старая АА пишется в онлайн-блокноте ЯндексКод. Новая секция AC пишется в IDE на компьютере кандидата, ведётся демонстрация экрана. Поэтому к интервью надо подготовить IDE с чистым проектом с подключенной библиотекой для unit-тестов.
Конечная цель нового задания - пройти автотест. Для этого надо сначала понять условия, составить пример для теста, написать автотест, реализовать решение самой задачи. Для сравнения, на литкоде цель та же, с той разницей что тесты предоставлены площадкой. А в секции АА тест так же надо придумать самому, но прогонять его в уме и блокнотике.
Формулировка задач. Важное различие в формулировках задач между литкодами и секциями Яндекса - литкод даёт к задаче примеры входных данных и ожидаемых результатов. На интервью наборы тестовых данные надо составить самостоятельно. Поэтому, готовясь к интервью - читаем формулировку задачи и пытаемся понять задачу не смотря на примеры данных, тренируемся самостоятельно придумать тесты.
Компилируемость. В новой секции код должен компилироваться и выполняться. Как и в литкоде. А в секции АА мы пишем код в блокноте и не запускаем, интервьюер может в фоне попробовать запустить код в том же литкоде или на своём компьютере.
Помощь в интернете. Разрешение гуглить не делает большой разницы. В секции АА если не мы помним название метода мы пишем примерно предполагаемое, интервьюер может подсказать и поправить. А в секции АС мы можем гуглить. Например, если вы забыли как называется функция стандартной библиотеки, или нужен сниппет со стековерфлоу. Знаем что ищем, пишем конкретный запрос, хватаем результат, 10 секунд на круг.
К сожалению, не могу сказать, разрешено ли искать в интернете решение данной или подобной задачи, можно найти механизм и поправить его к месту. Это было бы максимальным “приближением к реальной работе”.
Корнер-кейсы. Литкод тестирует наше решение корнер-кейсами, только показывает их не сразу, а после прохождения простых кейсов, но всё же даёт их если мы забудем. А на интервью, на обоих АА и АС кандидат должен сам их найти. Поэтому, при подготовке на литкоде, перед сабмитом решения тренируемся самостоятельно подумать о возможно непредусмотренных корнер-кейсах.
Примеры задач для подготовки составляют главное различие между секциями. Для АА их не счесть, а для новой секции их нет. Я не буду сливать задачу которая досталась мне на секции, но приведу в пример задачу, которая мне кажется самой похожей на неё. Оригинальную постановку задачи можно посмотреть на hackerrank. Адаптируя её под формат Advanced code, мы получили бы от интервьюера такой текст задачи:
Разработайте класс, реализующий буфер текстового редактора. Класс должен предоставлять методы:
добавления строки s в конец буфера
удаления n последних символов из буфера
отмены последней операции
вывода текста всего буфера
вывод последнего символа буфера
В задаче hackerrank есть уточнение, что операция отмены отменяет операции кроме операций отмены, и смотря на примеры мы видим, что отмену не надо запоминать в истории. В секции же Яндекса примеров не будет, а формулировка задачи будет содержать пробелы для уточнения у интервьюера, например насчёт нюанса с отменой отмены.
План решения задачи довольно прост:
Смотрим на требования, согласовываем с интервьюером набор публичных методов.
Поскольку конечная цель секции - выполняющиеся автотесты, а на старте нам надо проговорить сценарии использования класса - пишем автотесты. Для начала один позитивный тест, и на дополнительный бал обсуждаем поведение при не очень корректных действиях, как в этом примере “отмена если отменять нечего”.
Реализуем наш класс, следим чтобы интервьюер не заснул, периодически озвучивая текущий прогресс и решаемую в данный момент подзадачу. Типовые операции и всё что вы привыкли гуглить - гуглим, интервьюеру должен быть расшарен весь Ваш экран, а не только IDE, чтобы видеть все ваши действия.
Запускаем тесты, фиксим до прохождения. Я бы дал дополнительный балл за прохождение тестов с первого раза. Поэтому, если есть время и силы проверяем код глазами.
You Are Awesome!
Для сравнения, план решения задачи с секции АА:
Понять задачу
Написать пример входных и выходных данных, описать корнер-кейсы
Озвучить возможные алгоритмы, договориться интервьюером какой реализовывать
Реализовать псевдокод
Прогнать тесты и продебажить код в голове
You Are Awesome!
Личная история
Я получал оффер от Яндекса во время, когда не искал работу. Хотел доделать текущий проект, о чём честно говорил интервьюером, но мы всё же пообщались и дошли до оффера. В течение следующих двух лет отвечал рекрутёрам из Яндекса на их вопросы, что хотел бы пообщаться, когда буду иметь твёрдое намерение идти к ним работать. Когда этот момент настал, я связался с рекрутёрами, мне объяснили, что секции надо перепроходить, что формат изменился и добавилась новая секция Advanced Code. Я попросил поставить секцию на следующую неделю, чтобы иметь время на подготовку. Сел готовиться, но не мог понять, к чему готовиться. Попробовал попросить у кадровика пример — и внезапно получил его. Пример, по которому стало понятно что вообще ничего не понятно, и что единственный способ узнать правила секции — сходить на неё. Я поблагодарил рекрутёра и не ставил требовать более подробного описания секции, указывать на контраст в описании между АА и АС.
Я обдумывал пример, ломал голову в догадках, что же за задача будет стоять на передо мной на собеседовании. Искал примеры «приближенных к реальности» задач для лайвкод‑интервью. В общем, забивал себе голову.
Реальная секция собеседования началась с того, что интервьюер попросил расшарить ему экран с моей IDE, сказал что кадровик должен был предупредить меня об этом. А я готовился писать в онлайн-блокноте.
Затем я получил задачу, которая называлась так же, как та, что мне дал кадровик в качестве примера. Я ему сообщил что эту задачу дали мне для подготовки, но в совсем другой формулировке. Интервьюер возмутился и отвлёкся обсудить этот момент с коллегами. Ну а затем половину секции я освобождал голову от всего, что надумал за неделю подготовки по расплывчатой формулировке к по факту другой задаче. Я был зациклен на «приближенности к практике», а предо мной стояла задачка с литкода, обёрнутая в класс, которую назвали реалистичной, но грубейшими допущениями сделали из неё сюрр. Я бы не возмущался, если бы знал правила игры заранее. Вполне можно придумать отдельный вид задач рядом с литкодом, где задачи вынуждают применять ООП и использовать возможности языка. Будет натянуто, но окай, понятная цель и принятые условности.
Отдельно неприятно было оказаться в положении кандидата, который где-то раздобыл задачу с собеседования заранее. Неудобно перед кадровиком, к которой теперь будут вопросы, почему она сливает задачу. А она ничего не сливает, а в моём случае только запутала меня. И я понимаю её, потому что я наверняка не единственный, кому бросается в глаза разница между описаниям секции АА, по которой разжёвано всё, и новой АС, по которой ничего не понятно. Кандидаты просят инфу, она пытается что-то ответить.
Я думаю, это временные проблемы, пока идёт обкатка нового процесса.
Комментарии (182)
amazingname
13.02.2025 07:31Кстати, хорошая для собеса задача. Не требует алгоритмического креатива (когда надо здесь и сейчас изобрести хитрый ход для оптимизации чего-то что на первый взгляд не оптимизируемо), который стандартно умирает под стрессом у половины кандидатов. И такое не сделаешь если нет реальных навыков программирования.
Минус - час на это маловато. Не все хорошие программисты умеют быстро стучать по клавишам под стрессом и наблюдением. Кроме того, не всякий сталкивался с именно подобными задачами. А чтобы настроить мозг на незнакомую логику нужно время. В реальном текстовом редакторе все будет с одной стороны сложнее, с другой стороны всегда будет минимум день на решение задачи и поэтому тупо скорость выдачи кода не критична.
pjotar Автор
13.02.2025 07:31Работа под стрессом и при наблюдателе - это скилл и вопрос мне кажется в том, хотим ли мы как сообщество чтобы этот скилл был стандартным требованием.
FAANG задал тренд алгоритмического лайв-кодинга, и в алго-секции стресс намного больший, там вообще код надо писать в блокноте, а тут в своей IDE, комфортнее. Переход из блокнота в IDE и написание unit-тестов я считаю хороший шаг в сторону соотвествия собеса реальной работе. Лично я натренился кодить в блокноте без подстветки, ассиста, и форматирования, но не считаю что это должно быть профессиональным стандартом.
Согласен что задача специфичная и ситуация синтетическая. Но все способы собеседования ругают за слабое отношение к практике. В новом формате нужно меньше времени на подготовку, чтобы встать на равные стартовые позиции с другими кандидатами, и это хорошо. Другое дело что в эти "реалистичные" рамки из IDE и unit-тестов всё-же вставляют задачу с литкода, к начинке подготовиться за 15 минут уже не получиться. Но и времени дают целый час, а на алго-секции по полчаса на задачу
jhoag
13.02.2025 07:31На этот вопрос почти сто лет назад ответила нейропсихология. Сама ситуация экзамена помещает экзаменуемых в положение, которое нарушает их психическую деятельность — вплоть до моторики, чем противоречит своим же, экзаменационным, целям. Отменили ли где-нибудь после этого экзамены? Нет, их добавили в собеседования.
amazingname
13.02.2025 07:31Ситуация похожая на ситуацию с продолжительностью рабочего дня, когда наниматель шел по пути наименьшего сопротивления, предпочитая простую логику, что за 16 часов можно сделать больше работы чем за 8,а значит чем больше рабочий день тем лучше. А законодательное ограничение рабочего дня 8-ю часами сделало лучше всем - повысилась и производительность и мотивированность и уровень образования и много чего хорошего.
Здесь то же самое. Наниматель предпочитает простую логику, что кто может решить задачу на собесе точно не дурак, вместо того чтобы предпочитать сложную логику - что все люди разные и оценка должна быть сложной и гибкой. При этом государства переживают за дискриминацию по цвету кожи и по полу, но пока не заботится о психике людей, которые работают не хуже других, но плохо приспособлены к экзаменам.
opusmode
13.02.2025 07:31Они предпочитают единственно доступную их уровню восприятия логику.
Недельку назад, в одном чатике телеграма, топикстартер выкатил очередные принципы, где слова красивые, а смысла мало. Ну, я дал ответ, где несколько покритиковал пункты и описал, как их сделать лучше.
Один член н чата решился пообсуждать и честно говоря, общался будто с полным дураком. Ты ему говоришь, что описанные принципы работают плохо вот по этой причине и чтобы работало лучше, надо подходить к вопросу вот так, а он то какую-то конкретику требует, просто, из воздуха, то читает не то, что написано, то обвиняет в стене текста и что я ничего по делу не сказал. О, ещё успели обвинить в какой-то там пассивной агрессии.
Собственно, после этого чувак надоел и я с ним распрощался, правда и это получилось сделать со второго раза.
А ведь чел чем-то там руководит. Ну и вот чего мы хотим от человека, уровень восприятия которого ограничен длиной твита, а понимание концепций на самом примитивном уровне?
И от такие реально где-то сидят, принимают решения, считаю себя умными, крутыми, опытными и прогрессивными.
ivanuzzo
13.02.2025 07:31лично я стабильно туплю на лайв-кодинге, при том, что сразу после собеса зачастую меня осеняет ускользавшее доселе решение (но уже поздно). Можно, конечно, сказать, что это формат просто для меня сравнительно новый - раньше как-то больше тестовые делал, если уж доходило до практики, и потому не набил еще руку.
Но лично мой аргумент против лайв-кодинга: Я ТАК НЕ РАБОТАЮ. Ну т.е. я предпочитаю работать в любимой IDE, в комфортных условиях, а не когда над душой стоят 2 и более человек и смотрят, как ты пишешь код (причем нацелены они явно не на ПОМОЧЬ, а скорее на ЗАВАЛИТЬ). Я уверен, они не захотят видеть как я действительно его пишу: а я в процессе написания могу отвлечься на ютуб/на кофе/на разминку/на поиграть и так далее (и при этом задачи делаю в срок) - но сколько я видел коллег, вот так все и функционируют, в таком вот формате. Я искренне не понимаю, зачем тестировать меня (и вообще разработчика) в каких-то экстремальных условиях, почему не пойти дальше, и не провести собес среди ночи или на рассвете (можно даже мотивацию придумать, что дескать некоторые менеджеры требуют отклик 24/7) - ну или на что еще фантазии хватит?!
там вообще код надо писать в блокноте
Следующий этап эволюции - это писать код на бумажном носителе (как выражалась моя преподша, которая так и заставляла нас писать код). Потому что разработчик - это ходячая энциклопедия и должен помнить все функции и команды (нет).
Вообще, считаю тестовое задание (и дальнейшую дискуссию по нему) самым оптимальным вариантом, если бы не одно НО: профессия программиста опопсела, множество людей, далеких от программирования как искусства и ломанувшихся в сферу за баблом и всякими правдами и неправдами пытающиеся занять нишу все портят. Историй, как некий senior проходит за кого-то собесы, в инете валом.
Какой-то панацеи против опопсения я не вижу, разве что выравнять уровень зарплат. Ну либо цифровизация достигнет всех профессий и все в будущем будут в каком-то роде программистами.
P.S. я бы лично отдавал предпочтение кандидатам, у которых есть на гитхабе собственные pet-проекты, отражающие его вовлеченность.
Bardakan
13.02.2025 07:31мне тоже не нравится, но походу скоро так и будет с блокнотами (из-за chatGPT).
По поводу GitHub не согласен - может я предпочитаю для саморазивития читать теорию - те же статьи на хабре вместо того, чтобы вести какой-то узкоспециализированный pet-проект.
ivanuzzo
13.02.2025 07:31теория без практики - это зря потраченное время. Я вот недавно попытался список достижений по одному своему Rust проекту (самому проработанному, кстати) описать. Я над проектом работал более 2х лет, хотя больше конечно копий обломал, пытаясь экспериментировать, чем реально ударными темпами изучал крэйт за крэйтом. Вобщем, куцый получился список. Даже показывать стыдно. А ведь считал себя опытным разработчиком, много ведь прочитал всякого.
Поэтому, повторюсь: теория без практики, это как врач, который читал, как оказывать первую помощь, но ни разу не оказывавший оную даже тренировочному манекену. Вероятность сделать хуже (или, в лучшем случае - не сделать лучше) весьма высока.
Проблема теории в том, что нету хватки, рука не набита. Не знаешь, когда и что применять и в какой последовательности, оказавшись лицом к лицу с реальной проблемой. Сужу сугубо по себе.
Dmitry_604
13.02.2025 07:31А скорее у вас просто нет навыка описателя достижений, которые каждый класс и паттерн примененный могут в отдельный пункт выписать :)
Я думаю все у вас нормально, опыт есть опыт даже если он не сверх удачен по результату.
ivanuzzo
13.02.2025 07:31да, к сожалению, проглядывается мировая тенденция необходимости в умении себя подать. Мне так в одном фидбэке и сообщили "он должен уметь лучше себя продавать". Хотя сама постановка задачи - "продавать себя" - звучит для меня возмутительно, как-будто я не программирование, а что-то другое им предлагаю.
P.S. благодарю за добрые слова. Вообще, периодически резюмировать, а чего я достиг на том или ином поприще бывает очень полезно. В моем случае, я не столько переживаю за более чем скромный список своих достижений, сколько просто трезво оцениваю разрыв между темпом развития технологий и моим собственным темпом в попытке за ними угнаться.
ruslan_sverchkov
13.02.2025 07:31теория без практики - это зря потраченное время
Как в любой наивной эвристике, в этой куча дыр) Правильная формулировка могла бы быть такой: «в некоторых случаях теория без практики - это зря потраченное время»
ivanuzzo
13.02.2025 07:31погуглив, что означает слово "эвристика" - не понял, что вы хотели сказать в данном контексте, его применив.
я привел пример, почему теория без практики может быть пагубна. Однако, да, плюсы в чистой теории тоже есть: язык почесать и смутить неискушенного собеседника своей эрудицией, так сказать, самоутвердиться за счет аудитории. Какие вы еще можете назвать плюсы от голой теории ?
к стоматологу-теоретику я бы лечиться не пошел, какой бы он ни был начитанный. А вы ? Этот же мой подход касается любой другой профессии.
ruslan_sverchkov
13.02.2025 07:31не понял, что вы хотели сказать в данном контексте, его применив
эвристика это примитивный рецепт для решения очень сложных проблем, когда нет физической возможности провести нормальный анализ потому что он займет время до тепловой смерти вселенной. Некоторые эвристики работают хорошо, другие - плохо, проблема с ними в том что нельзя сказать заранее, какие есть какие
я хотел сказать что на самом деле вы не знаете, является ли теория без практики зря потраченным временем, бы обобщили свой опыт, но в реальности он покрывает крохотное количество кейсов, поэтому к утверждению можно сходу придумать десятки контр-примеров
Какие вы еще можете назвать плюсы от голой теории ?
Плюсы от голой теории такие же, как от базы знаний - столкнувшись с проблемой, вы знаете хотя бы что гуглить и в какую сторону копать, а также какие вещи проверять в принципе бессмысленно. На самом деле я уверен что если вы немного поразмыслите то найдете у себя огромное количество теоретических знаний разной степени абстрактности, которые вы на практике не проверяли.
к стоматологу-теоретику я бы лечиться не пошел, какой бы он ни был начитанный. А вы ? Этот же мой подход касается любой другой профессии.
У стоматолога есть куча теоретических знаний, которые он не проверял на практике, то же касается любой другой профессии)
То что человек хочет тратить время на теорию не означает ведь, что у него вообще никакой практики никогда не было и не будет)
ivanuzzo
13.02.2025 07:31эвристика это примитивный рецепт для решения очень сложных проблем, когда нет физической возможности провести нормальный анализ потому что он займет время до тепловой смерти вселенной. Некоторые эвристики работают хорошо, другие - плохо, проблема с ними в том что нельзя сказать заранее, какие есть какие
все-равно непонятно, причем тут эвристика и как это применимо к контексту нашей с вами беседы
я хотел сказать что на самом деле вы не знаете, является ли теория без практики зря потраченным временем, бы обобщили свой опыт, но в реальности он покрывает крохотное количество кейсов, поэтому к утверждению можно сходу придумать десятки контр-примеров
вот если бы вы так изначально сказали - было бы гораздо понятнее.
Плюсы от голой теории такие же, как от базы знаний - столкнувшись с проблемой, вы знаете хотя бы что гуглить и в какую сторону копать, а также какие вещи проверять в принципе бессмысленно.
нет, это не помогает гуглить. Голая теория - это просто неупорядоченная груда информации. Упорядоченной ее делает практика. Умение гуглить не зависит от теоретических знаний, это скорее навык правильно задавать вопросы.
поэтому повторюсь: без навыка и без практики любая теория - это просто неупорядоченная груда информации.
На самом деле я уверен что если вы немного поразмыслите то найдете у себя огромное количество теоретических знаний разной степени абстрактности, которые вы на практике не проверяли.
на практике не проверяли - скорее, не использовали по назначению. У меня действительно есть некоторое количество "теоретических знаний" (хотя я бы не стал называть это "знанием") и я это использую для оттачивания навыка словоблудия. То, что я никогда не использовал или перестал использовать - частично или полностью забыто.
и я считаю, что это справедливо для каждого человека. Любая теория, не используемая по назначению, в итоге служит сугубо для обмена мнениями между диванными теоретиками.
То что человек хочет тратить время на теорию не означает ведь, что у него вообще никакой практики никогда не было и не будет)
а я и не утверждал такого.
резюмирую: теория - это общее, практика - это переход от общего к частному. В вашем комментарии не было ни одного конкретного примера, были общие слова, что только подтверждает мой тезис - как тяжело перейти от теории к практике и какой на деле небольшой может быть выхлоп в итоге (это я намекаю на список своих достижений по проекту, если что).
Keeper11
Больше секций богу секций!
venanen
У меня собес в Яндекс шел 3 месяца, и состоял, если верно помню, из 15 этапов, или около того. Где-то уже на 5 мне надоело, но было интересно, когда кончится, а на 10 я начал насильно причинять себе удовольствие. А это было не сложно, потому что когда тимлид продуктовой команды яндекса рассказывает об атмосфере стартапа в команде, и что главная цель сотрудников - зарабатывать деньги Яндексу. В конце на 12 этапе я нашел, что в зуме есть маски и можно камеру вращать, так и сидел с повернутой камерой под 90 градусов и с монобровью и усами :). А последний этап я решил провести отвечая честно - это вообще получилось шедеврально, собеседование в формате:
-А почему вы хотите так сильно работать в Яндексе?
-А я и не хочу особо.
Или
-Какая у вас главная мотивация в работе у нас?
-Деньги, какая же еще.
Одним словом, цитируя hr - "на последнем этапе мэтча не случилось". Одним словом, если вам скучно моментами и вас уже ничего не веселит - советую сходить. Ощущения незабываемые, как на хорошем стендапе %)
teamfighter
Тоже недавно мурыжили по разным командам, суммарно около 15 собеседований было, 2 секции кода, встречи с тимлидами, менеджерами, архитектором, хз ещё кем. Собеседования проходили с сентября по январь. В итоге вакансию на которую меня собесили не согласовали со слов руководителя, а двум другим командам я не понравился - одной технически (хотя о технике на встрече с ними мы ни разу не пообщались), а второй нужен был человек в офис.
Так и не понял что это было, ощущения незабываемые. В Яндекс больше собеситься не пойду даже за деньги.
Dmitry_604
Яндекс, как можно так не ценить время своих текущих сотрудников, и будущих сотрудников?
Shiaju
"Вы просто не целевая аудитория" (тм)
Dmitry_604
А сотрудники самого яндекса - целевая? Интересно как они относятся к постоянному отвлечению на собесы?
Curious_Vik
За это даётся плюсик на ревью
Keeper11
Тайна раскрыта. KPI по количеству этапов.
doctorw
С таким подходом, в какой-то момент можно выяснить, что твоя целевая аудитория — никто.
uuger
так бывает, когда внезапно пропадает необходимость конкурировать с настоящим бигтехом
TheOldGrouch
Легко(С) /s
Bardakan
у меня было не 15 этапов, а 3 или 4. Они хотели много собеседований - я сделал то, чего они хотят с одной оговоркой. Я к каждому техническому собесу готовился как к экзамену, а экзамены чаще, чем раз в 3 дня не ставят. Где-то в конце не я, а уже меня спрашивали, нельзя ли побыстрее)
iMiKED
Однако, у вас много свободного времени, чтобы каждые 3 дня сдавать экзамены)
Bardakan
я увольнялся с предыдущего места работы и в последний месяц взял отпуск.
falcon4fun
Оффтоп: тьфу ты, эта память на ненужную информацию: твое лицо, когда начинаешь узнавать людей по никам с других форумов, на которых активно не сидишь.
Думал, показалось. Сходил на 4пда проверил.