Программирование — это спорт Не верите? Сейчас докажем
При слове «программист» обычно в голове возникает образ сотрудника какой-нибудь технологической корпорации, который целыми днями пишет длинный код для сложной программы. Многие программисты действительно этим и занимаются. Но есть и другие — спортивные программисты. Вместе с Университетом ИТМО рассказываем, что это за специалисты и почему они достойны называться спортсменами не меньше, чем футболисты или марафонцы.
В спорте вы качаете мышцы, а в программировании развиваете логику и мышление
Есть несколько отличий спортивных программистов от остальных. Основная задача программистов — писать код, поддерживать его работу и, если что-то сломается, чинить его. При этом написание и тестирование кода могут длиться недели и месяцы. А задача спортивных программистов — решать нестандартные задачи на время. Важно не просто найти самое быстрое, но и наиболее эффективное решение. Обычно спортивными программистами называют тех, кто участвует в соревнованиях. Олимпиадное программирование можно сравнить с шахматами или «Формулой-1»: в обоих случаях важны не только скорость, но и стратегия. Спортивные программисты, как правило, самые изобретательные специалисты в своей области: они быстро находят неочевидные подходы к конкретной задаче и пишут решение в виде компактного и эффективного кода. Такие специалисты востребованы в разных сферах — экономике, инженерии, машинном обучении. Талантливых программистов постоянно ищут представители ведущих российских и западных вузов.
Как и в спорте, без тренировок в спортивном программировании никуда
Олимпиадное программирование похоже на спринт: во время соревнований здесь важна взрывная сила, а чтобы выйти на короткий забег в оптимальной форме, нужно долго и последовательно тренироваться, выполняя рутинные упражнения. Обычно программисты изучают разные языки, много тренируются в поиске и применении готовых решений и технологий. Так же как Томас Эдисон «определил пять тысяч способов, которые никуда не годятся», перед тем как изобрести работающую лампу накаливания, спортивные программисты проходят путь проб и ошибок. Но времени на соревновании очень мало! На студенческом чемпионате мира по программированию на поиск оптимального решения конкретной задачи у участника есть в среднем 25–30 минут (за 300 минут соревнований нужно решить 12 задач). При этом лучшие спортивные программисты решают задачи еще быстрее — за пять-семь минут.
У программистов даже есть международные чемпионаты
Один из самых известных чемпионатов — Международная студенческая олимпиада по программированию (ICPC). Впервые ее начали проводить еще в 1970-х. А сегодня в ICPC ежегодно соревнуются более 60 000 участников со всего мира. Это примерно в четыре раза больше, чем на традиционных Олимпийских играх.
Обычно чемпионаты по спортивному программированию состоят из нескольких этапов: отборочного тура, полуфинала (региональные чемпионаты) и финала (чемпионат мира). Они бывают индивидуальными и командными и проводятся отдельно для школьников, студентов и выпускников вузов. Задача участников — решить как можно больше задач за ограниченное время.
Представительство ICPC в Северной Евразии находится в Санкт-Петербурге — в ИТМО. Университет готовит спортивных программистов: за последние 16 лет команда ИТМО семь раз становилась чемпионом ICPC. Это мировой рекорд: больше не побеждал ни один вуз мира, включая MIT и Caltech, а у ближайших зарубежных соперников — американского Стэнфорда и Шанхайского транспортного университета — по три победы. Кстати, возглавляет представительство ICPC в Северной Евразии выпускник ИТМО Матвей Казаков: в 1999 году он взял золотую медаль в чемпионате ACM ICPC, а также был тренером команды ИТМО, которая стала золотым медалистом в 2001 году.
А перед соревнованиями обычно проходят сборы
Как и в большом спорте, в олимпиадном программировании бывают тренировочные соревнования, когда участники решают задачи турниров прошлых лет (посмотреть примеры задач можно здесь), а также сборы команд из разных городов и стран. Обычно процесс устроен так: если школьник занимается программированием в кружке и показывает успехи, ему предлагают войти в команду и тренироваться вместе с другими перспективными спортсменами. В течение года команда решает задачи и занимается дома, а перед соревнованиями едет на сборы. Последние необходимы, чтобы ребята сработались в боевых условиях, сформировали сплоченную команду, привыкли к правилам соревнований и узнали сильные качества друг друга. Все это в перспективе позволит им меньше нервничать во время самого испытания.
Чем раньше программист начнет тренироваться, тем больше шансов стать чемпионом (все как в большом спорте)
В олимпиадном программировании нет четкого возрастного ценза: среди чемпионов есть и те, кто начал заниматься уже в сознательном возрасте. Но оттачивать навыки программирования (как и в других видах спорта) придется годами, поэтому большинство будущих чемпионов начинают участвовать в олимпиадах, едва окончив среднюю школу. Такие тренировки часто проходят в игровой форме и увлекают подростков не меньше компьютерных игр. Узнать о местоположении ближайших к вам региональных кружков по спортивному программированию (где школьников готовят к олимпиадам по информатике и программированию) можно на официальном сайте представительства ICPC в Северной Евразии на базе Университета ИТМО. Цель представительства — сделать так, чтобы о ICPC узнали как можно больше увлеченных программированием ребят. Оно поддерживает дружественные организации и киберспортивные мероприятия, а также организует сборы (ближайшие запланированы на лето).
Как и успешные спортсмены, успешные программисты — это настоящие звезды
По статистике, на одного спортивного программиста приходится почти 70 «промышленных». На этих редких профессионалов большой спрос, и их труд оплачивается выше. После нескольких лет успешных выступлений на соревнованиях программисты становятся известными: крупные международные компании внимательно следят за результатами международных турниров и конкурируют за возможность пригласить самых перспективных участников на работу. А гиганты вроде Facebook, Google, «Яндекса» и Mail.ru проводят собственные соревнования по спортивному программированию — с той же целью.
Наиболее востребованы спортивные программисты в биржевой торговле, сфере языковых технологий, ИИ, машинном обучении и big data — там, где нужно непрерывное и быстрое усовершенствование алгоритмов. Нередко спортивные программисты становятся главными разработчиками, организуют собственный бизнес или уходят в науку — например, начинают работать в MIT.
Среди спортивных программистов есть свои звезды. Главные технические разработчики «ВКонтакте» и Telegram — Николай Дуров и Андрей Лопатин — дважды чемпионы мира по спортивному программированию. Другой призер ICPC — интернет-предприниматель Тони Шей. Спустя всего три года после победы в чемпионате он заработал 265 млн долларов (его баннерообменную сеть LinkExchange купила Microsoft), а затем создал онлайн-магазин одежды Zappos.com (в 2009 году Amazon заплатила за нее 1,2 млрд долларов). Также среди победителей чемпионата — сооснователь Facebook Адам Ди Анджело, бывший директор по технологиям Google Крейг Силверстайн и один из нынешних ведущих инженеров компании Петр Митричев. Победители ICPC делают карьеру не только за границей, но и в России: например, Федор Царев руководит питерским офисом хедж-фонда Игоря Тульчинского WorldQuant (фирма управляет инвестициями на 5 млрд долларов).
Самый титулованный спортивный программист планеты — аспирант ИТМО Геннадий Короткевич. В свои 25 лет он побеждал на всех крупнейших международных турнирах по программированию (так называемые турниры Большого программистского шлема), в некоторых — не один раз. Например, на Google Code Jam он занимает первое место уже шесть лет подряд: другим участникам удавалось выиграть максимум два раза подряд. Андрей Станкевич, один из самых титулованных наставников по спортивному программированию в мире, тоже работает в ИТМО. Под его руководством сборная университета семь раз выигрывала кубок чемпионов.