Отметим сразу, что мы не будем писать про спортивное программирование как интеллектуальный вид спорта (соревнования бывают командные и личные), нам интересно ACM ICPC — международная командная студенческая олимпиада по спортивному программированию. Часто эти понятия путают даже участники олимпиад.
Немного про АСМ
Как рассказали организаторы подобных олимпиад в Екатеринбурге, на самом деле понятие АСМ уже устарело. Раньше официально они назывались АСМ ICPC, а с 2018 года — просто ICPC. Поэтому слово «айсиэмщик» нужно заменить, видимо, на «айсиписишник» :)
![image](https://habrastorage.org/webt/ou/i9/9w/oui99wnu5hcifu5jnmp-wg8_s7e.jpeg)
По общим правилам в олимпиадах участвуют команды из трех человек. Это студенты высших учебных заведений или аспиранты первого года обучения. Командам на пять часов выдаются компьютеры и от восьми до двенадцати задач. Решения принимаются на C, C++, Java, Python, Pascal, C# и т.д… Ответы посылают на тестирующий сервер. Если программа выдала неправильный ответ или не уложилась в ограничения по времени или памяти, то пославшая её команда получает об этом сообщение и может послать исправленную версию кода. Задача считается решённой, если программа выдала правильные ответы на всех тестах. В отличие от других олимпиад, частичные решения не учитываются.
Побеждает команда, решившая правильно наибольшее число задач. Если несколько команд решили одинаковое количество задач, то смотрят на штрафное время. Оно считается по времени сдачи задач и попытке, с которой код был написан.
От олимпиад по информатике соревнования ICPC отличаются повышенным количеством задач, на которые отводится сравнительно небольшое время. В итоге участникам нужно писать код быстро, эффективно, используя обширные знания по алгоритмам, и максимально чисто, без багов.
Если говорить про тенденции, то с каждым годом количество команд становится все больше. Причем, как на школьных, так и студенческих олимпиадах. Соответственно задачи становятся сложнее, но сам процесс более увлекательным.
Плюсы и минусы АСМ
О плюсах и минусах спортивного программирования рассказали сотрудники Naumen, которые участвовали в олимпиадах ICPC.
Плюсы
+ лучшая практика по алгоритмам;
+ увеличивается скорость решения;
+ хорошо разбираешься в базовых вещах, например, чем HashSet отличается от TreeSet;
+ можешь просчитать скорость выполнения и объем потребляемой памяти;
+ учишься находить ошибки как в своем, так и в чужом коде;
+ разбираешься во внутреннем устройстве того или иного языка программирования: плюсы, минусы и подводные камни;
+ возможность найти друзей-единомышленников;
+ возможность заработать приличные деньги. Например, за победу на VK CUP дают 2^20 (~10^6) рублей;
+ если повезет, бесплатно попутешествуешь по России и миру.
Минусы
— «говнокод» — главное не качество, а чтобы решение прошло все тесты
— забываешь про такие понятия, как архитектура, фреймворк
— по словам коллег-мужчин, мало девушек
Безусловно, соревнования ACM, как и другие профессиональные олимпиады, нужны для выявления талантов. Если речь идет об отработке реальных навыков программирования, ACM не лучший способ. Но он сможет дать нужные связи.
![image](https://habrastorage.org/webt/yu/vi/b0/yuvib0-3d75edus1rhd_g6sffsg.jpeg)
«Когда я устраивался в Naumen, у меня не было ни опыта работы, ни даже знания используемого в департаменте языка. Зато была пара лет интенсивного ACM, что и помогло мне получить работу и начать развиваться уже в промышленной разработке», — рассказал наш коллега Влад.
Зачем это IT-компаниям
Для начала расскажем, как Naumen поддерживает олимпиады ICPC:
- предоставляем подарки участникам и победителям;
- помощь в программе: открытие и выступление сотрудников перед студентами;
- партнерская поддержка организации мероприятия.
Мы понимаем, что ICPC нужны, как и другие профессиональные олимпиады, для выявления талантов. Олимпиады показывают человека сразу как специалиста, и как часть команды. Для нас это важно.
![image](https://habrastorage.org/webt/or/yo/jc/oryojcutxcshudywqh-e4ygyjmo.jpeg)
Зачем мы поддерживаем подобные мероприятия:
- олимпиады затягивают талантливых студентов и школьников в мир IT;
- если человек тратит свое время на олимпиады и дополнительное обучение, его нужно поддержать и помочь развиваться дальше;
- повышение узнаваемости компании. Участники олимпиад – это целевая аудитория компаний. И будет ошибкой не воспользоваться возможностью рассказать о себе не просто студентам ИТ-шникам, а тем, кто «болеет» программированием.
Комментарии (5)
potan
17.01.2019 18:46«C, C++, Java, Python, Pascal, C# и т.д» а можно подребнее про т.д? В большинстве олимпиад, правила которых я читал, выбор языков очень ограничен. Так же почти везде запрещено использование внешних библиотек. Мне кажется, что победа по таким правилам имеет очень мало отношения к способностям к промышленному программированию.
CorvOrk
17.01.2019 21:41Мне кажется, что победа по таким правилам имеет очень мало отношения к способностям к промышленному программированию.
Олимпиады не имеют никакого отношения к промышленному программированию — это больше математика — Вы не получите тут опыта использования средств совместной разработки, технологий, фреймворков, ООП и т.д. Но в тоже время, олимпиады развивают способность четко понимать задачу, фокусироваться над ней и оценивать сложность реализации — эти способности нужны и в промышленном программировании.
DeadDevelopmentInc
18.01.2019 14:52Здесь упор делается на математику, логику, скорость решения задачи, и ее описания, а не развитие промышленного программирования. Участие в такого рода олимпиадах в будущем помогает решать сложные задачи в разы быстрее, плюс объем выученных алгоритмов, позволяет в будущем использовать их в реальных проектах.
Palich239
18.01.2019 07:24Завидую черной завистью тем, кому всё-таки удалось выйти в полуфинал. Пару раз наша «тройка» не прошла по штрафному времени — это очень обидно...)))
DeadDevelopmentInc
В свои университетские годы сам принимал участие в асиэмах. Действительно интересное мероприятие, позволило завести много знакомств.