Быстро находить простые решения и писать чистый код

Победители Yandex Cup о том, чему они научились на чемпионате и как попали в компанию.

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

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

Николай Ложкарев, руководитель группы коммерческих решений в Поисковом портале

Николай Ложкарев

Программирование — это ремесло. А computer science — наука. Хочется не просто заниматься программированием, но и знать, как это делать с научной точки зрения. Изучать такие фундаментальные вещи по книжкам — даже Кормена — тяжело, прочитал и забыл, а когда вы занимаетесь спортивным программированием — решаете задачи на время — ваши знания всегда актуальны. Поэтому я люблю такие соревнования.

Я участвовал и в командных, и в индивидуальных «забегах», везде было интересно: Google Code Jam, Facebook Hacker Cup, ICFP Programming Contest. Больше всего мне нравится быть один на один с алгоритмом.

Чемпионат Яндекса — это спорт. Всегда есть какие-то таймлайны, дедлайны. Надо быстро думать, быстро кодить. Как правило, у вас есть 40 минут на одну задачу, что соответствует алгоритмическим секциям на собеседованиях.

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

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

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

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

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

Чтобы вырасти из разработчика в менеджера, мало разбираться в процессах и управлять людьми. Нужно уметь и код написать, и найти бизнес-решение, и SQL-запрос сделать. И конечно важно понимать, что рутинные задачи — это тоже часть работы.

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

Мария Козлова, аналитик службы антифрода Яндекс.Такси

Мария Козлова

Я решила принять участие в Yandex Cup, потому что стало интересно, что за задачи будут на треке по анализу данных. Это достаточно редкое направление.

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

Оказалось, что это собеседование в команду Безопасного поиска. Мне очень понравилось описание команды и её работы, я поняла, что есть ради чего бороться. Там в работе можно применить machine learning, знание алгоритмов. А ещё задачи команды приносят очевидную пользу всем пользователям Яндекса, это очень привлекает.

После того, как меня взяли в Яндекс, я год занималась геолокацией пользователей в Поиске, совсем недавно перешла в команду Такси. Задачи, отдалённо похожие на рабочие задачи Поиска, встречались на чемпионате, но как часть чего-то большего. На Yandex Cup ребята решают в основном задания на логику, алгоритмы или статистику. Конечно, такие знания очень нужны в работе для решения больших и сложных аналитических задач.

Елена Дзятко, аналитик-разработчик службы антифрода в Поисковом портале

Елена Дзятко

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

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

Когда вы видите других участников, появляется ощущение соперничества, настоящий спортивный дух

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

Призёрам предлагают пройти собеседования по упрощенной схеме: меньше секций, технические собеседования можно пройти за день. От секции к секции было по-разному. Техническая секция по программированию и общая секция по аналитике прошли хорошо, сложными показались задачи на статистику. Я готовилась к предстоящим собеседованиям, но не всегда отвечала на вопросы на 100% хорошо. О том, что финалистов приглашают пройти собеседования в команду антифрода, узнала позже.

Вышла на работу в ноябре 2019. Очень рада, что попала в Яндекс. Работа очень интересная, почти исследовательская. Одна из моих задач — обнаруживать и предупреждать случаи мошенничества. Например, «накрутку» лайков и комментариев в социальных сервисах Яндекса. Эти задачи решаются по нестандартному алгоритму, постоянно нужно придумывать что-то новое, потому что фродеры ищут всё новые и новые лазейки.

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

Алексей Вашкевич, разработчик программного обеспечения в Поисковом портале

Алексей Вашкевич

В студенчестве я не участвовал в олимпиадах по программированию, Яндекс помог воплотить эту мечту. Благодаря чемпионату я понял, что у меня получается, что я могу быстро находить простые решения. До Yandex Cup думал, что в жизни меня всё устраивает, буду работать там, где работал — разработчиком программного обеспечения в крупной государственной компании. Карьерная лестница понятна. А здесь мне задали вопрос: «А не хочешь ли ты попробовать что-то ещё?» Попробовать себя в чем-то ещё — это всегда интересно.

Сами по себе задачи чемпионата, по-моему, не очень похожи на рабочие задачи, но они проверяют вашу готовность работать, настраивают на то, что нужно сразу писать чисто, строить план в голове.

Более или менее значимых результатов я добился с третьего или четвёртого раза, когда попал в десятку призёров. До этого мои попытки были не более чем развлечением. Я пробовал задачи из разных треков: и бэкенд, и аналитику, и фронтенд. Не было цели выиграть, поэтому и не расстраивало, если конкретное задание не решалось. Любой результат подходил, потому что он показывал, что я могу. У меня неплохо получались задачи из трека по бэкенду. Это то, с чем я работаю сейчас и что делал до чемпионата, поскольку я занимался серверной разработкой и обработкой потоков данных.

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

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

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

Краткий пересказ от YandexGPT