«Мечтаю победить»: подготовка к олимпиадам по программированию и математике в Нижнем Новгороде
В нижегородской Вышке в рамках пилотного проекта IT-кампуса «НЕЙМАРК» стартуют занятия по олимпиадному программированию для школьников, заинтересованных в изучении компьютерных наук. Занятия проводит Петр Калинин, старший разработчик компании «Яндекс», бронзовый призер Международной олимпиады школьников по информатике (IOI) 2001 года, золотой призер IOI 2002 года.
Занятия на курсе Петра Калинина выстроены последовательно: от основ языка программирования до продвинутых алгоритмов и структур данных. Школьники научатся писать чистый код и решать олимпиадные задачи в соответствии с требованиями соревнований всероссийского уровня. Впоследствии эти навыки помогут ученикам поступить в вузы на специальности, связанные с информационными технологиями, пройти собеседования в крупных IT-компаниях или построить академическую карьеру.
Олимпиадное движение по информатике среди школьников в Нижнем Новгороде стартовало в начале 1990-х благодаря ученому, программисту Владимиру Денисовичу Лелюху, воспитавшему многих победителей и призеров всероссийских и международных олимпиад, участников заключительного этапа Всероссийской олимпиады по информатике. Сегодня его ученики разрабатывают собственные курсы с учетом появления новых технологий и возможностей дистанционного обучения.
Трудолюбие или талант?
Ученик лицея №40 Константин Осинин отмечает, что кроме языков программирования Python и C++ за 2 года в Школе олимпиадного программирования Петра Калинина он освоил много алгоритмов, упрощающих написание программ, и «научился мыслить последовательно и четко».
Константин Осинин, ученик лицея №40
Я очень горжусь дипломом 3 степени на олимпиадах им. Келдыша и им. Лелюха, моя заветная мечта – дойти до заключительного этапа во Всероссийской олимпиаде по математике или информатике. Хочу в будущем устроиться на работу в крупную IT-компанию.
Петр Калинин не делит учеников на «слабых» и «перспективных», траектория обучения и набор задач одинаковы для всех, но каждый ученик проходит программу в индивидуальном темпе.
Петр Калинин, кандидат физико-математических наук
Я преподаю больше 10 лет, и изначально я пытался подстраиваться под уровень пришедших ребят, читать общие лекции. Однако это оказалось неэффективным, учитывая разную базовую подготовку учеников. Сейчас теория и задачи размещены на сайте с функционалом проверки. Если школьник сильный, он освоит программу быстрее.
Руководитель Школы информационных технологий и математики при Центре довузовской подготовки НИУ ВШЭ – Нижний Новгород, с 1993 по 2005 г.г. член методической комиссии и жюри Всероссийской олимпиады школьников по математике, Дмитрий Юрьевич Кузнецов придерживается аналогичного подхода.
Дмитрий Юрьевич Кузнецов,
руководитель Школы информационных технологий и математики при Центре довузовской подготовки НИУ ВШЭ – Нижний Новгород
Каждый школьник идёт своей траекторией в зависимости от количества труда, а на занятиях происходит разбор тем и методов, которые надо знать обязательно.
За 30 лет преподавательской практики Дмитрий Юрьевич подготовил больше сотни учеников, которые поступили в вузы с помощью дипломов олимпиад самого высокого уровня.
Разработчик авторских преподавательских методик и математических игр убежден, что для победы в олимпиадах природных способностей недостаточно - большинство ребят приходили к успеху в результате упорного труда: «Главное - уметь и не бояться самостоятельно трудиться, читать книги, статьи, решать большое количество задач. Олимпиадной математикой оптимально начинать заниматься с 7 класса, тогда, как правило, школьник все 4-5 лет идет с положительной производной».
Когда и с чего начать?
13 - 14 лет – оптимальный возраст для начала занятий олимпиадным программированием, считает Петр Калинин. Однако есть ученики, которые приходят на занятия раньше, и к 7 классу их мечта «победить на Всеросе» приобретает достаточные основания. Ученик 40 лицея Тима Бацын гордится, что в 6 классе получил диплом I степени на олимпиаде Келдыша для 7-8 классов, а позже стал призером нижегородского региона на олимпиаде по информатике для 9 классов.
Тима Бацын, ученик 40 лицея
Я начал заниматься олимпиадным программированием с 4 класса, а до этого немного «играл» в Lightbot-а и писал визуальные программы для лего-роботов. На занятиях Петра Калинина я узнал много новых алгоритмов, методов тестирования кода, получил большой опыт участия в олимпиадах по информатике. Могу быстро написать какую-то программу для себя, например, «операционную программу» для самодельного станка лазерной резки или алгоритм стабилизации и открытия в нужный момент парашюта на небольшой твердотопливной ракете, или программу отслеживания результатов другого школьника на codeforces.com. Мечтаю победить на Всеросе!
Для занятия олимпиадным программированием никакого входного тестирования нет, однако есть ряд навыков, которые, по мнению Петра Калинина, помогут будущему ученику достичь высоких результатов:
- Высокая математическая культура. Чтобы преуспеть в олимпиадном программировании, ученик должен обладать математическим складом ума, уметь мыслить последовательно и четко, обнаруживать причинно-следственные связи и прогнозировать события.
- Умение самостоятельно искать информацию. Читать, понимать текст и не пропускать написанное мелким шрифтом, - тоже важная часть работы.
- Интерес к решению сложных задач. Для меня важно научить ребят придумывать алгоритмы, искать ошибки. Если считать целью только участие на олимпиадах, это сильно искажает обучение.
Техника и тактика олимпиад
Параллельно с обучением новым алгоритмам Петр Калинин уделяет внимание на занятиях технической стороне олимпиад – разбирает с участниками системы оценивания и проверки кода, тактики поведения на туре.
- Нужно уметь планировать действия с учетом типов и количества задач. Классический пример – не зависать на одной задаче, если что-то не получается. Потратить время в начале и прочитать все задачи сразу, чтобы понимать сложность и объем. Из всех вариантов решения выбрать то, которое наберет максимальное число баллов, - в каждой олимпиаде есть моменты тактического свойства, которые необходимо учитывать.
Олимпиадное программирование в вузе
Олимпиадное программирование - увлечение не только для школьников. Поступив в вуз, ребята продолжают свои занятия, а некоторые студенты становятся олимпиадными программистами на первом курсе бакалавриата. Студент «Программной инженерии» Михаил Железин дважды становился призером четвертьфинала ICPC, дважды дошел до полуфинала.
Михаил Железин, студент «Программной инженерии»
Олимпиадное программирование помогает понять, как работают алгоритмы, которые мы пишем. Многие программисты используют интерфейс алгоритма, но не понимают, как он устроен. А когда мы изучаем алгоритмы, мы сами их реализуем, и нам не нужно брать готовые решения.
Михаил признается, что ему нравится соревновательный дух, нравится соперничать с кем-то, а в качестве полезного навыка для будущей профессии он отмечает «умение быстро решить поставленную задачу».
Подготовкой студентов к олимпиадам занимается Алексей Шмелев, инженер ключевых проектов Нижегородского исследовательского центра «Хуавей», серебряный призер финала ICPC 2011 года, финалист ICPC 2012 года, финалист Google Code Jam 2011, финалист Facebook Hacker Cup 2015, бронзовый призёр Google Hash Code 2018. Алексей проводит совместные занятия для студентов ННГУ им. Н.И.Лобачевского, НИУ ВШЭ – Нижний Новгород и НГТУ им. Р.Е. Алексеева.
Алексей Шмелев, инженер ключевых проектов Нижегородского исследовательского центра «Хуавей»
Многие сильные ребята поступают в столичные вузы, в том числе по результатам олимпиад школьников. Поэтому мой курс рассчитан на студентов, которые либо занимались совсем немного, либо не занимались программированием совсем. Тем не менее в 2020 году наша команда вышла на финал чемпионата мира ICPC, и это достойный результат для ребят, которые пришли на занятия практически без опыта и добились результата за счет тренировок. В прошлом году от Высшей школы экономики на чемпионат мира ICPC было зарегистрировано 8 команд, 5 прошли на четвертьфинал, 3 получили диплом четвертьфинала, - это гораздо больше, чем в предыдущие годы.
Алексей уверен, что занятия олимпиадным программированием в вузе не только усиливают профессиональные знания, причем, достаточно разносторонние, но и являются несомненным плюсом при трудоустройстве: «Если на собеседовании вы описываете себя как «обучаемый и целеустремленный сотрудник», это еще нужно доказать. Если же вы укажете, что имеете диплом участника чемпионата мира по программированию, это и есть объективный показатель: вы прошли весь путь до соревнований такого уровня, можете долго и увлеченно работать над тем, что близко и интересно, умеете работать в команде. Работодатель понимает, что перед ним соискатель, который быстро понимает, что от него требуется; он владеет разнообразными алгоритмами решения одной задачи; может оптимизировать код – улучшать решение задачи, чтобы оно требовало меньше времени либо памяти».
И, все-таки, трудолюбие. Кого мы ждем?
Участие в олимпиадах развивает логику, помогает структурировать мышление, учит самостоятельной работе с информацией, позволяет получить широкие и одновременно глубокие знания в выбранной области.
Петр Калинин:
«Все базовые знания, необходимые для решения олимпиадных задач — умение писать чистый код, тестировать код глазами, видеть крайние случаи — для серьезных программистов необходимы и в реальной жизни. Как говорят, что математика приводит ум в порядок, так же и алгоритмы приводят в порядок программистский ум. Я жду самостоятельных учеников с хорошей математической культурой, которым интересно заниматься, копаться в коде и развиваться в программировании».
Алексей Шмелев:
«Я буду рад трудолюбивым студентам, заинтересованным в повышении своей эрудиции в Computer Science».
Дмитрий Кузнецов:
«Если ты научился самостоятельно трудиться с большими и сложными материалами, окунулся в атмосферу олимпиад самого высокого уровня, приобрёл на них многих друзей, то ты уже никогда не испугаешься идти своим собственным путём в жизни».
Запись на программу «Алгоритмическое программирование» Петра Калинина для учеников 8-11 классов
Запись в Школу информационных технологий и математики Д.Ю.Кузнецова
Запись на занятия Алексея Шмелева по олимпиадному программированию 2021 для студентов
Кузнецов Дмитрий Юрьевич