Журнал / герои

Руководители Яндекса о том, чего ждать от летней стажировки

«Если ты вкладываешься в работу, рост просто обеспечен».

Для разработчика стажировка в большой компании — один из лучших способов прокачать свои скиллы, начать или перезапустить карьеру, и узнать, что такое промышленное написание кода. В самом разгаре набор на летнюю стажировку Яндекса. Он идёт по пяти направлениям: бэкенд, машинное обучение, мобильная разработка, фронтенд и аналитика. Технические требования к кандидатам подробно прописаны, но остается много вопросов: чего ждать, как общаться с новыми коллегами, как устроена возможность перехода в штат, и какие неочевидные знания могут пригодиться на рабочем месте? Мы попросили ответить на эти вопросы руководителей по всем пяти направлениям.

Фронтенд

Сергей Бережной, руководитель отдела разработки поисковых интерфейсов

Чем занимаются стажеры

Мы нанимаем стажеров для того, чтобы они делали все то же самое, что и разработчики Яндекса. Конечно, им нужно уделять немного больше внимания, подробнее ревьюировать их код, чуть больше объяснять контекст. Но это те же самые задачи, которые решают все фронтендеры — создание интерфейсов для наших сервисов с должным уровнем качества и с написанием тестов. 

Кого отбирают

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

Стажировка в первую очередь предназначена для человека, который начинает открывать для себя профессию, готов быстро учиться и развиваться

Как проходит стажировка

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

Переход в штат

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

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

Идеальный стажер

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

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

Тот, кто сидит, пытается во всем разобраться сам, долго ковыряется, не задает никаких вопросов, вряд ли приживется

Машинное обучение 

Михаил Левин, директор по машинному интеллекту Яндекс.Маркета

Чем занимаются стажеры

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

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

Почему надо общаться с коллегами

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

Какие стажеры наиболее успешны

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

Аналитика

Дмитрий Черкасов, руководитель группы разработки антифрода

Чем занимаются стажеры

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

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

Ещё один делает большую задачу в отдельном сегменте антифрода, до которой раньше просто не доходили руки, но она при этом крупная, отделимая. Есть одна старая система, а есть новая, ещё не доделанная. Нужно провести переезд с одной на другую. В перспективе это важный проект, хотя с высокой степенью неопределённости: нужно много общаться, читать непонятный легаси-код, в котором никто особо не разбирается. Мы на финальном собеседовании по-честному сказали стажёру, что задача сложная. Он ответил, что готов, пришёл к нам в команду, и у него всё получилось. Оказалось, что у него есть качества не только разработчика, но и менеджера. Он готов был сам ходить, общаться, узнавать, пинговать.

Переход в штат

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

Как правильно работать со стажёром

Когда вся команда занята крупным проектом, то человек оказывается брошенным. Чтобы такого избежать, мы ещё до найма стажёра обсуждаем, кто его будет менторить. Это ещё и большая прокачка для самого ментора: подготовка к роли тимлида, проверка на способность удержать в голове и свою задачу, и задачу стажёра.

Есть регулярные встречи, на которые иногда хожу и я сам, чтобы быть в курсе. Но совсем регулярно со стажёром общается именно ментор. Он поначалу тратит очень много времени, но это окупается.

Когда стажёр очень компетентен

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

Мобильная разработка

Денис Малых, руководитель службы разработки приложений для мобильных платформ

Чем занимаются стажеры

Как правило, это интересные задачи в боевых проектах. Какой-нибудь кусочек продакшен-функциональности какого-нибудь приложения — относительно обособленный, и который давно хотелось бы сделать, но находились более приоритетные задачи. Например мы поручали стажерам поддержку Apple Watch в Яндекс.Погоде.

Необходимые знания

Если честно, кандидат на стажировку с хорошими хард-скиллз — редкий случай, по крайней мере в нашей эпсилон-окрестности. Возьмём, например, Swift. В нём очень сложная работа со строками, и людей, которые навскидку из головы могут со строками поработать, мало. Я часто даю на собеседованиях задачу, которая как раз связана с обработкой строк. И за всё время был только один человек, который сходу, на листочке, смог такой Swift-код написать. Я после этого ходил и всем рассказывал, что кто-то наконец смог решить эту задачу на бумаге. Обычно опытные разработчики, если у них такая задача возникает, переходят на другой язык — C, Objective-C, где со строками попроще.

Я обращаю внимание, если человек рассказывает, что попробовал много языков, подходов.

Люди с более широким кругозором придумывают в боевом режиме более элегантные решения

Но это неоднозначный плюс. Можно похватать по верхам, а всерьёз ничему не научиться.

Кроме того, мне нравятся люди, которые рассказывают байки — в хорошем смысле. Можно рассказать о примерах из жизни, которые человеку запомнились. Если такая история всплывает, я начинаю задавать по ней дополнительные вопросы. Человек, который может рассказать, как они с командой героически с чем-нибудь справился, интересен. Видно, что у него есть практический опыт поиска шагов для решения проблемы. Дело в том, что наша боевая разработка примерно из таких баек и состоит.

При этом простые вопросы вида «Расскажи о чём-нибудь интересном в твоих проектах» на такие истории обычно не наводят. Один кандидат однажды сказал замечательную фразу, которую я даже записал: «Успешно избегал решения нудных задач».

Два вида разработчиков 

Я как человек, который занимается программированием с юного возраста (первую программу написал в 9 лет) и успел попробовать много областей и технологий, пришёл к текущему состоянию — когда мне неважно, что и на чём писать. Я просто люблю что-то инжинирить и как раз этим и занимаюсь.

Есть программисты, которые в разработку пришли академически: поступили в универ на программиста, честно отучились 5 лет, получили специальность. Они знают алгоритмы, поскольку их научили — через задачки и курсовые. И тогда само знание алгоритмов никак не характеризует кругозор человека, надо этот кругозор проверять другим способом.

А есть самоучки, к которым я причисляю и себя. Да, у меня формально есть IT-образование, диплом инженера-программиста. Но самоучки программировать научились вопреки. У них не было университетской программы. Они часто с алгоритмами не знакомы — потому что никогда не сталкивались с необходимостью их изучить! И когда такой человек всё-таки знает алгоритмы, значит, он потратил время и в них разобрался. Когда я закончил универ, то понял, что у меня есть белые пятна в части фундаментальных алгоритмов — дело в том, что специальность была прикладная. Я пошёл и изучил онлайн-курсы Принстонского университета, хорошо известного Роберта Седжвика. Разобрался, сделал все домашки. И когда человек на собеседовании рассказывает похожую историю, мне сразу становится интересно, появляется желание с ним поработать или хотя бы продолжить разговор.

Бэкенд

Игнат Колесниченко, один из руководителей группы разработки в Службе технологий распределенных вычислений

Чем занимаются стажеры

Наш проект называется YT, мы делаем самую базовую инфраструктуру хранения и обработки данных для всего Яндекса. Считаю, мы проводим одну из лучших стажировок. Обычно стажёр делает какой-нибудь продуктовый эксперимент, до которого у людей не дошли руки. Руководитель смотрит — скорее всего, не удалось, и результат уходит в никуда. Это не только в Яндексе: поспрашиваешь стажёров из Google, Facebook — там всё точно так же. У нас, в свою очередь, висит по две сотни задач. Это крайне полезные задачи. Возможно, они не увеличат утилизацию кластера на 10%, не сэкономят миллион долларов компании, но сделают счастливыми сотни людей.

Например, у меня сейчас есть стажёр, который занимается нашим клиентом для запуска операций на наших кластерах. Ты запускаешь операцию, которая перемалывает терабайты данных. Перед запуском операция должна загрузить некие данные на кластер. Обычно это занимает 20–40 секунд, и раньше это происходило молча: запустил в консоли и сидишь, смотришь на чёрный экран. Стажёр пришёл и за две недели сделал фичу: теперь видно, как файлы заливаются и что происходит. Это очевидная польза для многих людей. Задача, с одной стороны, несложная в описании, а с другой — есть в чём покопаться, какие библиотеки посмотреть. Ты берёшь API большой сложной системы, через много слоёв пробираешься — разве что не работаешь с многопоточностью.

Как правильно работать со стажёром

Стажёры как наименее опытные члены команды требуют к себе максимум внимания. Я стараюсь хотя бы через день подходить, спрашивать, как у него дела. Если вижу, что закопался, то стараюсь ему помочь, спросить, в чём проблема, и вместе с ним её раскопать. Ясно, что это отнимает мои силы и делает работу стажёра не столь эффективной интегрально — я же тоже своё время трачу. Зато это позволяет стажёру получить результат, и всё равно это быстрее, чем если бы я это делал сам. 

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

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

Переход в штат

Мы достаточно трепетно относимся к найму стажёров. Стараемся стажёрами брать достаточно молодых ребят. Если у человека пять лет опыта разработки, он приходит в Яндекс и выясняется, что по уровню он стажёр, то, к сожалению, для нас это означает, что он — хоть и будучи молодцом, раз смог устроиться в Яндекс с пятью годами опытами, — до старшего разработчика вырасти не сможет. Обычно дело в скорости, но по-разному бывает. В любом случае, это достаточно яркий маркер. Так что стажёрами мы стараемся брать студентов старших курсов или младших, если это летняя стажировка. Когда мы берём студента старшего курса стажёром, мы сразу примеряем его к тому, чтобы он попал к нам в команду. И как правило, единственное препятствие к этому — отсутствие вакансии.

У нас есть разработчик Паша Киселёв, который является контрпримером к тому, что я рассказывал. Он пришёл ко мне собеседоваться и выяснилось, что университет он окончил семь лет назад. Я его пособеседовал, вроде хороший стажёр. Поспрашивал, чем он занимался, — не может ответить. Но главное — эти семь лет он не занимался программированием. Если бы занимался — понятно, что это был бы нехороший маркер. Но поскольку он занимался чем-то ещё и теперь вернулся в эту область, ему интересно, хорошо решает задачи, голова на плечах есть. Взяли его стажёром, сейчас он в штате, всё отлично. То есть это не препятствие. Препятствие — когда мы видим, что, действительно, у человека был медленный рост в прошлом, что будет означать медленный рост и у нас.

Когда стажёр слишком крутой

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