Российские студенты заняли пять призовых мест из двенадцати в финале чемпионата мира по программированию
Следи за успехами России в Телеграм @sdelanounas_ru
Соревнования по программированию среди студенческих команд проводились в этом году с большим опозданием: в конце мая вместо начала марта. Организаторы, Association for Computing Machinery (ACM) и традиционно поддерживающая соревнования IBM, планировали провести соревнования в Каире, а когда там зимой начались волнения — в Шарм-эш-Шейхе. Финал ACM-ICPC (ICPC — International Collegiate Programming Contest) прошел в Орландо.
В финалах ICPC разыгрываются по четыре первых (золото), вторых (серебро) и третьих (бронза) мест. Нынешний финал в Орландо для российских команд завершился практически так же, как и финал харбинский: пять медалей, одна из которых — золотая. Среди призеров Санкт-Петербургский государственный университет (золото), Нижегородский государственный университет, Саратовский государственный университет (оба — серебро), Московский государственный университет и Уральский государственный университет (оба — бронза).
Это выдающийся результат: значит, в стране сохранились еще кафедры и факультеты, способные готовить инженеров выдающейся квалификации.
Об ICPC и его правилах
В наше время профессия программиста стала менее романтичной. Разработка приложений часто сводится к рисованию, в буквальном смысле, пользовательского интерфейса в и последующей автоматической генерации программного кода. Однако программирование остается увлекательным делом: программист добивается результатов почти исключительно силой воображения, он, в частности, не связан необходимостью изготовления «в металле» опытных образцов проектируемого изделия. Ни одна другая инженерная специальность столь широких возможностей для творчества не предоставляет. В умении применять силу воображения для программирования решения головоломных задач — студенты состязаются на ICPC.
Вот пример турнирного задания («problem», в терминологии ICPC) — «задача выбора столицы». На входе — декартовы координаты нескольких точек на плоскости («городов»). Команда должна разработать программу, которая укажет координаты «столицы» — точки, сумма расстояний от которой до каждого «города» будет минимальной. Решение, т. е. отлаженная программа, проверяется на подготовленном организаторами наборе тестовых данных. Результат фиксирует компьютер, без участия судей. Организаторы следят только за порядком проведения соревнований — например, за тем, чтобы команда во время турнира не общалась с тренером.
Команда, состоящая из трех человек, получает конверт с 10 заданиями, компьютер (на котором ничего, кроме трансляторов и элементарных средств отладки программ, не установлено) и пять часов времени. Цель — решить как можно больше задач. При равенстве числа решенных задач победитель определяется по количеству неудачных попыток сдать задание, времени работы отлаженной программы и др. Правила довольно сложны, занимают несколько страниц, но хорошо формализованы.
В командах разделение труда: кто-то алгоритмизирует, кто-то кодирует и отлаживает. Алгоритмист, бывает, ни разу не прикасается к клавиатуре за все пять часов состязания — а команда выигрывает (так было в 2009 году в Стокгольме).
Зрелищности в ICPC немного. Зал, компьютеры, за каждым три студента. Перед компьютером табличка с названием университета. За правильно решенную задачу команде приносят шарик определенного цвета — он зависит от номера решенной задачи. Тому, кто одолел задачу первым, приносят два шара — такое правило впервые применено в 2010 году. И все.
Но для специалистов происходящее во время соревнований наполнено смыслом. Вот наша команда запнулась на несложной задаче, теряют время — вместо того чтобы бросить ее и решать следующую. Вот китайцы «на флажке», за 10 минут до делайна, отправили задание на проверку — значит, могут обойти наших, с которыми пока что равенство по решенным задачам, но худшие дополнительные показатели, надо ждать результатов проверки решения, а эта процедура может затянуться.
Тому, кто не программировал сам, оценить то, что умудряются сделать за пять часов программисты-спортсмены, невозможно. «Нормальному», т. е. с неплохой математической подготовкой и аналитическими способностями, программисту на каждое из 10 заданий нужно в лучшем случае часа два-три. Команды в финале ICPC иногда решают по восемь задач.
«Нет детей»
Саратовский университет входит в элиту ICPC, его студенты третий год подряд берут медали в финале чемпионата мира. В Саратове одновременно тренируется десяток команд. А в китайских университетах, которые до финала ICPC и не доходят, — не меньше сотни. То, что и в Харбине, и в Орландо китайцы взяли абсолютное первенство, — не случайность. Тенденция к усилению китайских команд последние два года прослеживается особенно отчетливо.
Владимир Парфенов, декан факультета информационных технологий и программирования Санкт-Петербургского государственного университет информационных технологий, механики и оптики, говорит: «Мы уже выбрали все, что можно. Ищем талантливых детей по всей стране, конкурируем за них с другими вузами. Наше положение не сравнить с тем, в котором находятся китайские университеты — у них проблем с детьми нет».
Спортивное программирование — деятельность по сравнению с программированием индустриальным совершенно иная. Но и у индустрии, и у участвующих в ICPC вузов одни и те же проблемы: кадровые. «В этом году в вузы поступают 720 тыс. детей, практически вдвое меньше, чем шесть лет назад. Индустрии просто неоткуда взять специалистов», — говорит директор фирмы «1С» (крупнейший в стране производитель и продавец программного обеспечения) Борис Нуралиев.
Легенда о большом потенциале
Только по этой причине (есть и другие) представление, будто Россия, чьи студенты с неизменным и впечатляющим успехом выигрывают медали в финалах ICPC, может составить полноценную конкуренцию Индии (которая, по самым скромным оценкам, экспортирует софта более чем на 30 млрд долларов ежегодно) на мировом рынке программного обеспечения — глубоко ошибочны. Экспорт программного обеспечения из России едва достиг 3 млрд долларов, и, как признает Валентин Макаров, президент некоммерческого партнерства «Руссофт», объединяющего российских экспортеров программного обеспечения, не имеет шансов приблизится к индийскому.
Но ни индусы, ни китайцы пока что не могут конкурировать с нами на отдельных участках мирового софтверного рынка, и это тоже правда. Там, где требуется экстраординарная способность к решению чрезвычайно сложных, никем прежде не тронутых задач, работают наши специалисты. Центры разработки программного обеспечения в России есть, в частности, у Intel, EMC и других транснациональных IT-компаний. Самый яркий, пожалуй, пример — компания Parallels, поставщик систем виртуализации. Ее президент Биргер Стен (прежде возглавлял Micirosoft в России и был вице-президентом Microsoft) прямо говорит, что центр разработки в России для Parallels — необходимость, нигде больше такого количества программистов уникальной квалификации, способных сделать то, что необходимо компании, нет.
Победы наших студентов на ICPC — ничуть не менее (а скорее — гораздо более) значительный и важный повод для национальной гордости, нежели победы хоккейной или футбольной сборной, от которых будущее страны зависит не слишком сильно. Но и переоценивать значение успехов на ICPC не стоит. Можно привести в пример американские вузы: страна, где сосредоточена мировая софтверная индустрия и находится самый большой в мире рынок программных продуктов, выступает в финалах ICPC хотя и уверенно, но гораздо скромнее, чем российские вузы. Складывается впечатление, что к ICPC в Стэнфорде и MIT относятся как к одной из форм студенческой самодеятельности. Во всяком случае, президент США победителей в Белом доме не принимает. Зато государственная поддержка американской софтверной индустрии оказывается повсеместная и исчерпывающая — с очевидным всему миру результатом.
Кстати, а вы знали, что на «Сделано у нас» статьи публикуют посетители, такие же как и вы? И никакой премодерации, согласований и разрешений! Любой может добавить новость. А лучшие попадут в телеграмм @sdelanounas_ru. Подробнее о том как работает наш сайт здесь👈
28.06.1121:51:52
28.06.1122:21:48
TomskikhAA30.06.1119:09:08
30.06.1119:11:55
TomskikhAA30.06.1119:22:32
30.06.1119:37:09
TomskikhAA01.07.1104:41:59