This is SPARTAAA, или (не)известное об олимпиадах

Привет, тора гой дневничок, в одном из комментариев благодарных читателей прозвучала идея, что мол нельзя олимпеадного погроммиста заменить просветленным выпускником бгуир. Я с этим пунктом несколько не согласен, потому решил что it’s worth posting.

В не столь давние времена (где-то середина 90-х - начало нулевых) было довольно сложно отыскать хоть одного программиста, который бы не поучаствовал в тех или иных олимпиадах школьного/районного/городского, реже - областного/республиканского, определенные айседы даже добрались до международного уровня и там лососнули тунца. Сейчас же довольно сложно найти хотя бы одного программиста из выпускников разного рода вузов и прочих курсов кройки и шитья, которые бы вообще знали про олимпиады, ACM, топкодер, прожектэйлер и прочие ICFPC. Соответственно у многих сложились стереотипы об олимпиадных программистах и олимпиадных задачах в широком спектре от “надежда нации, пейсбук пиздит гугль за возможность хотя бы пригласить товарища на интервью” до “да они вообще непригодны ни к чему реальному”. Крайности такие крайности.

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

Олимпиады - это жесткий процесс отбора из умных чуваков еще и быстрых чуваков. Уже недостаточно просто решить задачу, надо её решить быстрее соседа чтобы перейти к следующей задаче. А это в свою очередь порождает аццкий говнокод который и не снился даже коллегам из Бангалора в самом страшном сне. Я воочию видел “успешные” решения, которые работали - но при этом внутри представляли полный ад пизды из if/break/goto.

Все для стройки, все для победы

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

Работает - не трогай

В некоторых случаях проверка правильности решения происходит путем прогона на каких-то тестовых данных, которые призваны быть правильными. Это автоматически отключает проверку на поведение при граничных случаяъ (не у всех, но часто).

Копипаста - наше все

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

Каждый суслик - агроном

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

Ниасилил, многабуков

Опять же, сидение с секундомером отбивает напрочь чувство “хорошего кода”. Когда счет идет на секунды - в идентификаторах типа “int a,b,c,k” - нет ничего плохого, в самом деле. Ну или там в функции “void f(void **int)”.

Экономим на спичках

Если по коду ставится условие “быстрее чем у соседа” - то начинается оптимизация всего и вся. В решениях задачек на прожектэйлере часто можно встретить чуваков, которые решают что-то перебором, который написан на хардкорном ассемблере с применением GPU. Оно круто, работает быстро - но зачем?

Вот в принципе неполный список тех прелестей, которые культивируют професси-анальные олимпиады программистов. По факту, все это напоминает професси-анальный спорт, стероиды там, пирацетам внутривенно и два литра редбулла в мозг.

С другой стороны, есть и плюсов в этих самых олимпиадах.

За одного бритого трех небритых дают

Хороший, годный олимпиадник после определенной, творческой, доработки пиздюлями - способен реально заменить двух сеньорных жабодевелоперов. Но с другой стороны, этому чуваку потребуется менеджер с достаточной квалификацией для выписывания этих самых пиздюлей. И в нормальной ситуации этот манагер может рулить командой из 5-10 обычных жабодавов.

А давайте подкуем эту блоху

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

Теперь собственно почему просветленный оптикой Фаулера выпускник БГУИР в целом лучше олимпиадника. Ответ тут один и он простой - скорее всего у студента нет ЧСВ овер 9000. А значит, с ним будет проще работать в команде, потому как все эти фсотнетопкодера через одного - звезды и принцессы от программирования. Которые могут внезапно сказать, что “этого я писать не буду, не царское это дело - вкрутить накатывание дельт на базу при апгрейде системы, вон жуниоров запрягите”.

В общем, как и везде - должен быть некий баланс между олимпиадностью и вменяемостью.