Тренировки к чемпионату мира по программированию среди студентов ACM ICPC завершились в октябре в Барселоне. Это были крупнейшие тренировки в этой сфере и единственные подобные за пределами России в них приняли участие около 150 человек из разных стран мира, в том числе победители последнего чемпионата, который прошел в США,— команда Санкт-Петербургского университета информтехнологий, механики и оптики. Российские команды за последние годы шесть раз подряд побеждали в этих соревнованиях, а такие тренировки, полностью имитирующие условия чемпионата мира,— это уже регулярное мероприятие. Как проходят подобные тренировки, когда и почему российские школьники приходят в программирование, как занимаются олимпиадным программированием в российских вузах и где планируют работать выпускники российских технических университетов с опытом участия в международных соревнований, разбиралась корреспондент “Ъ” Валерия Мишина.
«Задача коммивояжера»
Происходящее на тренировках по программированию в Барселоне, полностью имитирующих условия международного чемпионата, на первый взгляд трудно назвать «активностью»: участники соревнования сидят с ноутбуками за длинными столами и сосредоточенно на них работают. В полутемном зале установлен большой экран — на нем в реальном времени отображается, сколько задач и как решили команды: кто сейчас на каком месте, у кого есть штрафные очки, кто сколько сделал попыток, сколько времени потрачено на решение. Все именно так, как происходит на международной студенческой олимпиаде по программированию ACM ICPC, крупнейшем подобном соревновании в мире.
У нас в стране хороший бэкграунд в математике, у нас много алгоритмических подходов, наши олимпиады по математике сильно развивают школьников и студентов в этом направлении. А олимпиады у нас существуют с 1930-х годов
Этот чемпионат проводится с 1970-х годов. А с 2000 года в нем начали побеждать команды российских вузов: первыми тогда стали студенты Санкт-Петербургского госуниверситета (СПбГУ). Всего же российские команды побеждали в ICPC 12 раз, при этом с 2012 года победителями становились только команды из ИТМО или СПбГУ. «Наша олимпийская школа по программированию действительно сейчас одна из лучших в мире,— объясняет один из организаторов тренировок в Барселоне, основатель проекта Moscow Workshops ACM ICPC — сети тренировочных международных сборов по спортивному программированию, директор Центра развития ИТ-образования Московского физико-технического института Алексей Малеев.— Мне кажется, в первую очередь это потому, что у нас хороший бэкграунд в математике, у нас много алгоритмических подходов, наши олимпиады по математике сильно развивают школьников и студентов в этом направлении. А олимпиады у нас существуют с 1930-х годов».
О плюсах российской школы программирования говорит и профессор Технологического университета Каталонии Сальвадор Роура, который является тренером местной команды: «У нас нет подобной последовательной, непрерывной системы, когда школьники, а затем студенты занимаются программированием. Как правило, здесь этой сферой начинают заниматься уже в университете». «В МФТИ многие поступают по результатам олимпиад, например, призеры Всероссийской олимпиады,— рассказывает тренер центра развития ИТ-образования МФТИ Михаил Тихомиров.— К нам идут и участники школьных сборов по подготовке к олимпиадам. И для желающих заняться олимпиадным программированием мы сначала организуем личные тренировки, потом потихоньку вводим их в командные, чтобы они прониклись спецификой, что иногда бывает сложно, так как это довольно большой скачок от школьной олимпиады к студенческой». По его словам, ко второму курсу студенты уже посещают еженедельные тренировки, участвуют в командных обсуждениях задач, они часто бывают на выездных командных олимпиадах — их в год проводится около двадцати: «Как показывает практика, выездные командные соревнования — это очень полезно, особенно на первых этапах, помогает преодолеть страх, нервозность, учит работать в разных условиях».
Турнирная таблица учебно-тренировочных сборов «Hello, Barcelona!»
Участвовали 59 команд (147 студентов) из 30 стран
Победители среди команд Дивизиона «А» (опытные команды):
ИТМО (Россия), участники: Илья Збань Михаил Путилин.
МФТИ (Россия), участники: Александр Голованов, Александр Останин, Никита Уваров.
University of New South Wales (Австралия)
Победители Дивизиона «В» (начинающие команды):
Harbour.Space (Испания), участники: Владимир Мазин, Артур Миндияров, Норхе Вискай Залдивар
University Politechnica de Catalunya (Испания)
Lund University (Швеция)
Среди основных соперников российских команд на чемпионате мира по программированию он называет студентов из Японии, Китая, Южной Кореи и Польши. Их представители приехали и на эту тренировку. От чемпионата тренировки отличаются тем, что после соревнований преподаватели объясняют тему и методику решения, дают советы, как потратить на задачу оптимальное время, как найти правильную стратегию. «На чемпионате обычно дается пять часов на решение 12 задач, плюс-минус одна-две задачки,— объясняет Алексей Малеев.— Участники решают задачу и пишут код ее решения. Ну, например, классическая "Задача коммивояжера": есть несколько расстояний между разными точками, и нужно проехать все города, побывать в каждом ровно один раз и сделать это с минимальным временем». Он также приводит в пример классическую задачу о рюкзаке: «Вы собираетесь в поход, у вас есть рюкзак ограниченного веса, то можно взять с собой условно до 20 кг, а у вас дома много разных предметов, каждый из них имеет какую-то ценность. В походе такие вещи, как палатка или спальный мешок, будут иметь высокую ценность, точно меньше, чем любимый пуфик и торшер. Но, в принципе, и их тоже можно взять. И задача о рюкзаке — это как собрать рюкзак максимально большей ценности с ограничением по весу».
Российские участники сборов «Hello, Barcelona»
По правилам ACM ICPC, программу решения нужно написать на одном из трех языков программирования: Java, С++ и Python. «Но Python используется реже, так как это язык более высокого уровня и там все операции происходят дольше, а у нас есть ограничения по времени и объему памяти»,— говорит господин Малеев. Код решенной задачи отправляется в тестирующий сервер, где он проходит сотни тестов, и задача считается решенной, если она прошла их все. «Если хотя бы один тест-код не пройден, увы, задача считается нерешенной, и участники соревнования или тренировки сразу об этом узнают и могут и дальше делать попытки по ее решению, количество таких попыток не ограничено».
Командам предстоит написать алгоритм, который бы удовлетворял всем критериям, и при этом необходимо работать слаженно, четко распределив роли. «В разных командах все по-разному, но довольно распространенное явление, когда кто-то в команде берет на себя роль капитана,— называет варианты стратегии Алексей Малеев.— Во-первых, есть мотивационная составляющая — нужно пять часов отработать на максимально эффективном уровне: ведь если вдруг у вас две задачи, которые не поддаются решению, это может вас расстроить. Может мотивация упасть, вы скажете "да все, пошли отсюда". Но кто-то должен за этим следить и должен принять решение. А если что-то долго не получается, кто-то должен принять решение отложить это пока в сторону, так как есть еще нерешенные задачи. Это такие стратегические решения, которые очень важны в таких соревнованиях, потому что одна ошибка может стоить очень много». Он отмечает, что команды, у которых мало опыта в тренировках и соревнованиях, часто «упираются» в какую-то одну задачу, тратя на нее несколько часов: «Но задач-то 12, и, потратив три часа на одну, остальные 11 придется решать за два часа. В итоге место такой команды будет невысоким в общей таблице».
Чтобы повысить мотивацию участников, организаторы разделили команды на два «дивизиона»: «А» — это опытные команды, «В» — это те, кто только начал заниматься олимпиадным программированием. По итогам тренировок награждаются шесть команд: по три в каждом дивизионе.
Москва—Барселона
В России есть минимум два крупных центра подобных тренировочных сборов: на базе Петрозаводского госуниверситета и в МФТИ. Сборы в МФТИ как раз и переросли сначала в проект Moscow Workshops, а с этого года тренировки проводятся совместно с европейским технологическим университетом Harbour.Space, который находится в Барселоне. В этом городе тренировки будут проходить минимум два раза в год в течение десяти лет. Это будут единственные тренировки такого масштаба в Европе. Их проведение именно в Барселоне организаторы объясняют логистикой — не все могут, да и хотят доехать до России: «Если на географию посмотреть, из Северной и даже Южной Америки сюда относительно близко лететь. Европейцам вообще очень близко, и даже коллегам с Дальнего Востока». Кроме того, в течение десяти лет университет Harbour.Space и Moscow Workshops планируют организовать тренировочные лагеря в Австралии, Аргентине, Индии, Китае, Сингапуре и США.
«В МФТИ мы начали внутренние тренировки в 2010–2011 годах, а открытыми мы стали только в 2012-м,— вспоминает Алексей Малеев.— Во многом мы переняли опыт у наших коллег в Петрозаводске, где такие сборы были запущены раньше. Около семи-восьми лет назад в университете мы начали активно развивать направление Computer Science, а это специальные программы бакалавриата, магистратуры, это набор выпускающих базовых кафедр, связанных с этой тематикой, и, конечно же, начали заниматься чемпионатом ICPC, потому что в каком-то смысле это независимый критерий оценки качества наших студентов».
С 2014 года Moscow Workshops стали проводить тренировки на английском языке. «После этого стало существенно расти число команд из других стран, которые приезжали к нам на тренировки: 8, 11, 13 и так далее,— рассказывает организатор.— Сейчас у нас 150 участников из 27 стран. И наша идея еще в чем. В том, чтобы совместить путешествия и обучение. Сегодня студент может выбирать: он поедет сюда, в Барселону, или к нам, в Москву. И я ему рекомендую съездить и туда, и туда». Алексей Малеев отмечает, что ИТ — молодая, быстроменяющаяся индустрия: «Соответственно, и образование меняется. И лучшие тренеры — это вчерашние студенты-чемпионы. Так мы и стоим историю с Moscow Workshops: сейчас кто-то из вчерашних выпускников работает в университете, кто-то в индустрии, кто-то живет в Москве, в Питере, в Цюрихе, в Мюнхене, но всем нам интересно встретиться вместе на несколько дней, приятно обменяться мнениями и поделиться опытом с молодежью. Так мы выстраиваем все наши программы: это сборная солянка из людей, которые завоевывали медали не так давно и сегодня приезжают тренировать».
В прошлом буткэмпе (тренировочном лагере.— “Ъ”) лагере в дивизионе "А" победила японская команда. Члены ее команды, оказывается, изучают русский язык. Они объяснили, что хотели выучить язык, чтобы пообщаться с русскими программистами, с теми, кто доминирует в чемпионате мира
Как развивался проект Moscow Workshops ACM ICPC
«Нам хотелось показать российскую школу лицом,— рассказывает основатель университета Harbour.Space, организатор тренировочного лагеря в Барселоне Светлана Великанова.— В прошлом буткэмпе (тренировочном лагере.— “Ъ”) лагере в дивизионе "А" победила японская команда. Члены ее команды, оказывается, изучают русский язык. Они объяснили, что хотели выучить язык, чтобы пообщаться с русскими программистами, с теми, кто доминирует в чемпионате мира». «Организуя тренировки здесь, мы хотели показать то, что у нас, в России, есть самое лучшее из сохраненного после развала СССР,— объясняет она.— Этот же принцип работы и самого университета. К нам многие преподаватели из России приезжают вахтенным методом: из Высшей школы экономики, из МГУ, из МФТИ, сотрудники "Яндекса", "Касперского". Но к нам приезжают и со всего мира, в том числе из Силиконовой долины в США. И представители индустрии видят и комментируют наши программы, говоря, какой курс хорошо было бы добавить. И они видят наших студентов, знают их не понаслышке. И на тренировках у нас тот же принцип взаимодействия с компаниями».
Во время работы тренировочного лагеря для участников также организуются встречи с представителями ИТ-индустрии, сотрудниками Google, IBM, Amazon, лекции читают представители Сбербанка, участники обсуждают свои стартапы с инвестором университета, главой компании SDVentures Дмитрием Волковым, одним из спонсоров является и крупная HR-компания Indeed. «Ребята, которые здесь сидят, а тем более те, кто завоевывает медали в ICPC, если захотят найти работу по найму, для них открыты двери почти всех компаний в любой точке мира,— говорит Алексей Малеев.— Первая золотая медаль МФТИ (в ICPC объявляется не только победитель, но и вручается по четыре золотых, серебряных и бронзовых медали) — это мой ученик Яков Длугач, тогда физтех завоевал две золотые и одну серебряную медали. На пятом курсе, а у нас шесть лет длится обучение, он завоевал медаль. У него шестой курс, он путешествовал по всему миру и смотрел, где ему комфортнее жить, так как понимал, что его возьмут в любую компанию. И у него была мечта с детства: он хотел получить лицензию пилота. Он понял, что самая комфортная инфраструктура для этого в Цюрихе, так как там много аэроклубов. И он пошел работать в Google Europe».
В финале чемпионата ICPC один студент может участвовать только дважды. Однако потом, по словам Алексея Малеева, участники соревнований часто продолжают работать вместе: «Я большинству советую сохранить те связи, которые они здесь приобрели. Они же мыслят одинаково. И потом им будет гораздо проще собирать команду, но уже настоящую, реальный проект в реальной компании. В России, например, пример тому "ВКонтакте" — разработка почти полностью сделана бывшими участниками ICPC. А коллеги из Штатов нам говорили, что они уже знают как минимум 300 компаний, которые основаны выпускниками ICPC». «И еще они возвращаются сюда в качестве тренеров, а мы с удовольствием их приглашаем,— сказал он.— Но продолжать этим делом заниматься всю жизнь, наверное, все же неправильно, нужно из спорта перерастать и делать следующие шаги».
«Ребята придумали алгоритм, которого в науке еще не было»
О том, как появляются новые задачи для соревнований по олимпиадному программированию, а также о «типичных путях развития для бывших олимпиадников» рассказал «Ъ» тренер Центра развития ИТ-образования МФТИ Михаил Тихомиров.