Написать пост

Как я попал в Яндекс и что мне здесь нравится

Аватарка пользователя Sergei Sobolev

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

Вокруг процесса найма в Яндекса много мнений и стереотипов, в том числе касаемых сложных собеседований и задач на алгоритмы и структуры данных.

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

Это оказалось просто. Я зашёл на сайт с вакансиями и откликнулся на пару понравившихся. Через два дня мне позвонила рекрутер Яндекса, задала пару общих вопросов и записала на первый этап собеседований.

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

В итоге я попал в команду, на которую первоначально не откликался. Есть и более короткие выходы в нанимающие команды. Если вам интересен финтех и вы хотите поучаствовать в создании банка с нуля, то в Яндексе есть такой стартап и отдельный сайт с вакансиями. А ещё есть возможность попасть в Яндекс за два дня через Weekend Offer,

Первый этап — решить 2 задачи за час

Собеседование было online, как и все последующие. Мне надо было решить две задачи за час с написанием кода в редакторе code.yandex-team.ru. Не могу раскрывать, какие конкретно были задачи, ранее я их не встречал. Но по уровню сайта LeetCode.com я бы оценил их как easy и medium.

Для подготовки к первому этапу я взял неделю. За это время успел решить около 20 задач. Правда, до этого у меня уже были около 100 решенных задач в разное время. Про LeetCode я узнал в 2018 году, с того момента время от времени захожу на сайт и решаю задачки.

Зачем задавать задачи на алгоритмы на собеседованиях

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

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

При этом мы все сидели в классе за компьютерами. Но решение надо было написать мелом на доске. После того урока я решил, что хочу стать программистом. Пройдёт ещё лет 10–15, прежде чем компании в США, а потом и в России, начнут тестировать программистов так же, как моя школьная учительница информатики проверяла наше понимание алгоритмов. Именно так сейчас проводят собеседования компании, которые хотят нанимать хороших разработчиков.

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

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

Для чего вообще надо давать такие задачки на собеседовании? Разработчики пишут программы, которые принимают на вход данные, выполняют их обработку и выдают результат. Именно это и надо сделать в задаче, решение большинства которых укладывается в 25–30 строк. И если у человека возникает сложность в написании программы в 25 строк, то как он напишет или разберётся в программе в 10 тыс. строк? А ведь это размер небольшого микросервиса. Что уж говорить о монолитах на сотни тысяч строк, с которыми мне приходится работать в Яндексе.

Следующие этапы собеседований

После успешно пройденного первого этапа мне назначили ещё четыре секции — две на алгоритмы и две на проектирование распределённых систем. С алгоритмами всё просто — чем больше времени уделил на подготовку, чем больше прорешал задачек, тем выше шанс на успех. После первого этапа я взял ещё месяц на подготовку и успел решить примерно 40 задач. Для подготовки к архитектурной секции читал:

  1. Grokking the System Design Interview
  2. The System Design Primer
  3. System Design Interviews

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

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

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

Итого я прошёл 5 технических собеседований и по одной встрече с пятью командами. В целом процесс мне показался нормальным, интервьюеры были позитивными и дружелюбными. В день было 1–2 собеседования, поэтому много энергии они не отнимали, а поскольку я продолжал работать на старом месте, растянутость процесса во времени даже помогала мне не отвлекаться от работы.

Почему я принял оффер от Яндекса

До того, как я устроился в Яндекс, часто слышал разговоры, что Яндекс платит ниже рынка. Возможно, это было раньше, но сейчас это не так. В оффере мне предложили столько, на сколько я оцениваю себя на рынке. При этом совокупный доход в Яндексе состоит из ежемесячного оклада, премий и опционов на акции. Опционы, правда, начинают веститься (зачисляться на счет) через год работы, а чтобы это компенсировать в первый год работы, мне выдали sing-up бонус.

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

Чем уникален Яндекс? Тут не только создаются продукты и сервисы, тут создаются технологии для этих продуктов. Все приличные компании уже используют ClickHouse, аналитическую СУБД, разработанную в Яндексе. Ничего подобного от больших зарубежных технологических компаний нет в свободном доступе. Яндекс нельзя сравнивать не только ни с одной российской компанией, но и ни с одной компанией в мире. Яндекс — это поиск и маркетплейс, такси и беспилотники, а ещё есть облако, доставка еды, каршеринг и много чего интересного.

Минусы работы в Яндексе

Этот текст не будет объективным если не рассказать про минусы. И они вытекают из плюсов. Как написал выше, Яндекс создает технологии, которые сам же и использует для создания продуктов. Это и различные СУБД, инструменты CI/CD, брокеры сообщений, средства мониторинга, кластер MapReduce и даже аналог Jira — все это в Яндексе самописное.

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

Чем я занимаюсь в Яндексе

Примерно половину всех доходов Яндексу приносит реклама. Да, Яндекс теперь это не только поиск и реклама. В последнее время, например, очень сильно вырос фудтех. Кому интересно, о структуре доходов компании можно ознакомиться в пресс-релизе.

Я работаю в команде, которая отвечает за рекламу мобильных приложений. Тут предлог «в» не пропущен, именно реклама мобильных приложений, т. е. всё, что вы устанавливаете себе на телефон, эти программы тоже рекламируют. Уникальность моей команды в том, что мы пишем код сразу в несколько систем. От Директа (direct.yandex.ru), где рекламодатели заводят рекламные кампании, до непосредственно движка, который отбирает рекламные объявления для показа пользователю. Это даёт понимание того, как работает не только отдельно взятый сервис, но и вся рекламная инфраструктура Яндекса, и как она интегрируется с внешним миром.

Например, в апреле 2021 года Apple выпустила iOS 14.5, в котором запрещает отслеживать идентификатор устройства (IDFA) без явного запроса разрешения пользователя. Без IDFA невозможно сопоставить показ рекламы с действиями, которые совершил пользователь, посмотрев эту рекламу, например, установил ли он рекламируемое мобильное приложение.

Чтобы подготовить рекламную систему Яндекса к работе с iOS 14.5 и выше, пришлось вносить изменения во многие её компоненты, разобраться, как доставляется реклама в мобильные приложения, подключенные как непосредственно к рекламной сети Яндекса, так и подключенные к другим рекламным сетям, например, Google, из которых они могут получать рекламу от Яндекса опосредованно по протоколу OpenRTB.

Работая в Яндексе, мне уже приходилось писать код на Python, немного Java, иногда даже Perl, но в большую часть на С++. Теперь понимаете, почему Яндекс не спрашивают знание языков программирования на собеседовании? Это бессмысленно. Ещё в начале года часть нашей команды писала на Python, теперь пишут на Kotlin. Для хорошего программиста не составит труда выучить новый язык программирования. Да и вообще, язык программирования всего лишь инструмент для решения задач, а сложных и интересных задач в Яндексе мне хватает.

Следите за новыми постами
Следите за новыми постами по любимым темам
58К открытий58К показов