Как стать чемпионом по коду

Зачем программистам свои чемпионаты, что общего в решении задач на скорость и «IT за деньги» и правда ли девушки могут соревноваться отдельно в комфортной для себя среде (правда)

Что вообще за чемпионаты по программированию? Это разве спорт?

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

Как это устроено?

На чемпионатах для разработчиков программисты решают задачки на скорость — в командах и индивидуально.

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

Как и в любом спорте, подготовка и практика решают. Регулярно бегающий школьник, который занимается в спортивном кружке, пробежит дистанцию лучше взрослого человека, который считает себя сильным. Так и опытный участник олимпиад или чемпионатов по программированию обойдёт сильного разработчика без опыта. Это просто специфика дела!

Хм-м, а что там так отличается? Программирование и программирование...

Чтобы побеждать других разработчиков, важно «перенастроиться». Вот что помогает побеждать.

Знания в разработке. Программисту-чемпионатнику важно хорошо знать алгоритмы, структуры данных, синтаксис языка, на котором он пишет, разбираться в любимом фреймворке. Нет времени ходить на Stack Overflow.

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

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

Работа в команде. Обычно чемпионаты — это командные соревнования. И в команде всё должно быть хорошо организовано: разработчикам важно учитывать сильные и слабые стороны друг друга.

Ещё 10–15 лет назад, когда чемпионаты и олимпиады были скорее «математическими», в командах работала специализация: одни участники хорошо знали математику, другие — алгоритмы и системы данных, третьи писали код. Сейчас соревнования в основном прикладные, поэтому специализация отошла на второй план — код пишут все.

Стрессоустойчивость. Чемпионаты и олимпиады ограничены по времени, обычно нужно решить более 10 задач за 4–5 часов. Это требует умения концентрироваться на своей работе и не терять фокус до самого конца.

В хоре часто не любят людей с абсолютным слухом: когда спустя час пения все остальные устают и их голос чуть «садится», обладатель идеального слуха продолжает петь чисто, он по-другому не может.

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

Artboard

Окей, а что вообще бывает? Какие чемпионаты есть?

Про ICPC мы уже упомянули — в Яндексе немало участников этого чемпионата, есть даже свои тренеры. А TopCoder, кстати, это целая платформа по поиску талантов: за участниками и победителями следят лучшие работодатели в мире.

Показать себя на чемпионате по программированию — значит стать очень ценным и востребованным специалистом, за которым встанут в очередь лучшие компании.

Есть много крупных престижных чемпионатов, которые локализованы по странам: например, в Индии, США, Великобритании. В этом году чемпионат по функциональному программированию ICFP прошёл в Сиэтле.

В России они тоже есть. А ещё есть чемпионаты для девушек — там разработчицы могут соревноваться в комфортных для себя условиях.

Бывают и странные соревнования: например, на IOCCC участников просят написать самый запутанный код. Или придумать ироничное решение задачи. Или создать самую непонятную программу на С, которая умещается в 4096 символов.

Ну ладно. А в работе это пригождается?

Конечно! Хороший спортсмен — прежде всего уверенный в своих силах человек (и этих сил у него немало). Так и классный программист-чемпионатник найдёт применение своим навыкам. Часто, приходя в новую команду, он становится суперзвездой.

Если вам нравится программировать, участие в чемпионатах, олимпиадах и соревнованиях станет замечательным хобби, а написание кода вообще — лучшим занятием в мире.

А ещё успехи хорошо вознаграждаются. Призовые фонды российских чемпионатов исчисляются миллионами рублей, а международных — миллионами долларов. Призы в виде ноутбуков никто даже не считает!

Уговорили! С чего начать?

Для начала стоит почитать прошлые задачи на Codeforces или ICPC. Сначала они могут показаться вам сложными — но марафонская дистанция тоже сперва пугает.

Если вы учитесь в институте, попробуйте вступить в команду по программированию или создайте свою. К примеру, в суперпрестижном ICPC в 2021 году победила команда Нижегородского государственного университета им. Н. И. Лобачевского. И у вас тоже всё получится!

Краткий пересказ от Yandex GPT