«Хакатон это ралли, а олимпиадное программирование — "Формула 1"»

[Chrdk.]: С какими целями создавались Moscow Workshops ICPC и как они соотносятся с международной олимпиадой ICPC? [Алексей Малеев]: Этот проект родился на кампусе Физтеха, и изначально его идеей было обучение студентов. Физтех исторически обучает физике и математике. Программу по computer science мы открыли в 2007-2008 годах, сделали для студентов учебный план, начали открывать новые базовые кафедры «Яндекса», Mail.ru, ABBYY и других, потому что в нашей программе зашито, что студенты, начиная с примерно третьего курса, участвуют в реальных проектах в организациях — либо научных, либо ведущих технологических. И в какой-то момент мы поняли, что есть самый популярный и престижный чемпионат — ICPC. Наши студенты начали в нем участвовать, и нам, конечно, хотелось, чтобы они выступали как можно лучше. Мы пытались их учить внутри университета, но это не так эффективно, как тренировать их вместе с конкурентами. Слева направо: президент Массачусетского технологического института Рафаэль Райф, директор Центра развития ИТ-образования МФТИ Алексей Малеев, ректор МФТИ Николай КудрявцевЕвгений Пелевин, пресс-служба МФТИ [Ch.]: Потому что сразу видно, с кем соревнуешься? [АМ]: Просто это сильно повышает мотивацию. Допустим, ребята во дворе играют в футбол. Они знают, что одна команда всегда побеждает вторую, и это уже норма вещей. А теперь представьте, что к ним пришли ребята из соседнего двора. Обе команды хотят обыграть ту третью. Такой конкурентный принцип работает и здесь. Кроме того, это обмен идеями, потому что со студентами приезжают и тренеры — они читают лекции, делятся своими взглядами на решение задач. Это помогает и нам, и конкурентам. И вот мы просто сделали открытые тренировки, в 2012 году к нам приехали коллеги из Белоруссии, так что формально мы сразу стали международными, но на русском языке. В какой-то момент мы поняли, что нужно делать все на английском, чтобы по-настоящему интегрироваться в международную среду. А дальше поняли, что скучно ездить все время в одно и то же место. Всем хочется путешествовать, особенно молодежь путешествует много. [Ch.]: Как обычно проходят воркшопы? [АМ]: Это примерно 10 дней очень интенсивных тренировок. Мы имитируем условия чемпионата ICPC. Все разбито на три дивизиона: «А», «В» и «С». «А» – это ребята, которые готовятся к финалу чемпионата мира, «В» – те, кто готовится к полуфиналу, «С» – новички. В дивизионе «А» каждый день проходят полноценные соревнования в течение пяти часов, как во время чемпионата. Сначала идет решение задач, потом небольшой разбор, потом дорешивание, то есть, если вы какую-то задачу не решили, то полезно ее потом проработать, написать код и сдать его тестирующей системе уже после того, как вам объяснили, как ее решать. Это очень важный навык. После трех-четырех таких дней люди выжаты. Мы им даем выходной, водим на экскурсии в Кремль, на ВДНХ или в Третьяковскую галерею, чтобы посмотрели на русские культурные ценности, и, конечно, в наши ведущие IT-компании – Яндекс, Mail.ru, Huawei, у которых есть офис в Москве. Мы привозим людей прямо к ним в офис, и они там общаются с настоящими разработчиками, смотрят, как устроена работа. [Ch.]: У олимпиадных задач есть специфика? Они отличаются от задач, которые решают программисты решают на работе? [АМ]: И да, и нет. Программисты разные бывают. Мы работаем с элитой. И в компаниях есть разные подходы к решению задач. Хороший пример — «ВКонтакте». Там сейчас работают три чемпиона мира ICPC. Мы знаем Павла Дурова как основателя «ВКонтакте», потом Telegram. Но у него есть брат Николай. Вот Николай Дуров вместе с Андреем Лопатиным и еще одним их сверстником в 2000 году, будучи студентами СПбГУ, впервые стали в этом чемпионате чемпионами мира от России. И примерно в то же время запустился «ВКонтакте», где Николай играл роль главы по технологиям. Лопатин тоже там работал, и так исторически сложилось, что у этой компании ядро разработки — выпускники сообщества ICPC, и когда они дальше внутри компании пишут код, решают свои задачи, они пишут примерно также, как они привыкли писать его, решая задачки на олимпиадах. [Олег Христенко]: Павел Дуров – гуманитарий, он придумал идею, а Николай и Андрей написали весь движок «ВКонтакте». Почему «ВКонтакте» так выиграл? Были же уже и «Одноклассники» и другие. Но «ВКонтакте» был написан очень оптимально. Он написан профессионалами. Эта компания и сейчас опирается на ребят из Питера, из СПбГУ, и сейчас там всеми ответственными делами по технике рулят чемпионы мира. Telegram тоже писал Николай Дуров, та же группа людей, что писала «ВКонтакте». Этот мессенджер завоевал популярность не в последнюю очередь потому, что он просто работает — и при плохой сети, и так далее. Павел сказал какие-то технологические лозунги, но реализовали их эти люди. Олег ХристенкоИсточник: it-edu.mipt.ru [Ch.]: Так в чем специфика кода, который пишут на олимпиадах? [АМ]: Что такое олимпиада: это 10-15 задач, на решение которых отводится пять часов. Задач нужно решить как можно больше, и чем быстрее команда это сделает, тем лучше. Поэтому олимпиадный код более короткий. В промышленном коде, возможно, больше строчек, более подробное описание, потому что код для промышленности – это код, который должен прочесть, по-хорошему, любой сотрудник компании из этого департамента, понять, что происходит, и что-то добавить или исправить. Кроме того, на олимпиаде нужно писать не просто алгоритм, а наиболее эффективный алгоритм. Нужен не просто правильный ответ. Есть ограничения по использованию объема оперативной памяти и по времени работы процессора. Поэтому, например, алгоритм полного перебора просто не подходит. Для маленьких примеров он уложится, наверное, в это ограничение, а для больших задач будет просто неэффективен. В промышленном коде иногда, чтобы что-то было более устойчивое и стабильное, не добиваются прямо такого жесткого ограничения по памяти и по времени. [Ch.]: Вы начали говорить про элиту программистов, а чем вообще элита отличается от неэлиты? [АМ]: Сам чемпионат и есть селекция, когда мы отделяем тех, кто лучше работает, от тех, кто хуже. А когда мы смотрим на сами задачки, там без математической подготовки просто нельзя. Но, во-первых, чемпионат командный. Команда состоит из трех человек. Еще ни разу ни одному гению не удавалось взять с собой двух друзей, которые ничего не знают в программировании, и в одиночку выиграть чемпионат. Были прецеденты, когда люди доходили до второго места, но победителями никогда не становились. Важна еще командная работа. А дальше есть разные роли. Есть роль кодера — того, кто быстро пишет простые задачи, может прочитать условие и сразу понять, что нужно сделать, дальше садится писать этот код. Бывает задачи очень сложные, в которых нужно сперва придумать модель, решить ее математически, а потом с помощью одного или комбинации нескольких алгоритмов запрограммировать. Очень редко, но бывают задачи, которые можно решить полностью математически. Значит, нужен математик в команде. Среди физтеховских команд, как правило, два человека в команде имеют хорошую математическую подготовку, они в том числе призеры разных олимпиад по математике. Есть еще роль капитана, который должен отследить, как вся команда работает в течение всего контеста (соревнования — прим. «Чердака»), координирует работу, потому что компьютер один на троих, как и комплект задач. В общем, разные есть роли, но хорошие программисты должны, безусловно, обладать математической базой. Moscow Pre-Finals ACM ICPC Workshop 2017 / Youtube [Ch.]: Олимпиада – спортивное мероприятие. Спорт больших достижений – не про здоровье, а скорее про вред организму. А спортивное программирование заставляет чем-то жертвовать? [АМ]: Жертвовать точно заставляет. Как любому профессионалу в каком-то деле, вам приходится много времени на это тратить, чтобы развиваться. Лауреаты конкурсов по музыке же не просто учатся в музыкальной школе или консерватории – они тратят очень много времени, и у них, соответственно, не хватает времени на таком же уровне знать математику, информатику и физику. Также здесь. Я не сторонник того, чтобы в школе заниматься исключительно информатикой и ничего больше не учить, школа – это база, там и литература с историей нужны. В университете уже больше задается специализация. Но случается, что чемпионам, выигравшим много олимпиад, становится сложно заниматься чем-то другим. Такие люди, как правило, становятся тренерами. Кто-то становится — просто потому что ему нравится учить, но это единицы. А для большинства олимпиада – способ вовлечения в программирование. Они там развиваются, соревнуются, а потом уходят в какую-то хорошую компанию. Мы знаем, что у нас на рынке труда большой дефицит кадров в IT – это значит, открытых вакансий больше, чем реально есть специалистов на рынке. За ними компании охотятся, вакансии не закрываются, зарплаты очень высокие, выше среднего по рынку. И как оказывается, это наносит свой отпечаток на отношение людей к своей работе. [Ch.]: Какой именно отпечаток? [АМ]: В IT-компаниях люди часто переходят с места на место. Средний срок работы в одной компании, как в Mail или Google – около двух-трех лет. [Ch.]: Почему? [АМ]: Потому что рынок не насыщен специалистами, и эти люди понимают, что они могут довольно просто перемещаться между компаниями, и если они уходят из одного места, перед ними опять открыто множество разных вакансий. Это дает им возможность искать себя. Сделал что-то интересное — понравилось, хочу новое попробовать — и человек переходит в другую компанию. [Ch.]: Вы говорите, что топовые программисты, в том числе победители олимпиад, могут для себя выбрать любую компанию, а что им интересно? Есть какая-то область, где сейчас происходит самое интересное? [ОХ]: В основном тенденция такая, что люди либо создают свои интересные технологические стартапы, либо идут в «Яндекс», Google, Mail.ru и попадают в отдел либо карт и геосистем, либо поиска. По сути, олимпиадное программирование – это ускоренный интенсивный курс реальной жизни, решение сложных алгоритмических задач на очень высоком уровне эффективности. Системы поиска – это передний край, где нужны реально самые передовые и эффективные алгоритмы, чтобы хоть как-то справляться с растущим объемом информации в интернете. Вряд ли такие топовые программисты пойдут рисовать сайт или делать что-то такое, где не нужна эффективность, а спортивное программирование – прежде всего про эффективность. Еще последнее время интересная отрасль, куда идут люди – финансовая. Это автоматизация торговли на бирже, искусственный интеллект для решения финансовых задач – рынок тоже весьма перспективный. Сейчас автоматизация, ИИ – передний край. И олимпиады по программированию готовят бойцов переднего края, а не тыловиков. Что такое олимпиада: это человек пришел, увидел задачу, в которой ему что-то знакомо, и нужно за пять часов работы в команде сделать решение. За это время обычный программист успеет только подумать над задачей. Moscow Pre-Finals ACM ICPC Workshop 2017 / Youtube [Ch.]: Кто придумывает эти задачи и почему их так сложно найти? [АМ]: Оригинальный контент – одна из самых сложных задач, когда мы работаем с элитой. Тренеров, готовых работать на таком уровне, не так много. Чтобы выиграть чемпионат, нужно не просто выучить теорию, но и прорешать огромное количество задач. Конечно, бесполезно решать одну задачу по три раза, она каждый раз должна быть новая и оригинальная. Их составляет то небольшое число тренеров, которые у нас есть – это преимущественно выпускники российских университетов и ученики, которые по каким-то причинам в чемпионате не участвуют. И все равно задач не хватает. Мы в этом году провели шесть учебных лагерей, каждый такой лагерь — 8-9 контестов. Контест – в среднем по 8-10 задач. Можете понять, сколько уникальных задач нам нужно собрать. [Ch.]: А нельзя брать реальные задачи, с которыми сталкиваются реальные программисты в отрасли? [АМ]: Их не так много, и они требуют времени на адаптацию. Есть реальная проблема программиста в отрасли, дальше ее нужно немного адаптировать к формату ICPC. [Ch.]: То есть не так уж много в программировании нерешенных задач? [ОХ]: Здесь ситуация такая – есть понятие формат и неформат, и ICPC это, прежде всего, про формат, почему это соревнование и выигрывает по репутации у хакатонов и других неточных соревнований. В реальной задаче не даны жесткие ограничения, и вообще как-то непонятно, что делать. А в ICPC должна быть выверенная жесткая формулировка. Любая неточность – это минус жюри. Возьмем очень впечатлившую меня команду ИТМО, которая год назад была чемпионом. Они во время тренировок писала в день три пятичасовых тренировочных контеста, то есть, решали задачи по 10-15 часов в сутки. Но один тур – это десять задач, а любая сильная команда должна тренироваться два раза в неделю примерно 30 недель. 30 на два раза в неделю по 10 контестов – это 600 задач одна команда в год съедает. И она еще не с первого года едет на чемпионат. А в одном МФТИ сейчас много сильных команд. От редакции: уточнять год чемпионства, говоря о команде ИТМО, строго необходимо. Вот уже 7 лет подряд на ICPC побеждают только россияне, а в 2012-2017 годах «чемпионский пояс» вовсе не покидал пределов Санкт-Петербурга, переходя между СПбГУ и ИТМО. Чемпионских команд у ИТМО — четыре. [АМ]: 1000 решенных задач – это минимальный порог! [ОХ]: Года с третьего они заходят в чемпионат, прорешав около 2000 задач из самых разных источников. Источники пересекаются, а задачи съедаются с огромной скоростью. При этом набор задач ограничен правилами, и задача должна быть идейно новой. То есть, это 2000 красивых математических идей на реализацию. А задачи, которые есть в промышленности, для ребят в большинстве случаев оказываются, как они говорят, «баяном». И возникают еще проблемы с неточными формулировками. Мы в свое время делали чемпионат для компании Huawei — они пытались давать эти задачи. В результате ребята-победители из МФТИ, ИТМО и Уральского федерального университетов занимались, в основном, тем, что исправляли условия и подправляли баги в формулировках. Если можно сравнить обычное программирование и соревнования, то хакатон – это ралли, а олимпиадное программирование – «Формула 1». Там нужен идеальный трек. Любая выбоина – машина сбоит, и больше на этом треке Гран-при не проведут. [АМ]: C задачками у нас правда сложно, их надо много придумывать, и это требует много человеко-часов. Что-то мы придумываем сами нашим сообществом, а чем-то обмениваемся с международными коллегами. Вот сейчас мне в фейсбук с Кубы написали — у них там такие же сборы проходят и тот же вопрос — помогите с контентом. [Ch.]: В Международной олимпиаде по программированию победителями до 2000 года были одни американцы и австралийцы, а с 2000 начали практически все время побеждать россияне и китайцы, один раз поляки. Что произошло в 2000 году? [АМ]: Надо сказать, что русские впервые приняли участие в соревнованиях в сезоне 1993-1994 годов (сама Международная студенческая олимпиада по программированию проводится в современном формате с 1977 года — прим. «Чердака»). Во-первых, сначала это было локально в США – Европа только в 1990 году присоединилась. Во-вторых, сложно было с материально-техническим обеспечением: сложно найти компьютеры, хотя они более-менее были, сложно доехать до места проведения. В 1993-94 годах поехали две университетские команды — ИТМО и МГУ. Люди собирали по две-три компании спонсора, чтобы просто доехать до места проведения олимпиады и вернуться. Такая была сложная ситуация. ACM ICPC (International Collegiate Programming Contest) в Екатеринбурге, 2014 годДонат Сорокин / ИТАР-ТАСС [Ch.]: Начали участвовать в 1993 году, а побеждать – в 2000-м. за это время просто закупили компьютеры? [ОХ]: До этого были вторые и третьи места, начиная с 1997 года. Например, в 1998 году [российские программисты] заняли второе место, после чехов. А с 1990-х была проблема в том, что задачи были на английском, которого люди не знали. И особо не было понятно, как готовить участников к этому новому формату соревнований. Потом поняли, и пошли успехи, появилась система. [Ch.]: Техники подготовки олимпиадников в разных странах отличаются? Есть какие-то секреты? [АМ]: Как я уже говорил, надо тренироваться с конкурентами. Это помогает и им, и нам. Не надо от них изолироваться и говорить, что у нас какие-то суперсекретные технологии и мы про них не расскажем. Нет, надо тренироваться с ними. Сейчас к нам приезжают ребята из более чем 190 университетов из 55 стран. Причем помимо сильных русских университетов там участвуют и китайские университеты. Если говорить про западные вузы, то западное побережье [Америки] мы, может, и не все охватили, а Пенсильвания, Корнельский университет тоже отправляют к нам своих студентов. [Ch.]: А почему отправляют? У вас есть специфика? [АМ]: Ну мы и формат придумали, и это наша русская образовательная школа. [Ch.]: В чем ее сущность? [АМ]: Наверное, в первую очередь задачи, которые мы собираем уникальным образом. Мы умеем составлять и подбирать их под различные темы. В дивизионе А мы делаем чемпионат, а в дивизионе В даем еще и лекции, разбираем тот или иной алгоритм, на следующий день даем задачу на эту тему – не так много людей, кто на таком уровне готов работать со студентами. Наше тренерское сообщество сегодня лучшее в мире. Наши тренеры – это вчерашние чемпионы, как раз из тех, кто с 2000 года становились чемпионами мира. Есть ли дополнительные секреты, про которые не рассказываем других? Есть конечно, но мы про них знаем и молчим. MoscCode 2018 / Youtube [ОХ]: По сути дела, просто у нас есть система, а в других местах не придумали, как ее построить – либо нет ресурсов, либо нет команд, и это мало популярно. Если у кого-то есть несколько сильных команд, им выгодно, либо чтобы мы приехали и провели у них кэмп, либо прислать людей к нам, а не пытаться копировать эту систему. Зачем, если проще сотрудничать? [Ch.]: Почему не хватает программистов, если в индустрии такие возможности и такие зарплаты? [АМ]: Это зацикленная машина. Если вы просто даете разнарядку в вузах открыть еще сто тысяч мест по специальности IT, это сделать довольно просто. А дальше смотрите: кадров на рынке не хватает, уровень зарплат существенно выше среднего. А в университете он около среднего. Это значит, что из университета все хорошие ребята вымываются в индустрию. Когда вы набираете новых студентов, не важно, набираете вы сто человек или сто тысяч, кто-то должен их учить. А учить некому – все ушли в индустрию. Соответственно, новые студенты вырастают, но не становятся квалифицированными. Они не насыщают рынок, и получается замкнутый цикл. Что нужно? Всячески стимулировать квалифицированных студентов, чтобы они оставались в образовании. Тогда каждый из них может в год обучать по десять человек. Через год одного оставили – он обучит уже десять хороших людей, те – сто. Надо насыщать рынок хорошими преподавателями. Надо оставлять в университетах квалифицированных людей и платить им достаточные деньги. [Ch.]: Если программистов некому учить, то вузы просто выпускают неквалифицированных программистов? [АМ]: В среднем, увы, да [Ch.]: И поэтому возникает ситуация, что много программистов, а хороших не найдешь, на что вечно жалуются компании? [АМ]: Да, ровно так. [Ch.]: Есть расхожее мнение, что программистам даже не обязательно идти в вуз, в вузах учебные программы быстро устаревают, можно и самому все выучить по пособиям в интернете. Насколько это реально? [АМ]: Есть такие мнения, но это не так. Коллеги из одной из наших компаний рассказали, какой они провели эксперимент. При отборе на работу кандидат проходит цепочку собеседований – с эйчарами, потом техническими специалистами, где нужно решить какие-то задачи и показать свою квалификацию. И вот они взяли совсем юных студентов первого курса. Из них кто-то проходит через эту цепочку и попадает в компанию. Так же можно пройти на четвертом, пятом и шестом курсе. А дальше в компании сравнили, чем первая группа отличается от второй, пока они работают в одной организации. Оказывается, первая группа, которую взяли на первом курсе, не растет в рамках компании — как их взяли, так они и сидят. Их все устраивает, они не очень целеустремленные и никак не развиваются. А индустрия развивается быстро. Каждый человек вынужден постоянно что-то новое учить, вместе с компанией двигаться вперед, это же все сводится к человеческому капиталу. А вот группа, которая закончила хотя бы четыре-пять курсов – это амбициозные ребята, они растут в компании, в нужное время становятся руководителями групп и департаментов и дальше тянут компанию вперед. Почему? Потому что образование, особенно его фундаментальная часть, развивает людей, их способность к критическому мышлению, к анализу, чтобы можно было на более глубоком уровне строить модели и анализировать ситуацию. Но кроме того, это отбирает мотивированных целеустремленных людей. В эйчар-департаментах это признанный факт. Возьмем сверстников, один из которых не поступил в университет, а второй поступил, но ни дня не учился. Казалось бы, оба не учились. Но поступивший будет гораздо более успешным, чем тот, кто даже не пытался поступить, потому что он умеет поставить цель и добиться ее. в университете надо сдать экзамены, подготовиться к ним, написать мотивационное эссе. Это очень хороший критерий отбора людей. [Ch.]: Современное российское образование как-то сказывается на уровне студентов, которые приходят к вам учиться? [АМ]: ЕГЭ, конечно, немного поменяло картину. Студенты стали больше готовиться к нему и целенаправленно решать эти задачи. Но олимпиады принципиально не изменились, точно также в них участвуют талантливые ребята. И в этом отношении мы в более выгодном положении, чем другие университеты. В целом, мне кажется, наше школьное образование довольно хорошее, потому что у нас высокий уровень математики, и особенно абстрактных вещей. Мы учим алгебру с пятого класса, у нас довольно интересная программа по физике. В пятом классе детям рассказывают, что такое а+b возведенное в квадрат – это на самом деле довольно высокий уровень абстракции, не во всех странах так. Плюс геометрия, стереометрия, планиметрия, которые развивают абстрактное мышление и помогают нашим студентам участвовать в олимпиадах и их выигрывать. [Ch.]: Есть разница между школьниками из Москвы и регионов? [АМ]: Разница есть. ЕГЭ дало возможность человеку поступать в любой вуз страны, и это правда работает, по почте к нам приходят очень хорошие заявления. Живет человек в городе или в деревне – он решил задачу хорошо и может поступить в любой вуз. Но, с другой стороны, ЕГЭ можно реализовать по максимуму только в ограниченном числе университетов в особых городах. Если вы пытаетесь свои 300 баллов ЕГЭ реализовать в каком-то региональном городе, там может просто не быть сильного университета. И это? с одной стороны сложность, потому что региональные вузы потеряли некоторую часть абитуриентов. С другой стороны, мы сейчас налаживаем программы взаимодействия между нашим университетом и региональными вузами. Например, когда к нам из региональных вузов приезжают люди в магистратуру, а потом в аспирантуру возвращаются к себе. Также в Moscow Workshops — у нас недавно был воркшоп на 200 человек, и большинство приехало из разных регионов России. Это значит, что мы даем возможность им посоревноваться с разными ребятами и поучаствовать в этой конкуренции. [ОХ]: Как ни странно, система ICPC, придуманная американцами, может хорошо сработать в России, точнее – ее ограничение, что в финал может пройти только одна команда от вуза. Если человек увлечен спортивным программированием и хочет попасть в финал среди лучших из лучших, но несколько слабее команд МФТИ, до него очередь никогда не дойдет – он никогда не прокачается настолько, чтобы убрать с первых мест этих монстров. Можно болтаться в середине таблицы, а можно остаться в своем родном университете, получать образование там и докачиваться дистанционно, ездя на наши воркшопы и по обмену в Физтех, и при этом участвовать [c командой] от своего родного университета. ICPC — это как раз стимул людям оставаться в своих локальных университетах. Есть вузы, которые говорят «а что это такое, зачем мы будем давать деньги?» А соседний университет в том же городе наоборот посылает к нам своих студентов. Поэтому нужна кооперация с другими университетами, они должны понимать, что надо не жаловаться, а тянуться за лидерами, кооперироваться с миром. Кооперация выгодна всем.

«Хакатон это ралли, а олимпиадное программирование — "Формула 1"»
© Чердак