Международная студенческая олимпиада по программированию 2020

Михаил Густокашин Директор Центра студенческих конкурсов факультета компьютерных наук Национального исследовательского университета

Сергей Заварин

Аналитик факультета компьютерных наук Национального исследовательского университета

Антон Панкратьев

Доцент Московского государственного университета имени М. В. Ломоносова

Олег Христенко

Программист. Технический координатор Открытого Кубка по программированию им.

Е. В. Панкратьев

Московский государственный университет имени М. В. Ломоносова

ACM International Collegiate Programming Contest (ICPC) — самое крупное и известное соревнование по программированию для студентов старших курсов средней школы.

Первое соревнование состоялось в 1977 году во время ежегодной конференции ACM по информатике. С тех пор он ежегодно организуется под эгидой ACM (Association for Computing Machinery).

ACM/ICPC-это командное соревнование с определенными требованиями к участникам: в нем принимают участие только студенты старших курсов и аспиранты первого курса не старше 24 лет; каждая команда состоит из трех человек. В финале можно участвовать не более двух раз. А в региональных-не более пяти.

Участвующие команды должны решить как можно больше задач за ограниченное время.

Перед финалом проходит несколько туров региональных соревнований (четвертьфиналы и полуфиналы); университеты. Представляющие определенный регион. Могут прислать столько команд. Сколько захотят. Однако только одна команда из данного учебного заведения может пройти в Мировой финал. Каждый год финал проходит в другой стране.

Российские университеты впервые приняли участие в ACM/ICPC в 1993 году. Когда организаторы расширили географию ICPC. Создав регион Восточной Европы. С 2000 года российские команды побеждали 11 раз: команда Саратовского государственного университета – один раз. Команда Санкт – Петербургского государственного университета-четыре раза. Университет ИТМО- шесть раз.

Традиционно высока результативность и других российских команд. В 1996 году, например. Команда МГУ впервые вышла в финал. После этого команда сумела пять раз финишировать второй на чемпионате мира и была награждена золотыми медалями; он также один раз завоевывал серебряные и шесть раз бронзовые медали.

Естественно. Участие в соревнованиях мирового уровня требует много времени и сил – то есть наряду с регулярной учебой. Более того, некоторые студенты тоже работают.

Что мотивирует их участвовать в международных соревнованиях по программированию и какие конкурентные преимущества может принести им такой опыт?

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

Есть ряд проблем. Которые студенты должны решить для каждого класса. И если у них есть какие-либо вопросы. Они могут попросить совета.

Студенты, участвующие в соревнованиях. Должны очень много работать. Многие из них собираются вместе несколько раз в неделю по 5-6 часов. А затем тратят свое дополнительное время на решение проблем. Несколько раз в год они также посещают буткемпы. Где интенсивно работают каждый день. Многие из победителей ICPC начали программировать еще в средней школе и хорошо выступали на различных олимпиадах для старшеклассников.

Зачем вообще молодым нужны такие соревнования? Даже если пренебречь такими приятными вещами. Как возможность путешествовать и встречаться с единомышленниками. Даже если отбросить такие факторы. Как страсть к программированию и соревновательный дух. Участие в таких конкурсах приносит некоторые важные дивиденды.

Во-первых, соревнования стимулируют и мотивируют людей много программировать. Поэтому они учатся делать это быстро и безупречно. Это очень полезно для будущей профессиональной работы. Соискателей часто просят решить те же задачи. Что и во время конкурсов, и те. Кто имеет соответствующий опыт. Имеют более высокие шансы получить работу.

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

В-третьих, это, конечно, престижно. Участники ACM/ICPC тратят много времени и усилий. Но получение медали-это большое достижение; победители становятся более привлекательными для потенциальных работодателей. IBM, например. Является одним из постоянных спонсоров финала ACM/ICPC finals; она предоставляет денежные призы победителям и предлагает членам команды. Получившим золотые награды. Возможность стажировки или трудоустройства.

Все это делает участников конкурса более конкурентоспособными на рынке труда.

Если говорить об университетской жизни. То широко распространено мнение. Что университетское программирование может быть вредным для академической успеваемости.

Действительно, бывало. Что лучших участников соревнований исключали за неуспеваемость. Однако такие случаи довольно редки. Более того, то же самое происходит и с любыми другими видами конкурсов или студенческих мероприятий. Не связанных с университетом. Совершенно очевидно. Что если у студента возникают проблемы в университете. То виноват в этом его собственный плохой тайм-менеджмент. А не участие в соревнованиях по программированию.

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

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