Быть сильным в спортивном программировании и быть сильным в программировании на промышленный результат - это если не два полюса, то два далеко отстоящих друг от друга состояния.
Поэтому, мое отношение к спортивному программированию - как отношение зрителя к спортивным соревнованиям: приятно, когда “наши” выигрывают - но и только. Да, возможно, спортивное программирование - “это прикольно!”. Куда лучше, чем по улицам без дела слоняться. Но все же, так ли велика польза спортивного программирования для будущего профессионального программиста?
“Добро пожаловать в реальный мир!” (с)
Наверно, не буду оригинальным, если выскажу мнение, что польза от спортивного программирования далеко не такая большая, как это часто пытаются преподнести. Приобретаемые навыки в большей части прямо противоположны тем, которые нужны профессионалу.
- Умение уложиться в отведенный клочок времени? А какой ценой? Ценой плохо связанных обрывков кода, зачастую не охватывающего полного набора данных стресс-тестов? Практически некомментированного кода, который плохо читаем, плохо модифицируем и плохо сопровождаем коллегами? В реалиях нет таких жестких временных рамок и любой руководитель проекта отдаст преимущество ясному и легко сопровождаемому коду: “прима-балерина” может уволиться, а проблема преемственности сопровождения ляжет на руководителя, который, в общем-то, о своем кресле должен заботиться.
- Умение держать в памяти и применять типовые алгоритмы? А зачем их в памяти-то держать? Сделайте библиотеку и берите оттуда. В реальном мире все именно так и обстоит.
- Способность решать задачи втроем на одном компьютере, как признак сплоченности команды? Ну где в реальном мире один компьютер на трех программистов? Кому чем заниматься решает руководитель проекта. В спокойной обстановке. И в процессе реализации проекта периодически наблюдает за её ходом, внося необходимые коррективы. Не на бумажке, конечно.
- Какую задачу, имеющую практическое значение, можно решить за время, отведенное на соревнование? Допускаю, что когда-то чудом что-то и решили. Но тогда это исключение. Возможно, какие-то простенькие проблемки, пригодные для “чистой науки”, решить и можно. Но большой ли сейчас на это спрос?
Я приведу один пример из своей жизни, не связанный с олимпиадами. В свое время по работе возникла потребность решить практическую задачу. Все тривиально: “шеф” делал диссертацию, а справиться с расчетами не мог. Задачка была непростой: обращение уравнения Абеля; я работал в паре с математиком и на решение ушло несколько месяцев. Результат был даже опубликован в университетском сборнике “Вычислительные системы и алгоритмы”. “Сердцем” задачи оказалось решение огромной (по тем временам) системы уравнений, имеющей пятидиагональную матрицу. Как известно, для трехдиагональных матриц существует метод прогонки. Лёве, как звали в обиходе математика, пришла в голову замечательная мысль: обобщить метод прогонки для работы с пятидиагональной матрицей. И это сработало! С тех пор прошло 34 года. Кто-то из вас слышал о решении СЛАУ с пятидиагональной матрицей методом прогонки? Во всех источниках по-прежнему утверждается, что этот метод для трехдиагональной матрицы. Пример того, что можно потратить много сил и средств на реализацию задачи, которая но поверку оказывается разовой. Фактически, для нас тогда это тоже была своего рода “олимпиада” - вызов, потому что решать надо было на ЭВМ “Минск-32” с объемом памяти 32 К машинных слов и за время, не превышающее нескольких минут (тогда машины арендовали и надо было платить за время). Вот так же и все олимпиадные задачи. Они - разовые. Работа “на корзину”, как сейчас говорят работодатели.
Как обобщение. Спортивное программирование - это прикольно, весело, круто при рассказах в своей среде, но … малополезно будущему профессиональному программисту.
Естественно, это моё личное мнение.