Спорт для мозга: как соревнуются программисты

05:00, 05 августа 2020

Ежегодно в мире проходит огромное количество соревнований по программированию. Спектр их широк — от небольших турниров для новичков до массовых чемпионатов с участниками по всему земному шару. Зачем в них участвовать и как извлечь максимум пользы на любом этапе карьеры в IT — рассказываем в статье.

Для начала разберёмся, что такое «спортивное программирование».

Всем людям свойственно соревноваться. А особенно хочется делать это в том, в чём силён. Очевидно, что программисты меряются силами в написании кода. Самым популярным видом «спорта» является разработка оригинальных (или поиск готовых) алгоритмов для решения нетривиальных задач. Процесс должен укладываться в отведённые временные рамки, и за успешное решение задачи участник получает баллы.

— Начинающие разработчики из-за нехватки академических знаний всегда стараются придумать что-то своё, создать оригинальный алгоритм. А те, кто занимается программированием долгое время, понимают, что всё уже придумано до них. И требуется только найти и приладить давно работающий подходящий алгоритм к решению задачи. В любом случае соревнования являются проверкой энциклопедических знаний разработчиков. — говорит инженер-программист отдела разработки веб-приложений Александр Бутенко.

Какие соревнования бывают?

Видов IT-состязаний великое множество. Есть такие, где участник работает в одиночку: решил задачу, уложился в срок, получил награду. Существуют и более приближенные к реальному миру мероприятия. В них соревнуются пары или целые команды участников: одни пишут спецификацию программного компонента, а другие этот компонент сразу реализуют, получая в результате готовый работающий программный продукт.

Для чего участвовать?

Прежде всего, участие в любых IT-соревнованиях — это отличная возможность обратить на себя внимание работодателей. На таких мероприятиях представители крупных компаний входят в состав жюри, присматриваются к сильным игрокам.

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

Кроме бонуса при трудоустройстве участие в соревнованиях прекрасно прокачивает скиллы разработчика.

— Абсолютно любой опыт программирования полезен для IT-специалиста. Во-первых, можно подстегнуть мозг непривычными задачами. Во-вторых, хакатоны, чемпионаты и конференции позволяют разработчику расти как менеджеру проектов. Нужно не только уметь кодить, но и находить в сжатые сроки оптимальные пути решения необычных задач. — говорит инженер-программист отдела разработки прикладного ПО Василий Пономаренко.

Василий участвовал в научно-исследовательских работах во время учёбы в университете, а в прошлом году был в составе команды от «Технологии» на региональном хакатоне городских проектов «Цифровые решения».


Ещё один плюс участия в соревнованиях, особенно актуальный для новичков, — возможность поработать в команде и познакомиться с сообществом разработчиков из России. На всероссийских чемпионатах, таких как Rucode Festival, можно попрактиковаться на боевых проектах ведущих IT-компаний.

Для школьников участие, а тем более призовое место в ежегодных международных олимпиадах по информатике (например IOI и Технокубок), считается бонусом при поступлении в университет. Призёры же российской сборной автоматически попадают в ВУЗ без экзаменов.

Как подготовиться?

Прежде всего следует определить, на каком уровне находятся ваши знания и навыки. Базовые знания, достаточные для старта:

- Хотя бы один язык программирования (С, С++ или Java), также не повредит опыт алгоритмического программирования.

- Математика: неплохо уметь решать нестандартные задачи и строить математические модели.

- Английский язык на уровне понимания лекций и текста задачи.

После проверки своих же знаний можно приступать к тренировкам. Как спортсмены готовятся к соревнованиям? Изо дня в день выполняют ряд действий и упражнений, приводящий их в нужную физическую форму. А разработчик регулярно тренирует ум, решая задачи. Один, в паре, в команде, с наставником и без, с таймером и последующим разбором ошибок. Можно использовать ресурсы, где публикуют задания с прошлых чемпионатов и олимпиад: Codeforces, TopCoder, Timus Online Judge, Spoj. На многих площадках есть проверяющая система, которая помогает отследить ошибки и поработать над ними.

— Я принимал участие в чемпионатах acm и в нескольких хакатонах, один из которых был от площадки VK. К таким мероприятиям обязательно нужно готовиться — решать типовые задачи и задачи с соревнований прошлых лет. Для дальнейших этапов полезно изучать алгоритмы и особенности языка, на котором программируешь.
Ещё необходимо заранее разделить роли в команде. Например, один программирует, другой занимается алгоритмами. Также в команде должен быть наставник, тренер, который способен найти слабые места и подтянуть их. Ну и, конечно, оказать психологическую помощь, успокоить, поддержать, настроить на победу. Это очень важно! — делится программист отдела разработки мобильного ПО Игорь Петров.