Привет, меня зовут Ваня Емельянов, я руковожу разработкой видеохостинга Дзена и провожу собеседования в свою команду.

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

Как проходят технические интервью в Дзене для бэкенд‑разработчиков

И если кандидат успешно с ним справился, это еще не значит, что он будет успешно решать рабочие задачи — но об этом чуть ниже :)
И если кандидат успешно с ним справился, это еще не значит, что он будет успешно решать рабочие задачи — но об этом чуть ниже :)

Первый этап — Whiteboard Interview (более известный как «алгоритмическое интервью»). Кандидат решает две задачи на программирование простого и среднего уровня в онлайн-редакторе. Интервьюеры оценивают сложность получившегося алгоритма и задают каверзные и не очень вопросы.

Исторически в Дзене было два алгоритмических интервью — с разными задачами и интервьюерами. Это исключало субъективизм с нашей стороны и позволяло проверить умение кандидата построить рабочее решение из базовых структур и способность самостоятельно находить и исправлять баги. 

Звучит неплохо, но у всего есть узкие места. Например, Whiteboard Interview не проверяет опыт и навыки решения рабочих задач. С его помощью мы можем оценить только умение преобразовывать алгоритм в рабочий код — как хорошо кандидат знает стандартные алгоритмы/структуры данных и может быстро собрать из того, что есть, готовое решение. 

Тем не менее, это хороший инструмент для своих задач — совсем отказываться от алгоритмического интервью мы не хотели, но по обратной связи поняли, что надо что-то менять. И поменяли: заменили одно алгоритмическое интервью на Production Code. На этом этапе кандидат решает реальные задачи, которые когда-то были или есть в Дзене прямо сейчас.

Очевидно, что из этого масштабнее и увлекательнее
Очевидно, что из этого масштабнее и увлекательнее

Например, мы можем попросить кандидата:

  • реализовать API транзакции над базой данных и над внешним сервисом, который может возвращать ошибку;

  • написать код для сервиса по раздаче счетчика просмотров с высокой нагрузкой;

  • реализовать простой сервис для работы с оповещениями;

  • реализовать агрегацию определенных данных по потоку событий;

  • написать рабочие тесты на свой код и так далее.

Что же нам дал Production Code?

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

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

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

Еще у нас появился четкий регламент прохождения интервью и понятные критерии оценки по знанию:

  • языка программирования (Java, C++);

  • базовых алгоритмов;

  • баз данных и интерфейсов взаимодействия с ними;

  • инструментам IDE (хоткеи, авто-рефакторинг);

  • устройства многопоточных приложений;

  • тестирования и так далее.

Интересный вариант, вначале немного растерялся, но в целом подход очень показательный для интервьюера с точки зрения оценки навыков собеседуемого. На ходу приходится придумывать рабочее решение, которое может иметь большое количество разных подходов. Со своей стороны я могу сказать, что мог показать лучший результат, но прошло как прошло ????

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

Итак, с мая по сентябрь полет успешный — мы собрали отзывы и увидели, что процесс стал более понятным и прозрачным для обеих сторон. Новые задания получились с вызовом и близкими к реальности, а конверсия в найме даже увеличилась, более 50% кандидатов успешно прошли новый формат интервью. Точно оставляем этот этап и уже думаем, как масштабировать его на другие технические направления Дзена.

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

Если вы проходили собеседование в Дзен или задумались об этом и хотите поделиться обратной связью по процессу уже сейчас, будем рады поболтать в комментариях!

Комментарии (17)


  1. s207883
    20.09.2023 14:35
    +27

    То есть, до вас только сейчас дошло, что навык решения алгоритмических задач показывает только навык решения алгоритмических задач?


    1. avost
      20.09.2023 14:35
      +6

      Ну, вообще-то, программирование - это и есть по сути оперирование данными с помощью алгоритмов :), поэтому, работник не обладающий навыками за владение которыми платят деньги, никому не нужен.

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


      1. s207883
        20.09.2023 14:35
        +8

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

        Недавно, один упорно упоротый человек на хабре проходил кучу алгоритмических собесов в Яндекс, а толку? Была слита в унитаз куча человеко-часов, причем, весьма дорогостоящих, а выяснили лишь то, что человек умеет обходить массивы.

        Почему вместо всей этой фигни просто не предложить ему в уме прикинуть, как бы он сделал Х. А если добавить условие У? И у нас еще вот такая Z особенность есть. Не забудьте учесть еще вот такие-то параметры. И все. Ты понимаешь, как человек мыслит и мыслит ли вообще и реальный ли у него опыт (задачу можно основывать как на вашей специфике, так и на резюме кандидата).


        1. avost
          20.09.2023 14:35
          +1

          другое - заучивать виды сортировок

          ох, ох, ох, опять эти пресловутые страшилки сортировками. Вот скажите, положа руку на сердце - вас хоть раз на собеседовании просили придумать алгоритм сортировки? Меня, чёт, ни разу. Я даже видел живого человека, которого спрашивали почему люки круглые, но живого человека с сортировками не видел ни разу.

          а на настоящей работе просто вращаешь json-ы.

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

          Недавно, один упорно упоротый человек на хабре проходил кучу алгоритмических собесов в Яндекс, а толку?

          Да, бросьте. Алгосекция в Яндексе - это чуть выше лёгкого и ниже среднего уровня литкода. Пройти их как нефиг делать. Причём человеку не задрачивающему себя литкодами. Ещё встречал алгосекцию в Тинькоффе - там уровень соответствует лёгкому в литкоде. Если кто-то, как вы говорите, действительно упарывался и действительно решал задачи в литкоде, то я не знаю как должны сойтись звёзды, чтобы не пройти эту фигню. Я за всю жизнь на литкоде решил пару изи задач и штук пять средних чисто чтобы узнать что вообще такое этот литкод. Дальше наскучило. Институт с алгоритмами заканчивал чёрт-те-когда, да и не по алгоритмам. Поэтому, для меня алгосекции немного лоттерейны - задачи на динамическое программирование я вообще не решу ни в каком, тк в универе мы их либо не проходили либо они иначе назывались, с задачами на графы буду долго париться, тк графы изучал только с теоретико-математической точки зрения. Ну, да, попадётся ДП - скажу - звиняй брат, бананьев нема. Попадётся граф - что получится, то уж получится. Ну, какие проблемы? Собес - всегда лоттерея. Сравнительно сложное пограммирование было с Хуавеем - там была сначала обычная алгосекция, а потом в беседе с другим чуваком мы куда-то упоролись в дебри многопоточки и примитивов синхронизации. Сейчас я всё позабывал и слился бы где-то в начале, а тогда мы довольно глубоко забрались :).

          а выяснили лишь то, что человек умеет обходить массивы.

          По-моему, это хороший повод отказать. Если человек ДАЖЕ массив не умеет обойти, то ему не стоит доверять и перекладывание джейсонов. А вдруг, там массив пришлют? А человек их даже обходить не умеет.

          Была слита в унитаз куча человеко-часов, причем, весьма дорогостоящих

          Вот это действительно жаль, что человек с таким низким уровнем морочил голову дорогостоящим специалистам.

          Почему вместо всей этой фигни просто не предложить ему в уме прикинуть, как бы он сделал Х. А если добавить условие У? И у нас еще вот такая Z особенность есть.

          А тут несколько ответов:

          1. Потому что для входного фильтра это избыточно и требует привлечения ЕЩЁ более дорогостоящих специалистов. Напомню мой тезис - алгосекции НЕ для того, чтобы взять тех, кто умеет их проходить, а частично отсечь балбесов, частично "неудачников" - в этом месте, да, лотерея, но она так или иначе будет при наличии более одного кандидата на вакантное место. Тут законодательство формально требует дать обоснованный отказ и при подбрасывании монеты обоснованного отказа не будет, а при проваленной алгосекции будет.

          2. Такая секция тоже есть, называется "Архитектурная секция". Но, поскольку, она, как уже говорилось, требует для проведения более дорогостоящего специалиста, добираются до неё не все - большинство вылетает на предыдущих.

          3. Система несовершенна, но более совершенная система существенно более ресурсоёмка. И уж точно не стоит тратить время ещё более дорогостоящего специалиста на то чтобы узнать, что кандидат "всего лишь" не может обойти массив(!).

          Поэтому, нет, конечно же собеседующие не полные балбесы не понимающие в чём проблемы алгосекции :). Всё они прекрасно понимают. Как я и говорил в предыдущем комменте, причина её наличия - необходимость жёсткого фильтра для хоть какого-то отсеивания 99% претендентов-балбесов (ну, и немного небалбесов, а просто недостаточно мотивированных :) ). Поток большой - ставим фильтр. А когда у Дзена входящий поток иссяк, тогда они и ослабили/убрали фильтр. Всё логично.

          Ну, просто поставьте себя на место собеседующего - к вам приходит ежедневно десяток кандидатов, с каждым вы должны провести "как бы он сделал Х. А если добавить условие У?" - архитектурную, по сути, секцию, а у вас только 8 рабочих часов. Спихнуть архитектурную секцию на джунов-миддлов вы не можете и сами должны быть сеньором-техлидом-архитектом (и у вас ещё своя работа же есть). А вот алгосекцию спихнуть можете - там всё довольно формально. Вот и получается так. Но это для больших. Для мелкой компании, в которую наоборот надо с огнём кандидата искать, можно раз в месяц и про "как бы он сделал Х. А если добавить условие У?" поговорить. Ну, и для кандидата тут тоже плюс - если компания мелкая и кандидатов не очередь, а начинают мороку с алгосекциями - это флажок, что в компании не понимают зачем они это делают и это хороший повод не связываться с ними.

          И немного совсем недавних реалий - из десятка пройденных свежих собеседований алгосекция была у одной(!). Это был Тинькофф. Уровень - вери изи. Ещё в одном месте какую-то ерундень покодировал ("алгоритм" был уровня перекладывания джейсонов) и в одном "поревьюил" кусок мерзкого кода :). Остальное был трёп за жизнь и за технологии :) Так что всё не так и плохо в действительности. Ну, а в Яндекс - в Яндекс, да, желающих слишком много, поэтому правила игры там вот такие, какие есть.


          1. Leetc0deMonkey
            20.09.2023 14:35
            +1

            Поэтому, для меня алгосекции немного лоттерейны

            Не "немного", а чуть менее чем полностью даже для подготовившихся. Так зачем тогда вообще заниматься этой хернёй. Давайте просто объявим приём заявок и розыгрыш лотереи. И мороки меньше, и diversity настоящая. Если человеку туго заходит алгоритм Декстры, это не значит что он тупой. Это значит что он "так себе" в таких задачах, но наверняка силён в других.


          1. s207883
            20.09.2023 14:35
            +1

            Тогда, возрадуйтесь, перед вами человек, которого таки спрашивали алгоритмы, в том числе и сортировок. Компания, которая это спрашивала, никаким роткетсайнсом не занималась и это тем более был не Яндекс.

            Как говорится, "все профессии нужны, все профессии важны", в том числе нужны и жсоновращатели, так что нет ничего странного в том, чтобы туда идти. Зачем идти туда на работу? Человек обычно хочец кушац и обменивать свою способность к труду на деньги. И да, даже на такие работы пришел этот рак в виде алгоритмов. Этот мем намного ближе к правде, чем кажется.

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

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

            Только вот алгоритмы совсем не уберегут от балбеса. Я думаю, мне бы хватило минут 15 поговорить по телефону с человеком, чтобы решить, нужно ли с ним взаимодействовать дальше. Если он не может пройтись по массиву, то и не ответит на более заковыристые вопросы. И я сейчас не говорю о задротстве в виде тонкостей работы какого редкого функционала.

            Вы все говорите о большом потоке. Но зачем нам вообще обрабатывать его целиком? Всех неадекватов и мимокрокодилов отсеет ещё hr. Из оставшихся, бери людей с похожим стеком, опроси по телефону и пригласи поболтать уже более предметно тех, кто не совсем кран. Нашел специалиста без маразма, с подходящими навыками и вписывающегося в бюджет? Хватай и беги. Набор можно поставить на паузу. Навичок сохранил человеческий облик и вписался в команду за время испытательного срока? Вот и коллега.

            Нет ничего плохого в том, чтобы с ноги ворваться в созвон и спросить, как бы человек сделал Х. Если он начинает нести пургу, даёшь ему ее донести, рассказываешь об условиях работы и "мы вам перезвоним". Даже оторвать меня на пол часа(в случае пурги, даже меньше) от работы будет дешевле, чем заставить обезьянок проводить несколько раундов алгоритмов.


          1. 40kTons
            20.09.2023 14:35

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

            И немного совсем недавних реалий - из десятка пройденных свежих собеседований алгосекция была у одной(!). Это был Тинькофф. Уровень - вери изи. Ещё в одном месте какую-то ерундень покодировал ("алгоритм" был уровня перекладывания джейсонов)

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


        1. nikis05
          20.09.2023 14:35

          Почему вместо всей этой фигни просто не предложить ему в уме прикинуть, как бы он сделал Х

          Это ж интервьюеру придется думать, вникать, слушать, поддерживать разговор. А тут дал задачки из интернета, поставил баллы и все. Еще и можно ощутить чувство собственного превосходства, подловив человека на незнании O-нотации для алгоритма сортировки кандибобриком (про который ты сам узнал вчера пока готовил вопросы для интервью).

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


      1. trueMoRoZ
        20.09.2023 14:35
        +3

        А зачем проводить кучу собесов, которые будут отсеивать по не самым важным критериям, когда можно выделить действительно важные критерии и по ним провести небольшое количество собесов? Чтобы hr'ам была работа? Чтобы был пафос трудоустройства в Яндекс? Что бы что?


        1. avost
          20.09.2023 14:35

          Ну, я же написал почему - потому что количество желающих слишком велико и тратить на них весь ресурс наиболее ценных (во всех смыслах) специалистов неразумно.
          Когда одно-два собеседование в неделю это осмысленно. Когда несколько в день - нет.
          А почему, кстати, обход массива вы считаете не самым важным критерием?

          Ну, и hr-ы то здесь причём? У них другая работа. Кстати, функция hr-ов в яндексе сломана. Они там сильно про resources и почти совсем не про human.


    1. Leetc0deMonkey
      20.09.2023 14:35

      То есть, до вас только сейчас дошло, что навык решения алгоритмических задач показывает только навык решения алгоритмических задач?

      Хорошо хоть до этих дошло. А то ведь до остальных совсем не доходит. И потом ещё имеют наглость выть о "дефиците специалистов".


  1. T-D-K
    20.09.2023 14:35
    +1

    Когда в 2020 году проходил собеседование в Яндекс.Дзен, то одной из секций было написание таск шедулера на неком пуле потоков в ide за ноутбуком в присутствии двух интервьюеров.
    История циклична.


  1. Wrench_IT
    20.09.2023 14:35
    +6

    Имхо, собеседования на middle и выше должны включать только вопросы по проектам и решение прикладных задач, а все остальное - это уже формат джунов (да и то совсем зеленых, если у джуна уже имеется какой-то вменяемый опыт, его также стоит интервьировать в прикладной сфере). А то вот есть одна замечательная компания, в которой тоже очень любят алгоритмы спрашивать, так у них полмесяца нельзя было отчет по трафику на сайт скачать в формате pdf, хотя "разработчики знали о проблеме и усердно работали над ее устранением". Я даже не сомневаюсь, что ошибка обрабатывалась за честные O(1), но от этого было как-то не легче.


    1. forthuse
      20.09.2023 14:35
      +1

      Да, "Розовые Пони" есть в головах делающих интервьюрование, а понимание сложнoстей/нетривиальностей решения текущих/реальных задач в их оценку компетенции не входит (хотя это как бы подразумевает)


      P.S. Вот сколько таких принятых кандидатов посыпались, если не были прикрыты кем то по результатам их работы? (кто то далее, вероятно, стал адекватным разработчиком с позиции Джуна :)


    1. vics001
      20.09.2023 14:35

      А алгоритмы senior писать не будут? Не знание базы - структуры данных, алгоритмов я вижу как проблему текущих "senior" (те кто сейчас только получил опыт 5 лет), такое ощущение что надо держать отдельных senior 10+ лет или отбирать 10%.

      А все потому, что большинство этих 5 лет опыта, отдается 1-5 технологиям программирования, а сложные задачи скидываются на других опытных членов команды. Технологии важны, но база важна тоже.

      На собеседовании базы параллельных алгоритмов никто толком не знает, зато все имеют опыт 5 лет запустить что-то как-то параллельно пусть даже и с багами.


  1. Vanirn
    20.09.2023 14:35
    +1

    Наконец то! Хоть кто-то додумался до адекватных задач на собеседование программистов!


  1. freylis
    20.09.2023 14:35

    Где-то сейчас загрустили сотни интервьюеров, которые многие годы с удовольствием хватали себе в компании ребят, основываясь на умении выполнять именно их задачи