О соревнованиях по спортивному программированию

24 апреля состоялся очередной чемпионат Череповецкого государственного университета по программированию. Этот год был для меня юбилейным, уже 15 лет я участвую в организации данных соревнований. А нужны ли вообще подобные соревнования? Не прошёл ли их “золотой” век?

На день рождения я подарил сыну игру-головоломку “Палаточный городок. Загадки местности”. Играли-играли в эту игру, и так появилась задача для чемпионата Череповецкого государственного университета по программированию, который проходил сегодня 24 апреля.

Условие задачи
Последние лет десять для проведения чемпионата ЧГУ использовали систему Contester, разработанную ребятами из Ковровской академии, но, как сказали работники университета, возникли сложности в настройке поддержки современных компиляторов и языков программирования. Поэтому перед очередным чемпионатом стали искать альтернативу. В итоге в этом году в качестве платформы для проведения соревнований впервые использовали “Яндекс.Контест”. Выглядит неплохо, и для наших нужд всех возможностей оказалось достаточно. К тому же было удобно в том плане, что теперь платформа была развернута вне серверов университета, и помочь в настройке системы, находясь не в Череповце, было возможно.

“Яндекс.Контест” подкупил тем, что поддерживается множество разных языков программирования и компиляторов. Интерфейс для настройки прост, каких-то проблем с настройкой турнира не возникало. Без подтверждения учётной записи можно создать до трёх турниров, завести 10 задач и пригласить к участию в турнире до 10 участников. С последним ограничением мы столкнулись в самый последний момент, когда вечером дня, предшествующего соревнованию, стали регистрировать участников. Спасибо технической поддержке “Яндекс.Контест”, которая очень оперативно отреагировала на моё письмо и сняла с нас ограничение демо-версий.

Соревнования прошли без каких-либо технических проблем. Как и в прошлом году победу в чемпионате ЧГУ одержала Юлия Иванова (сейчас студентка 2-го курса).

Результаты соревнований
Так как в ЧГУ не проводятся целенаправленные тренировки студентов по решению алгоритмически задач, то для большинства участников задачи, требующие знаний базовых алгоритмов по графам, динамическому программированию, рекурсиям/переборам, были неподъёмными.

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

Другой вопрос, а надо ли вообще на это тратить время?

В студенческие годы я активно участвовал в олимпиадах по программированию, таких как ACM ICPC, TopCoder, Google Code Jam, Russian Code Cup и т.д. Для хорошего выступления приходилось много готовиться: изучать алгоритмы, структуры данных, математику, решать большое количество задач.

Нарешал я в итоге около полутысячи задач. Что получил в итоге:

  1. В студенческие годы мог без шпаргалок реализовать кучу основных алгоритмов и использовать хитрые структуры данных. Сейчас про большинство просто помню, что такие существуют.
  2. Для разных проблем научился строить математические модели.
  3. Научился оценивать трудоёмкость алгоритмов, время исполнения и потребляемых ресурсов. Это пока ещё не забыл.
  4. Выработал навык писать код, который работает корректно в указанных в требованиях ограничениях. Половинчатые решения - в топку.
  5. Вероятно, даже по прошествии 10 лет, как я перестал участвовать в соревнованиях, остаточных знаний по алгоритмистике будет достаточно, чтобы пройти алгоритмическое собеседование.
  6. Имею много приятных воспоминаний. Просто было отличное время, когда с друзьями по олимпиадам ездили.

В производственных задачах, которые я решаю, говорить о большой применимости знаний различных алгоритмов не приходится. Системы ДБО для банков - не то место, где часто приходится строить диаграммы Вороного, деревья отрезков или считать потоки в графах. Разработка банковского ПО в этом случае - не какой-то изгой. Во многих других направлениях, в которых работают большинство программистов, решать сложные задачи не приходится: красим кнопки, перекладываем JSON. Если же хочется сложных алгоритмических задач, то надо смотреть в сторону разработки СУБД, систем компьютерного зрения, автопилотов и т.д.

Пару лет назад был выпуск “Русские норм!", касающийся темы физмат школ и олимпиадного движения. Там были отмечены плюсы и минусы подобных олимпиад по программированию. Лично про себя могу сказать, что я по ощущениям получил больше “плюсов”, чем “минусов”. Может, конечно, это какое-то самооправдание потраченному времени. Но на что-то же его надо было тратить :-) А раз “плюсов” для себя я вижу больше, то пытаюсь посильно этими плюсами поделиться и с подрастающим поколением. К тому же среди участников данных олимпиад порой удаётся найти новых коллег по работе. Однако стоит отметить, что в последнее время ситуация с наймом студентов изменилась. Если раньше студенты в основном приступали к постоянной работе обычно на последних курсах учёбы, то теперь со слов преподавателей университета ребят-программистов компании сманивают со вторых-третьих курсов, что сказывается на их вовлеченности в образовательный процесс. Это, кстати, заметно по составу участников проводимых чемпионатов по программированию. В последние годы основные участники соревнований - студенты первый-вторых курсов. Есть и другое проявление этой ситуации. На собеседования приходят студенты выпускного курса, в резюме которых написано, что они “Senior Java developer” или “Java TechLead” :-)

Андрей Григоров
Андрей Григоров
Начальник отдела архитектурных решений