Как попасть на чемпионат по спортивному программированию и победить

Во всем мире становятся популярны так называемые интеллектиады - игры разума, где на победу работают не столько скорость и знание точного ответа, сколько логика и креативность. В России сегодня одной из самых интересных и перспективных "игр" становится спортивное программирование. Этим летом в Москве состоится международный финал одного из главных всемирных студенческих чемпионатов по спортивному программированию ICPC. С 2000 года 14 раз абсолютными чемпионами в нем становились российские студенты. И это при том, что в финал выходит менее 1 процента от тех, кто начинает участвовать в отборочных турах!
iStock

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

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

Алексей Малеев: Конечно, это результат активной работы ведущих университетов столицы по подготовке самых талантливых студентов. Большую роль здесь сыграла инициатива Moscow Workshops. Это образовательный проект, который дает возможность студентам подготовиться и успешно проявить себя на мировых соревнованиях по программированию. База - у нас в МФТИ.

А вообще, ICPC - самое престижное и масштабное командное соревнование по спортивному программированию, которое проводится с 1977 года. Последние 8 лет команды из России занимают первые места. За этими ребятами охотятся все крупные IT-гиганты.

По правилам игры, участвовать могут только студенты вузов или техникумов не старше 23 лет. Но есть школьники, которые дадут фору иному старшекурснику…

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

Как все происходит? За 5 часов нужно решить от 8 до 13 равноценных задач. Под запретом любые электронные "помощники", сетевые библиотеки, чаты с друзьями. Можно пользоваться только бумажной литературой - учебник, справочник.

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

Знаю, что и на ICPC, и на московские соревнования, как на футбол или хоккей, можно прийти в качестве болельщика. Выходит, мероприятие зрелищное?

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

А кто в жюри?

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

Правило ICPC: в команде не более трех человек и все - из одного вуза. Как собрать единомышенников?

Алексей Малеев: Чемпионаты по программированию - это обычно 12 небольших задач, которые нужно решить за 5 часов. Причем каждое решение - это идея. Поэтому в командах, доходящих до финала, как правило, обязательно есть игрок, которого мы условно называем "математик". Это человек, ответственный за нестандартные способы решения задачи. Он часто силен и в теоретических вопросах, именно от его креативности зависит результат. Формируя команду, об этом нужно помнить. Да и в целом помнить, что в современном мире навык командной работы - один из основных. Тем более, что у команды - один компьютер на всех. Так же в команде должен быть "спринтер" - тот, кто быстро кодит, и капитан, который принимает тактические и стратегические решения. Самая большая опасность - увязнуть в какой-то задаче. Надо помнить: все они равноценны. Кто больше решил, тот и выиграл. Поэтому сохраняем моральный дух, волю к победе и следим за динамикой соперников. Таблица результатов видна всем. Этим надо пользоваться. Многие уже решают третью задачу, а вы зацепились за первую? Имеет смысл отложить ее и перейти к той, что уже решена у соперников. Важно быть собранным, уметь выложиться. Тут аналогии и со спортом, и с бизнесом. Не случайно многие, кто прошел через чемпионат по спортивному программированию, потом организуют свои кампании.

Да и крупные работодатели ведут настоящую "охоту" за лучшими участниками ICPC.

Алексей Малеев: У чемпионов, как правило, впереди два трека, и оба - классные. Или большая IT-индустрия, или запуск стартапа. Здесь происходит колоссальная селекция, ведь в чемпионате участвуют сотни тысяч студентов со всего мира. За "топовыми" ребятами действительно пристально следят: в области информационных технологий до сих пор не хватает квалифицированных специалистов. Напомню, что в любой стране сегодня зарплата в сфере IT выше средней. Рынок перегрет, за таланты идет борьба. Чемпионат ICPC - возможность быстро начать карьеру. Кстати, наша российская соцсеть Вконтакте во многом построена на платформе олимпиадного программирования. Николай Дуров, брат основателя Вконтакте, в составе команды СПбГУ в 2000 году привез в Россию первый кубок ICPC. А сейчас в этой команде работает 4 российских чемпиона мира.

Первый шаг к программированию - это…?

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

Справка "РГ"

ICPC - один из главных всемирных студенческих чемпионатов по спортивному программированию. Его история началась в 1970-х годах с соревнования, которое проводил Техасский университет. По правилам турнира, победителям вручается четыре золотые, четыре серебряные и четыре бронзовые медали. Каждая команда состоит из трех человек. К участию допускаются студенты высших учебных заведений и аспиранты первого года обучения не старше 23 лет. Языки программирования, разрешенные на чемпионате - С, C++, Java, Python или Kotlin.