Бесконечно можно смотреть на три вещи: воду, огонь и очередную историю про айтишные собеседования. Все этим грешим, и я настроился, наконец, перебраться из читателей в когорту писателей. Задумывая эту статью, я ставил своей целью поделиться опытом прохождения собеседований по разным направлениям и в разные карьерные периоды. И, что тоже важно, своим отношением к ним.
Коротко о себе: по образованию и основной работе я специалист по ML / DL / NLP / AI и всякому прочему дата сайнсу. Неплохо пишу код на Python (даже есть свой курс), когда-то много занимался разработкой на C++ и Java, в определённый период жизни активно создавал web-приложения на React. Началом карьеры считаю свои первые подработки у научного руководителя (разработка библиотеки BigARTM), это 2014 год. С того времени успел поработать в Яндексе, Сбере, Альфе, Just AI, Samokat.tech, поучаствовать в паре стартапов и нескольких side-проектах. И, конечно, побывать на куче разнообразных собеседований, о чём и хочу поговорить ниже. Для того чтобы материал был интересен читателям на разных стадиях отчаяния карьерного трека, я сделаю некоторую ретроспективу, и разобью историю на три периода, а после напишу общие наблюдения и выводы.
Отмечу сразу, что статья не про то, «как вкатиться в IT», а про собеседования и взаимоотношения с ними. Вставки моей биографии присутствуют для понимания контекста, а не в качестве инструкции. Поэтому и описываемые проблемы, и выводы видятся мне полезными для широкого круга IT-специалистов, а не только для DS / ML.
Период 1: поиск первой работы
Как и многие студенты технических специальностей, я планировал после первых курсов трудоустроиться и начать нарабатывать опыт и искать практическое применение хоть чему-то из многочисленных университетских предметов. Учиться приходилось много, я три года почти не вылезал из-за учебников и ноутбука, но это дало свои плоды: возможности для старта карьеры в таком случае повыше, чем у среднестатистического человека с улицы. Это всевозможные стажировки в технологических гигантах внутри страны и за рубежом, научная работа, подработки в небольших компаниях и стартапах. В то время у широкой аудитории ещё не было нынешнего повального интереса к IT, не стали такими популярными курсы, и джун мог вкатиться в рынок относительно беспроблемно (хотя студенты и выпускники топовых технических ВУЗов и сейчас начинают карьеру без больших сложностей).
Благодаря упорному труду и большому везению мне удалось попасть на одну из лучших кафедр факультета к очень крутому научному руководителю и удачно выбрать направление совместной работы с ним. Это определило мой путь, я пошёл в индустрию через науку. Весь 4-й курс я не только делал свою бакалаврскую работу и изучал ML и Matlab на кафедре, но и прокачивал скиллы разработки на C++ под руководством своего коллеги, бывшего аспиранта моего научника и разработчика в Microsoft. Параллельно сам сел осваивать Python (нам нужны были биндинги для библиотеки, и я решил, что это неплохой повод поизучать новый язык).
В результате, когда в начале магистратуры я решил попробовать себя в индустрии, моё резюме было хоть и блеклым, но всё же не пустым. Скрепя сердце, я выложил его на HH и стал ждать откликов.
И они были: сперва мне позвонил какой-то парень и предложил поработать питонистом в его проекте, затем мы договорились о созвоне с Align Technology на позицию C++ разработчика. Я был окрылён, но радость оказалась недолгой. По первой позиции мы созвонились разок, и я быстро потерял к ней интерес — это была неофициальная подработка с непонятными перспективами оплаты. А собеседование с Align Technology я завалил: первая часть была посвящена несложным вопросам про язык, с которыми проблем не возникло, а во второй пошли задачи по линейной алгебре и интегралам по контуру, и вот там я спасовал, не умею решать такие вещи в уме и по телефону.
ML-тусовка и сейчас не сказать, чтобы необъятная, я постоянно натыкаюсь в разных компаниях на своих бывших коллег, однокурсников или студентов, а тогда она была ещё уже. Так что я решил поискать что-то интересное по знакомым. Тогда было популярно подразделение Yandex Data Factory, много моих знакомых работало там, и я решил попробовать. Это было моё первое собеседование по основной специальности, было страшно, и я, ожидаемо, провалил его. Меня срезали на плохом понимании статистических критериев и выводе формул лог-регрессии (а ещё, кажется, я зря требовал гибридный график в 2015 году). Было обидно, но не сильно: я ожидал ещё более плохого результата. Главное, в моей голове появились, наконец, связи, между тем, чему нас учат, и тем, что нужно в компании.
Через пару месяцев на меня сами вышли рекрутеры поиска Яндекса и предложили пособеседоваться на разработчика-джуна. Естественно, я согласился, и это было моё первое «взрослое» собеседование: 6 часовых интервью, на общую логику и соображалку, на ML, три на алгоритмы и C++ и финал. Я плохо их помню, но вопросы были стандартные, типа «как устроен бустинг», как «работают умные указатели» или «напиши структуру дерева и его обход». Было страшно, иногда я тупил (иногда сильно тупил), но в целом справился и работу получил.
Вот так, если коротко, я вошёл в индустрию. Не так быстро и успешно, как некоторые мои однокурсники, но и не слишком поздно (знаю несколько примеров, когда люди в конце аспирантуры только задумывались о том, где бы найти первую работу).
Период 2: выход из зоны комфорта
Следующий этап наступил в середине 2017: к завершению магистратуры я решил приурочить смену работы. Яндекс был моим первым серьёзным работодателем, и я на себе прочувствовал несколько теперь уже совершенно очевидных вещей, которые стоит учитывать всем начинающим специалистам:
когда работа не идёт нормально — совсем не факт, что это только твоя вина: не всё в моей деятельности в Поиске шло гладко, объективно были косяки и с моей стороны, и со стороны руководства и менеджмента, но я тогда другого не видел, и во всех проблемах был склонен винить себя. Отсюда жёсткая эмоциональная нагрузка и ощущение собственной некомпетентности, от которых я потом долго избавлялся
комфортный офис и прочие плюшки — это хорошо, но не критично: ни в одной компании после Яндекса я не сталкивался с таким количеством приятных бонусов (крутой ДМС, очень уютный офис, компенсация питания и вкусная столовая, массажи и прочее). Это создаёт зону комфорта, из которой очень страшно выходить, особенно, когда ты не знаешь, что бывает за её пределами. Но попробовать стоит
Решение уйти далось мне тяжело, из-за описанных выше причин я побоялся пробовать что-то совсем новое и попросился в Дзен на ML-инженера на Java (там тоже работало много моих знакомых по университету). Это был перевод, так что ограничились всего двумя секциями: код с алгоритмами и ML. Java я не знал, но меня были готовы принять со знанием C++, и тут проявилась позитивная сторона работы в Поиске: нигде в России не пишут код так продуманно и эффективно и не продумывают архитектуру так тщательно, как в core подразделениях Яндекса. Как следствие, я незаметно для себя набрал экспертизу, которая помогает мне до сих пор. Так что с алгоритмами я разобрался, с ML было чуть сложнее, пришлось хорошо погрузиться в новую для меня тему рекомендательных систем и понервничать на интервью, но и тут всё сложилось, я пошёл работать в Дзен, скоро стал мидлом и трудился там ещё полтора года.
Дальше до середины 21-го с точки зрения собеседований было затишье: после Дзена в 2019 меня позвали лидом и разработчиком в один стартап, с началом пандемии он завершил свою деятельность, и мы с парой коллег оттуда решили сделать свою компанию. Там было много всякого интересного и в продуктовой, и в проектной разработке, приходилось совмещать роли DS и фулл-стека, быть тим-лидом, осваивать постоянно что-то новое, участвовать в хакатонах и конкурсах, онбордить бизнес и изучать рынки.
Единственное собеседование, которое я проходил в этот период — в McKinsey. Я много слышал о работе в стратегическом консалтинге и не испытывал никакого желания в это ввязываться, но мне всегда был интересен отбор к ним. Было два интервью на ML и аналитику, которые я завалил, но не потому, что плохо разбирался в отрасли (в целом, я ответил почти на все вопросы и разобрал все кейсы), а потому, что они просекли моё отсутствие заинтересованности. Там нужно гореть работой, это не менее важно, чем твои навыки.
Период 3: конвейер
К середине 2021 меня начал донимать другой постоянный спутник труженика в IT — синдром самозванца. Два года я уже не работал в крупных компаниях, мир стремительно меняется, мои знания (как мне казалось) уже давно устарели. Настроение портилось, стало понятно, что нужно что-то делать. Стартапные дела шли не супер активно, и у меня появилась мысль снова выйти на full-time, а значит, нужно опять собеседоваться. И это вызвало страх.
Из своего опыта и опыта коллег и друзей, я могу точно сказать, что такой период бывает если не у всех, то у очень многих работников отрасли, причем неоднократно. И худшее, что можно сделать в подобной ситуации — не делать ничего. С другой стороны, идти и получать постоянные отказы из-за проваленных секций тоже не очень приятно (и даже опасно — можно потерять веру в себя, видел такое у своего товарища). Отсюда решение: структурно поискать все свои пробелы в знаниях, дополнительно посмотреть требования в вакансиях, позаниматься, заполнить эти пробелы, составить новое резюме, и уже с этим выходить на рынок.
Спасибо университету, учиться он меня научил, так что в течение нескольких недель я погрузился в статьи по современному NLP, статистике, линейной алгебре и классическому ML. Исчёркал несколько тетрадей, написал кучу тренировочного кода, сделал описание своих прошлых проектов и, наконец, выложил своё резюме на всё тот же HH.
Тогда же я осознал, что собеседования — слишком важные в профессиональном плане явления, подходить к ним нужно более системно. И начал вести таблицу со всей информацией о них: какие компании, какие вопросы, что я отвечал. Изначально это было задумано для того, чтобы фиксировать и исправлять свои ошибки, но потом я понял, что по этим данным можно сделать некоторый анализ того, кто, что и как спрашивает на рынке по моей специальности.
Ещё было принято решение собеседоваться постоянно. До этого я часто отвергал приходящих ко мне рекрутёров с внутренней формулировкой «мне и тут нормально, зачем дёргаться, собеседование требует подготовки, это стресс, и вообще я лучше пойду поем/погуляю/посмотрю фильм/попишу диссер». В новой парадигме я запретил себе отказываться от собеседований (кроме совсем уж нерелевантных или странных предложений).
В итоге, когда я снова вышел на рынок труда и начал общаться с компаниями, то оказалось, что страх был лишним (не так уж я и отстал), а осторожность верной (благодаря своим последним разборам и повторениям, а также структуризации своего опыта на секциях я чувствовал себя комфортно). Выше в тексте я рассказывал что-то почти про все интервью, которые проходил, дальше так не получится — процесс собеседований был поставлен на поток, и ниже я приведу несколько фактов на основе анализа их результатов за последние 2.5 года:
18 собеседований в 14 компаний (как правило, волнами, 2-3 раза в год)
8 предложений уровня Team Lead / Tech Lead, 10 — уровня Senior / Lead специалист
9 офферов / 1 явный отказ работодателя / 2 раза отказался я, пройдя почти всё / 6 раз работодатель пропал на каком-то этапе после вполне успешных секций
в рамках 18 собеседований было 42 секции (без учёта просто знакомств с рекрутёрами)
так получилось, что из 42 секций только 2 были на английском
Грубо говоря, success rate 50%, что для воронки собеседований выглядит неплохо. Процентов 40 секций связаны NLP и ML, несколько было кодовых и скрининговых, остальное — многочисленные менеджерские, продуктовые, ML-дизайны и финалы.
Немного рассуждений
По прошествии лет моё восприятие собеседований сильно трансформировалось. Из категории «священное и психологически тяжёлое мероприятие» оно перешло в разряд рядового события. Если не считать каких-то действительно знаковых и важных для меня собеседований (например, в исследовательское подразделение SberDevices, где я имел радость трудиться до недавнего времени), процесс стал максимально простым: я получаю предложение, мы назначаем удобное время, я вспоминаю о событии за час до него, мы созваниваемся, и всё происходит. Дальше я записываю детали в свою таблицу и забываю об этом до следующей интеракции с рекрутером.
Хотя одна секция недавно выбила меня из колеи
Да, это как раз из того собеседования в SberDevices. На какие-то вопросы о современных исследованиях и подходах при работе с LLM я ответил, на какие-то нет, и меня даже пропустили дальше, но ушёл я с чувством того, что я полное днище.
Сейчас понимаю, что не знать всё было нормально, но тогда я воспринял это как провал и проблему, которую надо решать. И стал всё свободное время тратить на анализ статей о том, что происходит в мире LLM за последние годы, неплохо разобрался в теме и на работу вышел уже с более-менее сформированной картиной происходящего.
Кстати, одним из результатов того разбора стал мой годичной давности обзор трансформеров на хабре.
Видоизменились и цели:
в начале карьеры собеседования были источником священного Грааля — вожделенной «настоящей» работы
дальше важным фактором стало получение новых знаний о рынке и востребованных навыках, основной интерес представляли технические секции, сложные вопросы и задачи вызывали неприятные ощущения, а страх провала сохранялся
на текущий момент технические секции стали рутиной, которую хочется скорее пройти, исключение — прикольные нестандартные задачи, требующие более глубокого понимания моделей и процессов или полной разработки ML-систем. Интереснее стали секции про бизнес-логику и продуктовый дизайн. Провалы при решении сложных задач не пугают, а мотивируют глубже разбираться в них
Конечно, в общем это делается всё равно ради получения интересной работы и высокой зарплаты. Но эта задача теперь возлагается не на каждое отдельное собеседование, а на процесс целиком. И регулярно бывает так, что крутое проваленное интервью намного ценнее, чем завершившийся оффером более скучный вариант. Просто потому, что полученное понимание направления развития и мотивация в следующий раз помогут пройти ещё более крутое интервью на ещё более классную позицию.
И, конечно, чем больше ты проходишь собеседований, тем сложнее тебя удивить (ваш кэп). Ниже примерная таксономия секций в моей профессиональной области (как я её вижу).
Если собеседование про ML, то оно часто идёт в формате «а вот есть задача, как будешь её решать», после чего на каждом шаге задаётся много уточняющих вопросов. В итоге проверяется, что соискатель в принципе понимает, как устроен процесс создания ML-сервисов, и что в рамках каждого отдельного этапа он тоже может углубиться достаточно далеко (иногда получается и дальше, чем может сам интервьюер). Важно не забывать о всех этапах: выбор метрик, сбор данных в начале и внедрение и поддержка решения в конце. Ключевая ошибка молодых специалистов — сосредотачиваться на модели, тогда как выбор модели занимает не так много времени и не является основной проблемой. Ещё важно помнить про А/Б-тесты и статесты для проверки гипотез.
Примеры вопросов
У компании есть высоконагруженный сервис, который сталкивается с проблемами фрода. В чём его смысл? Почему это плохо для компании? Как с ним можно бороться? Как понять, что борьба успешная?
Какие существуют метрики качества бинарной классификации?
Написать или вывести аналитическое решение для линейной регрессии.
В секциях по NLP разговор может идти просто про трансформеры, разные предобученные модели и общие принципы, а может сразу про детали архитектур из последних статей, оптимизации инференса или решение каких-то бизнес задач. Зависит от того, является потенциальная команда больше исследовательской или продуктовой. Периодически в сильных компаниях в рамках таких секций дают архитектуры нейросеток (мне выдавали в двух местах свёрточную сеть и трансформер) с ошибками и просят их найти и исправить. Этот подход совмещает и теоретическую проверку знаний, и возможность демонстрации практических навыков. Иногда спрашивают про исторические вещи, вроде обучения word2vec или устройство LSTM.
Примеры вопросов
Как устроен Multi-head Self-attention?
Как устроена квантизация моделей? В чём плюсы и минусы?
Как можно сделать переводчик для языков малых народов?
ML-дизайн — смесь ML/NLP/CV секций с разработкой и архитектурой. По сути всё то же продумывание ML-решения, только теперь не в вакууме, а с привязкой к существующей инфраструктуре компании, т.е. исходим из того, какие данные есть, как их доставать, где учить и деплоить модели, сколько ресурсов они будут потреблять. По сути, это может быть архитектурное интервью на минималках. Большое значение имеют вопросы, которые соискатель должен сформулировать и задать интервьюеру для уточнения обсуждаемой ситуации.
Пример вопроса
Как построить систему суфлёра для колл-центра с имеющимися данными?
Recsys — тоже вариант секции ML-дизайна, но с уклоном в рекомендательные системы. Спрашивают как про принципы построения рекомендаций, так и про ML-обвязку, деплой и мониторинги.
Примеры вопросов
Как делать отбор кандидатов на основе поведения пользователя и на основе контента?
Как можно решать проблему «холодного старта» для статей?
Алгоритмические секции могут быть или простыми, когда спрашивают задачи, для которых требуется просто системно мыслить и уметь писать хороший код на выбранном языке, или сложными, когда нужно разбираться в мудрёных и редких структурах данных и алгоритмах (что в большинстве случае, на мой взгляд, является избыточным или даже вредным). К счастью, я в основном сталкивался с первым случаем, и адекватный действующий программист с такими задачами обычно справляется без проблем. Ещё в рамках этих секциях могут спрашивать несложные вопросы об особенностях языка. Понятно, что для позиций, связанных с ML, такие интервью ощутимо проще, чем для найма бэкендера для высоконагруженного прода, и не включают в себя серьёзные тонкости языка и работу с параллельным и асинхронным кодом.
Примеры вопросов
Для данной строки найти длину самой большой подпоследовательности из одного и того же символа.
Для строки символов и заданного k произвести удаление из строки всех подпоследовательностей из k подряд идущих символов (включая те, что возникают после предшествующих удалений).
Сложность операций с dict в Python?
На менеджерских и лидовых секциях любят погружать в разные неприятные ситуации. У вопросов на таких встречах нет однозначного ответа, и проходить их без схожего личного опыта достаточно сложно, иногда я понимаю свою правоту/ошибку уже после ретроспективного анализа. Тут тоже важно не только думать, но и задавать правильные вопросы.
Примеры вопросов
Заказчик пришел с претензиями насчёт падения скорости и стабильности релизов, что будешь делать?
Есть два разработчика, более опытный, и менее опытный, кого будем ротировать, как организуем процесс ротации и адаптации?
Наконец, самые интересные секции (для меня сейчас) — продуктовые. Как правило, на них идёт обсуждения продукта нанимающей компании, рассматриваются разные проблемы, предлагаются и обсуждаются возможные решения, не только технологические, но маркетинговые. Формат общения скорее диалоговый. Здесь правильных ответов тоже нет, и в ходе собеседования могут даже появиться какие-то свежие перспективные идеи.
Выводы
Попытался как-то структурировать своё изложение, не уверен, что получилось хорошо, но я старался. Основная мысль такая:
Собеседование в IT — это не просто способ в моменте найти новую работу.
В совокупности с подготовительными мероприятиями это инструмент для получения информации о рынке и своём соответствии рынку, который позволяет регулярно получать ответы на кучу важных профессиональных вопросов:
достаточно ли я знаю и умею для своей позиции?
если недостаточно, то что именно я не знаю?
достаточно ли мне платят на моей позиции?
какие ещё есть направления, в которых мои компетенции могут пригодиться?
что мне стоит изучить, чтобы стать круче?
Я уже молчу про то, что регулярная практика общения повышает уверенность в себе, улучшает навыки коммуникации, а иногда и позволяет проверить свой разговорный английский. И может послужить мощным мотиватором заняться прокачкой своих скиллов.
Общеизвестно, что есть два основных пути карьерного роста: пробиваться и строить карьеру в одной компании, или периодически мигрировать между ними, добиваясь более высокой позиции при новом трудоустройстве. Оба имеют свои преимущества и недостатки и имеют право на жизнь, я не агитирую ни за какой, у каждого человека свои характер, подход и ценности. Но понимание рынка труда и своего положения на нём точно может помочь в обоих случаях.
Ещё один момент: мне кажется, что при общении с рекрутерами и своим начальством не стоит врать. Это касается и опыта, и навыков, и ожиданий, и мотивации. Я стараюсь придерживаться политики максимальной открытости, прямо говорю рекрутерам, что мне ок или нет на текущей работе, и каков шанс, что мы договоримся. А руководству честно сообщаю о своих болях и о том, с какими компаниями и о чём я веду переговоры. Это может быть не всегда простым и приятным, но зато не остаётся места для домыслов, подозрений и прочего негатива.
Так что вывод для всех наёмных специалистов один (очевидный, но всё же):
Ходите на собеседования постоянно, делайте выводы из полученной информации, прокачивайте себя и снова идите на собеседования. И не скрывайте этого.
P.S. А как быть работодателям?
Для работника почти нет причин не ходить на собеседования, но как к этому относиться работодателю? В целом, я пониманию примерные страхи, которые он может испытывать:
работник может потребовать слишком большую ЗП
работник может найти для себя что-то более интересное и уйти
работник только и занимается собеседованиями, вместо того, чтобы тратить силы на работу
Тут, конечно, можно ответить, что у нас рыночная экономика, и работник имеет право получать столько, сколько ему готовы заплатить на рынке, но это и так очевидно. Попробую всё-таки найти какие-то позитивные моменты и для компании:
сотрудник, активно проходящий собеседования, лучше осведомлён о положении дел на рынке не только с т.з. оплаты труда, но и с т.з. актуальных трендов и технологий. Он может привнести в компанию дополнительную экспертизу
то, что человек ходит на несколько собеседований в году, в целом сказывается на его производительности примерно никак (я много писал о собеседованиях, но это не значит, что я мало или плохо работаю)
если сотрудник мотивирован своей работой, он не уйдёт, даже если ему платят чуть меньше рынка, а если нет, то он всё равно уйдёт, только с выгоранием и не самыми тёплыми чувствами к компании
иногда факт прохождения собеседования может послужить сигналом для компании, что у ценного сотрудника есть проблемы, и появляется шанс проактивно их выявить и решить до попадания в точку невозврата
наконец, рекрутеры работодателя, собеседуя активных людей из других компаний, могут лучше сформировать портрет целевого специалиста, круг его компетенций и ожидаемый уровень дохода. Это позволяет им сузить границы поиска и повышает шансы не упустить максимально подходящего соискателя, когда они на него наткнутся
А так да, открытый рынок и дефицит ценных кадров требуют от компаний быть готовыми платить таким специалистам рыночную ЗП, уметь использовать их ресурс максимально эффективно и помогать избегать выгорания. Если между работником и компанией нет каких-то специальных договорённостей на этот счёт, то к регулярным интервью с другими игроками рынка стоит, как мне кажется, относиться спокойно, запреты на собеседования или негативное отношение к ним выставляют IT-организацию не в лучшем свете.
К слову, все компании, в которых я работал, ничего не имели против того, чтобы их сотрудники периодически общались с рекрутерами и собеседовались, это нормальный рабочий процесс.
На этом всё, спасибо за внимание!