Олимпиадное программирование: что, как и почему Россия впереди всего мира

Олимпиадное программирование: что, как и почему Россия впереди всего мира

Конспект подкаста «Запуск завтра»

По старой традиции публикуем конспект подкаста «Запуск завтра», который (как и мы) выходит при поддержке «Практикума». Если есть время, слушайте весь выпуск, если нет — читайте наш текст. 

О герое

Елена Андреева — член жюри Всероссийской олимпиады по программированию, член экспертного совета в «Сириусе», заведует кафедрой в СУНЦ МГУ. Команда Лены два года подряд становилась чемпионом мира по олимпиадному программированию.

Что такое олимпиадное программирование

Олимпиадное программирование — студенческие соревнования. Это значит, что члены одной команды должны быть не из одной страны, как на Олимпийских играх, а из одного вуза. Студенты получают набор задач и решают их с помощью кода и алгоритмов. 

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

Чтобы тренироваться, тебе не нужен личный тренер и стадион — в интернете полно ресурсов, где можно решать задачи. А ещё есть форумы, где можно задать вопрос и где тебе помогут найти решение.

Мне запомнилась речь одного американского мальчика, который дважды выигрывал олимпиаду по информатике. В своём выступлении он благодарил родителей и платформу Codeforces. Это такой сайт, где тренируется большинство начинающих программистов и где они могут общаться друг с другом. Так вот, эта платформа сделана у нас в Саратове.

Почему мы всё время выигрываем

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

2012 год ― ИТМО.

2013 год ― ИТМО.

2014 год ― СПбГУ.

2015 год ― ИТМО.

2018, 2019 год ― МГУ. 

Давайте подумаем, как так получается.

Чтобы команде получить статус чемпиона мира, должны родиться талантливые участники. Население страны должно быть не маленьким, чтобы повысить вероятность такого явления. У нас хватает молодых ребят, но в этом плане нет особого преимущества. Китай и Индия сильно нас опережают по этому показателю, а американские студенты, даже если они из России, скорее будут выступать за свой вуз. 

Следующий фактор, который влияет на вероятность чемпионства, — система образования. Здесь у нас тоже всё неплохо, но в Америке вузовское образование всё-таки посильнее, чем наше: там сфера обучения гораздо быстрее меняется под влиянием IT. Тем не менее почему же эти гениальные китайцы, которые выигрывали школьные олимпиады, не могут обыграть российские команды, собираясь все вместе в топовом вузе? Ответ прост — тренировки. 

В России хорошо развита система подготовки к турнирам по программированию: это и сборы, и различные внутренние соревнования. А главное, нашим ребятам во всём этом интересно участвовать.

Зачем участвовать в олимпиадах по программированию

Если ты одарённый программист, то у тебя есть другие способы себя занять, кроме как заниматься олимпиадами. Например, зарабатывать деньги. 

Ещё пять лет назад не было такого, чтобы студенты младших курсов в основном все работали. На втором — единицы шли на стажировки. Сейчас многие талантливые ребята, даже призёры международных олимпиад, могут не окончить вуз. Как они говорят: «Ваша учёба мешает моей работе». 

Мне нравится, что раньше на этот счёт говорили в Google: «Мы не любим брать на работу людей, у которых нет высшего образования, хотя бы диплома бакалавра. Если такой сотрудник не осилил квест получить диплом, то точно так же может завалить любой проект». 

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

Задачи на олимпиаде заставляют думать и отметать неэффективные решения

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

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

Другой пример — задача про реновацию на московской олимпиаде. Было много вводных: дома разной этажности, разная эффективность на квадратный метр строительства, стоимость квадратного метра и так далее. Надо было по определённым критериям выбрать, что и как нужно строить, чтобы проект максимально эффективно решал вопрос реновации.

Я хочу, что как можно больше студентов не то чтобы участвовали в олимпиадах, а хотя бы знали об их существовании. Чтобы они понимали, что для многих задач есть более эффективные решения, чем просто в лоб.

Например, если нам нужно найти слово в огромном тексте, то самое простое решение — приложить слово к началу текста и сравнить каждую букву. Потом сдвинуть на одну букву, снова сравнить и так далее. Есть алгоритмы, которые умеют это делать, но это очень долго. Алгоритмы, которые применяют на олимпиадах, могут делать это гораздо быстрее.

Как Елена тренировала чемпионов 

Когда мы готовились к соревнованиям, ребята были довольно самостоятельными: они сами организовывали тренировки и участвовали в сборах. 

Моя фактическая роль была в том, чтобы решать психологические проблемы участников команды и разрешать конфликты. В этом плане я выступала больше как спортивный психолог. 

Ребята были настроены серьёзно и задолго до турнира «входили в форму». Они заранее скачали систему, на которой проводится олимпиада, и тренировались исключительно в ней. У команды была выстроенная последовательность действий, кто и что делает буквально по минутам. Каждой мелочи уделялось внимание.

Я думаю, что именно такого внимания к мелочам не хватает американским и китайским командам, чтобы победить. Они думают, что можно собрать трёх топовых участников, каждый из которых отлично решает, и этого достаточно. Практика показывает, что нет. 

Когда мы готовились к китайской олимпиаде, то старались вставать в 6 утра. Олимпиада проводилась в китайском часовом поясе, и мы писали код в условиях, которые были максимально приближены к реальным соревнованиям. Тренировки были серьёзными: утром ребята решали одни задачи, потом отдыхали и шли дорешивать те, что сразу не получилось. Ещё решали задачи с прошлых чемпионатов мира, прямо как в шахматах. 

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

Даже на уровень регионального этапа Всероссийской олимпиады по информатике средний школьный учитель подготовить не может. Он может это сделать, если несколько лет будет глубоко заниматься предметом и изучит олимпиадное программирование как сферу. Для подготовки важно знать, как соревнования устроены изнутри. 

То, что школьный учитель не может подготовить к олимпиадному программированию, — не страшно. Беда в том, что люди, которые хорошо разбираются в программировании и могут этому научить, не будут работать в школе или вузе. Востребованным специалистам сложно найти время, даже если им нравится учить детей решать задачи. Многие из них начинают обучать и работать параллельно, а потом всё-таки уходят, потому что становится сложно выкраивать время на преподавание. 

В полной версии подкаста

7:00 Как Лена нашла ребят, которые потом стали мировыми чемпионами

11:30 Проблема кадров. Как студенческая олимпиада конкурирует с IT-компаниями за специалистов 

19:40 Мир устал от российских побед. Когда это изменится? 

26:00 Как Лена тренировала свою сборную на даче 

32:30 Как выбирают страну и город для чемпионата 

36:10 Как придумывают олимпиадные задачи 

43:00 Как Лена меняет школьную программу по информатике 

Редакторы:

сервис «Чистовик», Максим Ильяхов

Корректор:

Ира Михеева

Вёрстка:

Кирилл Климентьев

Иллюстрация:

Алексей Сухов

Соцсети:

Алина Грызлова

Совет
Если вы айтишник, оставьте в кармане своей зимней куртке 300-400 тысяч рублей. Для вас это незаметно, а следующей зимой будет приятно обнаружить в кармане подарок от себя из прошлого. В общем, приходите в ИТ, у нас хорошо.
А если серьезно?
Совет Совет Совет Совет
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Что такое трояны и вирусы — на самом деле

Чем может заразиться компьютер и насколько это реально страшно.

easy
Собираем сайт-портфолио для фотографа

Используем CSS Grid.

easy
Как в России появился каршеринг
Как в России появился каршеринг

Конспект подкаста «Запуск завтра»

easy
Что такое «Докер» и зачем он нужен
Что такое «Докер» и зачем он нужен

Это как полуфабрикаты из супермаркета, только с программами.

easy
iTerm2: модный терминал маковода
iTerm2: модный терминал маковода

Как установить и начать пользоваться.

easy
Как называть переменные и функции, чтобы вас уважали бывалые программисты
Как называть переменные и функции, чтобы вас уважали бывалые программисты

Если вы опытный разработчик, покажите эту статью начинающим.

medium
Как программируют Arduino

Многие думают, что на языке Wiring, но на самом деле…

medium
Невзламываемый шифр Вернама
Невзламываемый шифр Вернама

Его нельзя взломать даже теоретически.

medium
Можно ли отключить интернет?
Можно ли отключить интернет?

Разговор с техническим директором компании Qrator Артёмом Гавриченковым.

easy
Лучшие языки программирования для старта в 2021 году
Лучшие языки программирования для старта в 2021 году

Выбери сейчас, чтобы не опоздать.

easy
easy