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

На день рождения я подарил сыну игру-головоломку “Палаточный городок. Загадки местности”. Играли-играли в эту игру, и так появилась задача для чемпионата Череповецкого государственного университета по программированию, который проходил сегодня 24 апреля.
“Яндекс.Контест” подкупил тем, что поддерживается множество разных языков программирования и компиляторов. Интерфейс для настройки прост, каких-то проблем с настройкой турнира не возникало. Без подтверждения учётной записи можно создать до трёх турниров, завести 10 задач и пригласить к участию в турнире до 10 участников. С последним ограничением мы столкнулись в самый последний момент, когда вечером дня, предшествующего соревнованию, стали регистрировать участников. Спасибо технической поддержке “Яндекс.Контест”, которая очень оперативно отреагировала на моё письмо и сняла с нас ограничение демо-версий.
Соревнования прошли без каких-либо технических проблем. Как и в прошлом году победу в чемпионате ЧГУ одержала Юлия Иванова (сейчас студентка 2-го курса).
Если же ребятам захочется показывать хорошие результаты на соревнованиях типа ICPC (хотя бы в полуфинальные соревнования пройти), то придётся хорошо потрудится и посвятить значительное время самоподготовке.
Другой вопрос, а надо ли вообще на это тратить время?
В студенческие годы я активно участвовал в олимпиадах по программированию, таких как ACM ICPC, TopCoder, Google Code Jam, Russian Code Cup и т.д. Для хорошего выступления приходилось много готовиться: изучать алгоритмы, структуры данных, математику, решать большое количество задач.
Нарешал я в итоге около полутысячи задач. Что получил в итоге:
- В студенческие годы мог без шпаргалок реализовать кучу основных алгоритмов и использовать хитрые структуры данных. Сейчас про большинство просто помню, что такие существуют.
- Для разных проблем научился строить математические модели.
- Научился оценивать трудоёмкость алгоритмов, время исполнения и потребляемых ресурсов. Это пока ещё не забыл.
- Выработал навык писать код, который работает корректно в указанных в требованиях ограничениях. Половинчатые решения - в топку.
- Вероятно, даже по прошествии 10 лет, как я перестал участвовать в соревнованиях, остаточных знаний по алгоритмистике будет достаточно, чтобы пройти алгоритмическое собеседование.
- Имею много приятных воспоминаний. Просто было отличное время, когда с друзьями по олимпиадам ездили.
В производственных задачах, которые я решаю, говорить о большой применимости знаний различных алгоритмов не приходится. Системы ДБО для банков - не то место, где часто приходится строить диаграммы Вороного, деревья отрезков или считать потоки в графах. Разработка банковского ПО в этом случае - не какой-то изгой. Во многих других направлениях, в которых работают большинство программистов, решать сложные задачи не приходится: красим кнопки, перекладываем JSON. Если же хочется сложных алгоритмических задач, то надо смотреть в сторону разработки СУБД, систем компьютерного зрения, автопилотов и т.д.
Пару лет назад был выпуск “Русские норм!", касающийся темы физмат школ и олимпиадного движения. Там были отмечены плюсы и минусы подобных олимпиад по программированию. Лично про себя могу сказать, что я по ощущениям получил больше “плюсов”, чем “минусов”. Может, конечно, это какое-то самооправдание потраченному времени. Но на что-то же его надо было тратить :-) А раз “плюсов” для себя я вижу больше, то пытаюсь посильно этими плюсами поделиться и с подрастающим поколением. К тому же среди участников данных олимпиад порой удаётся найти новых коллег по работе. Однако стоит отметить, что в последнее время ситуация с наймом студентов изменилась. Если раньше студенты в основном приступали к постоянной работе обычно на последних курсах учёбы, то теперь со слов преподавателей университета ребят-программистов компании сманивают со вторых-третьих курсов, что сказывается на их вовлеченности в образовательный процесс. Это, кстати, заметно по составу участников проводимых чемпионатов по программированию. В последние годы основные участники соревнований - студенты первый-вторых курсов. Есть и другое проявление этой ситуации. На собеседования приходят студенты выпускного курса, в резюме которых написано, что они “Senior Java developer” или “Java TechLead” :-)