Интервью с Errichto: подготовка к Google Code Jam и секреты олимпиадного кода

Joma Tech 1,3 млн 25 мин 5 мин 22.08.2019
Главное

Ведущий YouTube-канала Joma Tech Джонатан Ма побеседовал с известным спортивным программистом и создателем обучающего контента Камилем (известным в сети под ником Errichto). В центре обсуждения — подготовка к финалу престижного мирового первенства Google Code Jam, специфика олимпиадных задач и причины, по которым гениальные алгоритмисты далеко не всегда становятся идеальными разработчиками в коммерческих ИТ-компаниях.

🏆 Финал Google Code Jam и феномен Геннадия Короткевича 0:00

Камиль прилетел в США для участия в финале престижного мирового первенства по спортивному программированию Google Code Jam. Попасть на этот этап крайне сложно: для этого необходимо успешно пройти три жестких квалификационных раунда и один дополнительный предварительный этап. Всего в финал отбираются 25 лучших программистов со всего мира, к которым присоединяется действующий чемпион прошлого года.

На протяжении последних пяти лет бессменным лидером турнира остается легендарный белорусский программист Геннадий Короткевич (известный под ником Tourist). Благодаря своему уникальному статусу, чемпион освобожден от отборочных этапов и проходит в финальную стадию автоматически. Камиль отмечает, что в предыдущем году ему самому удалось совершить прорыв и занять второе место сразу за Короткевичем. Однако в текущем сезоне он оценивает свои шансы более реалистично и рассчитывает войти в топ-10.

🧠 Что такое спортивное программирование: правила и специфика 1:44

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

Ключевые параметры оценки программ:

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

🎾 Разбор кейса: как решить задачу за 30 секунд 4:11

В качестве яркого примера олимпиадного мышления Камиль приводит задачу, симулирующую теннисный матч. Участнику подается на вход длинная строка символов (например, "ABABBA..."), где каждая буква обозначает игрока (A или B), выигравшего конкретное очко. Задача алгоритма — определить, кто в итоге победил в матче по правилам большого тенниса.

Обычный разработчик потратит около 10 минут на детальное программирование всех правил тенниса, подсчет очков внутри геймов, сетов и обработку тай-брейков. Однако топовые олимпиадники сдают эту задачу всего за 30 секунд.

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

📊 Спортивный код против промышленной разработки: плюсы и минусы 6:24

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

Камиль упомянул статью, в которой утверждалось, что между успехами в спортивном программировании и эффективностью на позиции обычного разработчика (software engineer) есть даже некоторая негативная корреляция. Тем не менее, он выделяет сильные и слабые стороны олимпиадников.

Преимущества олимпиадных программистов:

Недостатки для коммерческой разработки:

🛠 Платформы, турниры и финансовая мотивация участников 8:00

Спортивное программирование поддерживается глобальной экосистемой платформ. Среди ключевых площадок Камиль выделяет следующие:

Крупные ИТ-корпорации организуют собственные международные чемпионаты (Google Code Jam, Facebook Hacker Cup, TopCoder Open) в первую очередь ради хантинга талантливых кадров. Для участников это отличная возможность: например, Google полностью оплачивает перелеты и проживание в элитных пятизвездочных отелях.

Размер денежных призов за первые места на Google Code Jam сейчас составляет от $10,000 до $15,000. Камиль отмечает, что раньше награды достигали $100,000. По его мнению, компании снизили призовые фонды умышленно: если выплачивать программистам огромные суммы на руки сразу, у них пропадет финансовый стимул устраиваться в корпорации на постоянную работу.

📘 Путь в профессию: от олимпиадной математики до книги Кормена 10:20

Большинство успешных участников ИТ-турниров — это молодые люди до 30 лет. Камиль объясняет это высокими временными затратами: семейные люди с постоянной работой редко могут позволить себе тренироваться по несколько часов в неделю. Многие приходят в алгоритмы из классических математических олимпиад.

Сам Камиль вырос в небольшом польском городе, где не было профильных учителей и сильного ИТ-сообщества. В 16 лет он поверхностно знал C++ и немного Python. Переломным моментом в 17 лет стала покупка фундаментального учебника Томаса Кормена «Алгоритмы: построение и анализ» (Introduction to Algorithms). Благодаря хорошей математической базе он смог освоить книгу самостоятельно, после чего его результаты резко пошли вверх, а обучение в университете и участие в командном студенческом чемпионате ICPC закрепили успех.

Для сравнения Камиль приводит биографию Геннадия Короткевича: тот начал программировать в 6 лет, в 11 лет уже дебютировал на Международной олимпиаде школьников (IOI), а в 12 лет завоевал свое первое золото.

💼 Собеседования в Бигтех vs Спортивное программирование 12:32

Джонатан Ма выразил мнение, что пройти стандартный процесс найма в ИТ-компанию гораздо проще, чем выиграть международный чемпионат. Камиль соглашается, добавляя, что для привлечения внимания рекрутеров Google вовсе не обязательно побеждать — достаточно войти в топ-200 или топ-500 на открытом турнире Google Kickstart, чтобы гарантированно получить приглашение на техническое интервью.

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

Главным плюсом автоматических CP-платформ Камиль считает абсолютную объективность и честность оценки, полностью исключающую человеческий фактор и личные симпатии интервьюера.

💬 Цитаты

«В спортивном программировании люди всегда верят, что входные данные корректны. Они просто делают то, что им сказано, и могут упустить это на реальной работе.»

Камиль Дебовски 06:36

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

Камиль Дебовски 22:39
👥 Спикеры
📚 Упомянутые книги
📖 Термины
Спортивное программирование (CP)
Интеллектуальное соревнование по написанию программ для решения сложных алгоритмических задач с ограничениями по времени и памяти.
Алгоритмическая сложность
Характеристика, описывающая рост затрат времени или памяти компьютера в зависимости от объема входных данных.
Тай-брейк
Специальная укороченная партия в теннисе (и ряде других видов спорта) для выявления победителя при равном счете.
Дебаггинг
Процесс поиска, локализации и исправления ошибок (багов) в программном коде.
ICPC
Международная студенческая олимпиада по программированию, старейшее и самое престижное командное соревнование в мире.
📊 Цифры
🗓 Хронология
  1. 11 лет Геннадий Короткевич впервые принял участие в Международной олимпиаде по информатике (IOI).
  2. 12 лет Геннадий Короткевич завоевал свою первую золотую медаль на олимпиаде IOI.
  3. 16 лет Камиль начал изучать основы C++ и Python в небольшом польском городе.
  4. 17 лет Камиль купил книгу Томаса Кормена по алгоритмам, после чего его результаты резко улучшились.
  5. Прошлый год Камиль занял второе место на Google Code Jam, уступив только Геннадию Короткевичу.
⚖️ Другая сторона
Технологии и IT Google Code Jam Errichto Геннадий Короткевич Томас Кормен ICPC