Этим летом мы провели соревнование по программированию — Yandex.Taxi Coding Fest. Первый тур стартовал 14 июля, заявки на участие в нём подали четыре тысячи разработчиков со всей России. В августе мы наградили победителей, разделивших между собой призовой фонд в 700 тысяч рублей.
О своих впечатлениях от соревнования рассказывают организаторы, составители задач и его участники.
Зачем мы это затеяли
Летний Yandex.Taxi Coding Fest — это первый шаг в серии событий, рассчитанных на сообщество программистов. Со стороны не всегда очевидно, насколько сложные алгоритмы стоят за привычным вызовом машины и зачем нашему сервису сильная разработка — мы хотим рассказывать об этом в том числе с помощью собственных соревнований.
Надежда Гущина, HR-директор Яндекс.Такси: Яндекс.Такси — один из самых «оффлайновых» сервисов Яндекса, которым ежедневно пользуются миллионы людей в 13 странах. Поездка на такси, вызванном через приложение, стала такой же обыденностью, как утренняя чашка кофе. Возможно, поэтому не все до конца осознают, что на самом деле это высокотехнологичный сервис с огромным количеством алгоритмов, метрик, внутренних микросервисов и отказоустойчивой инфраструктурой, которые надо развивать. Нам всегда не хватает разработчиков, мы постоянно в поиске талантов. Cобственное соревнование — это отличная возможность с одной стороны показать реальные задачи, с которыми сталкиваются наши аналитики и инженеры, с другой — заинтересовать ими лучших специалистов в России и других странах.
Задачи
У соревнования было два тура, оба проходили онлайн. Задания составляли наши разработчики. За основу они брали повседневные задачи бэкенда Яндекс.Такси.
Андрей Егунов, руководитель направления разработки Яндекс.Такси: Мы стараемся делать так, чтобы пользователи платили меньше, а водители при этом, благодаря умным технологиям, зарабатывали больше. Наши алгоритмы ищут ближайшую к пользователю машину из тысяч машин в городе — при этом учитывают не только расстояние, но и спрос, загруженность дорог и ещё множество факторов. Приложение предлагает оптимальные точки подачи, строит идеальный маршрут, рассчитывает время ожидания и стоимость поездки. Задания для YTCF мы сделали похожими по сути, хотя и очень упрощёнными — они должны быть по силам разработчикам, которые не знают сервис изнутри, но ищут применения своим навыкам в реальных бизнес-задачах.
Это был наш первый опыт в подготовке заданий для соревнования по программированию. Оказалось, что всё не так просто. Прямой перенос задач, которые решают наши разработчики, невозможен как в силу ограниченного формата онлайн-соревнования, так и в силу того, что самые интересные проблемы пока не имеют единственно верного решения. Поэтому мы старались подобрать кейсы, которые перекликаются с задачами сервиса по части используемых алгоритмов или подходов к решениям.
Не все задачи требовали знания продвинутых алгоритмов. Некоторые — всего лишь правильного применения общеизвестных фактов. Например, чтобы решить задачу про очередь такси в космическом порту, нужно было совместить знания из школьного курса геометрии и алгебры с распространёнными структурами данных.
Cамые сложные задачи, стоящие перед нашими разработчиками — это задачи оптимизации. Поэтому в финальный список попали, например, задания, требующие применения динамического программирования.
Призы и призёры
Лучших участников соревнования мы пригласили на награждение в московский офис Яндекса. Там они познакомились с Тиграном Худавердяном — генеральный директор Яндекс.Такси, начинавший карьеру с программирования в разных проектах, рассказал им об алгоритмах и бэкенде нашего сервиса. После награждения финалисты прокатились на беспилотном автомобиле.
Первые пять мест заняли Александр Останин, Геннадий Короткевич, Евгений Курпилянский, Михаил Мирзаянов и Вячеслав Муравьёв. Они получили призы: 300 тысяч рублей за первое место, 200 за второе, 100 за третье. За четвёртое и пятое — по 50 тысяч. Двадцати лучшим участникам соревнования мы подарили бесплатные поездки на такси. Часть финалистов получили предложения пройти собеседование в нашу команду.
Михаил Мирзаянов, основатель соревнования по программированию Codeforces, призёр Yandex.Taxi Coding Fest: Есть много мероприятий по программированию, которые проходят так: написали, рейтинг на сайте обновили, разошлись. Немногие компании в индустрии проводят чемпионаты с призами. Особенно в России. Для сообщества такие соревнования очень ценны, они мотивируют. Я стараюсь по возможности в них участвовать. Когда проходил финальный раунд YTCF, я был за 150 километров от города, на природе — и решал задачи сидя на ведре в амбаре.
Мне, как человеку, который профессионально занимается аналогичными соревнованиями, кажется, что в будущем задачи могли бы стать более нетривиальными. Хотя понятно, что работа над ними отнимает много времени — это целое отдельное направление. Но инициатива очень дельная. Надеюсь, что её будут развивать.
Мы собрали впечатления участников и теперь, приняв их во внимание, планируем провести похожее соревнование в феврале 2019 года. Следите за анонсами в блоге Яндекс.Такси — мы расскажем, когда начнётся регистрация на следующий Yandex.Taxi Coding Fest.