Программируем себя на победу: как подготовиться к олимпиадам по информатике

Мы поговорили с Филиппом Грибовым — тренером российской сборной на международной олимпиаде по информатике, преподавателем Факультета компьютерных наук ВШЭ и Кружка Яндекса для талантливых школьников. Он рассказал, как проходят олимпиады по программированию, поделился лайфхаками, как подготовиться, чтобы побеждать в международных соревнованиях, и объяснил, как нейросети могут изменить подход к решению задач.
Программируем себя на победу: как подготовиться к олимпиадам по информатике
Архивы пресс-службы

Как ты попал в олимпиадное программирование?

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

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

Какие ключевые навыки нужны, чтобы участвовать и побеждать в олимпиадах?

Филипп: Во-первых, любовь к математике и другим точным наукам. Важно, чтобы человеку было интересно думать над сложными задачами, связанными с предметом. Ещё важна психологическая готовность к стрессу, умение справляться с поражениями, потому что они неизбежны. Плюс трудолюбие и желание работать, тратить время на закрепление материала и решение задач.

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

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

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

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

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

Расскажи подробнее, как проходит олимпиада по программированию? Какие у нее цели?

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

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

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

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

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ
Unsplash

Тем не менее, мы общались с некоторыми участниками олимпиад, которые сейчас больше развиваются в теории, чем идут в практику. Как ты думаешь, почему?

Филипп: Бывает, что теория привлекает сильнее в некоторых областях. Но обычно всё-таки олимпиадники идут в практику. Многие потом глубоко уходят в написание кода и разработку алгоритмов, устраиваются в большие IT-компании и реализуют сложные вещи.

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

Конечно, они не 100% времени пишут код — соотношение теории и практики сильно зависит от сферы деятельности. Например, в бэкенд-разработке важно развиваться в базовой теории и на неё уже накладывать практику.

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

Ребята, в основном, интересовались машинным обучением?

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

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ
РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

А какой код пишут олимпиадники? Мнения о них делятся: кто-то считает, что они могут перемудрить с кодом, а кто-то стремится нанять на работу только победителей олимпиад.

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

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

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

Если школьник хочет участвовать в олимпиадах по программированию, с чего ему начать подготовку?

Филипп: На самом деле, у всех свой путь. Кому-то повезёт, если в школе будет хороший преподаватель или кружок. Кто-то начинает с Яндекс Лицея, где дают базовые навыки программирования. Другие идут на курсы Stepik по C++ и Python.

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

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ
Unsplash
РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

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

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

Как лучше заниматься — самому или в компании?

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

С каким проблемами сталкиваются начинающие участники? Вы как преподаватели помогаете им с этим?

Филипп: Когда школьники только начинают, они сильно волнуются перед олимпиадами. Это правда большой стресс, особенно если опыта участия мало, а рядом ребята с более прокачанными скиллами. Мне кажется, что волнение — основная проблема, с которой сложно справляться.

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

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

А задания на олимпиадах как-то изменились за последние годы?

Филипп: Если сравнить задачи сейчас и лет десять назад, можно заметить усложнение. Мне кажется, у этого есть простое объяснение.

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

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ
РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

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

А нет ли такого, что из-за этой конкуренции мест на всех не хватает?

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

Есть ли какое-то отличие между международными олимпиадами и обычными?

Филипп: В целом отличий от обычных олимпиад не так много. Например, у той же Международной олимпиады по информатике есть свой стиль задач. Но отличия не сильно существенны и глобально в международных соревнованиях суть задач не меняется.

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

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

Как попасть на международные олимпиады?

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

А как подготовиться к международной олимпиаде, чтобы победить? И в чём профит участия?

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

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

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ
Unsplash
РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

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

Есть ли разница между тем, как готовятся к олимпиадам в России и за рубежом?

Филипп: В России подготовка к олимпиадам очень развита. У нас есть и кружки, и школы, и поддержка государства и компаний. Это помогает многим ребятам, особенно из регионов. Мне кажется, такой подход правильный, потому что позволяет воспитывать больше ИТ-специалистов, которые потом добиваются успехов. В других странах подготовка часто более самостоятельная и разрозненная.

Есть ли у тебя истории успеха учеников, которые достигли больших результатов?

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

Филипп: Да, у меня было немало учеников, которые завоевывали золотые медали на международных олимпиадах. Например, три из четырёх представителей сборной России на последней международной олимпиаде по информатике учились у меня и других моих коллег в Кружке Яндекса и на сборах. На предпоследней олимпиаде тоже было несколько моих учеников.

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

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

Современные технологии вроде генеративных нейросетей меняют формат и содержание олимпиад?

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

Филипп: Пока нет, но в дальнейшем они могут вызвать проблемы. Например, чат-боты вроде ChatGPT очень активно развиваются и уже могут решать некоторые задачи. Да, на данный момент они не наберут высший балл. Но чем больше эволюционирует модель, тем лучше она решает задания. Нам еще предстоит подумать, как с этим бороться в будущем — и стоит ли.

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

Ты сказал «бороться с нейросетями». А если наоборот — разрешить нейросети на олимпиадах? Например, чтобы они помогали писать код и участники могли фокусироваться на скорости или полировке кода?

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ
Unsplash

Филипп: Это сложно, так как нейросети могут выполнять часть работы за участника. Возникает вопрос честности, ведь не у всех есть доступ к таким инструментам. Подобные кейсы могут создать неравные условия, так что сейчас нейросети — спорная область. И пока не стало понятно, что с этим делать, скорее всего организаторы большинства олимпиад запретят их использование.

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

Можешь дать три главных лайфхака начинающим олимпиадникам?

РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

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

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

И третье: ко всем олимпиадам надо относиться как к фану. Результат не должен быть главным критерием. В первую очередь нужно получать удовольствие от решения задач. Тогда вам будет психологически проще участвовать в олимпиадах, переживать возможные неудачи и двигаться дальше.