Закодированные на победу

Как заставить хедхантеров ИТ-компаний драться за твою голову

Спортивные программисты тратят на тренировки 10-15 часов в неделю, не считая разбора ошибок, онлайн-соревнований и выездных тренировок. Фото: scyther5/ФОТОДОМ/shutterstock

Победы в соревнованиях по программированию для школьников — возможность поступить в вуз без конкурса, для студентов — получить работу в ИТ-компании. Что такое спортивное программирование и как начать им заниматься, рассказала Лидия Перовская, тьютор кафедры компьютерных технологий университета ИТМО и куратор академических программ «Яндекса».

Что такое спортивное программирование

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

Задачи, данные и вид результата на соревнованиях по программированию строго формализованы, так как решения проверяются автоматически. Автоматическая проверка ставит всех участников в равные условия, но ограничивает характер задач. В первую очередь они предполагают работу с алгоритмами и структурами данных.

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

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

Кто и зачем проводит соревнования

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

Команда СПбГУ победила на ICPC в этом году
Команда СПбГУ победила на ICPC в этом году. Фото: icpc.baylor.edu


Что дает участие

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

«Многие ИТ-компании — тут я точно могу сказать про «Яндекс», Google и Facebook, но думаю, что и многие другие, — ищут ребят, хорошо разбирающихся в алгоритмах, потому что это основа основ в программировании. Такие компании следят и за результатами олимпиад типа ICPC, и за соревнованиями других компаний, и проводят свои чемпионаты», — рассказала Лидия.

«Я участвую в соревнованиях уже довольно давно, так что меня заметили все, кто хотел заметить. Рекрутеры Google и Facebook пишут уже не первый год, в «Яндексе» я и так работаю, периодически падают в почту приглашения от разных стартапов, несмотря на то что я не свечусь на сайтах для поиска работы. Могу сказать, что медаль финала ICPC может быть неплохой строчкой в резюме и плюсом к репутации, но быть замеченным проще в онлайн-соревнованиях», — рассказал Иван Смирнов, студент МФТИ, завоевавший в составе команды института «золото» на ICPC в 2016 году.

«Прямо предложения редко поступают, но соревнования — это большой плюс в резюме. Кроме того, на собеседованиях часто бывают полезны знания из спортивного программирования», — отметил его коллега по команде Артем Жук.

Как проходят турниры

Соревнования бывают личные, парные, командные, с самыми разными ограничениями, уровнями и правилами. Например, время, которое отводится на решение задачи, может различаться: от «спринтерского забега» на 100 минут, как в «Яндекс.Алгоритме», до соревнований, в которых на решение задачи отводятся недели.

Часто соревнование начинается с онлайн-тура. «Только ICPC может позволить себе собрать в очном туре 400 участников — это очень дорого. Обычно все соревнования либо целиком проходят онлайн, либо проводят в сети отборочные туры, и только самые лучшие участники проходят в очный тур», — пояснила Лидия.

Утешительная статистика

Российские студенты часто побеждают в крупных международных соревнованиях по программированию. Например, недавно выпускник ИТМО Геннадий Короткевич третий раз стал победителем соревнований Google Code Jam. Команды ИТМО и СПбГУ побеждают на ICPC с 2012 года, команды других российских университетов также часто выходят на призовые места в этих соревнованиях.



Что нужно для победы

Спортивные программисты, которые выходят в финал крутых соревнований, начинают писать программы еще в школе.

«Я попробовал решать задачки классе в седьмом, целенаправленно пошел на кружок в десятом, а в одиннадцатом достиг некоторых успехов. Почему — сложно сейчас уже вспомнить. Отец подарил книжку по основам программирования, я заметил, что у меня что-то получается, и понеслось», — сказал Иван.

Команда МФТИ на чемпионате Урала, который ежегодно проходит в УрФУ
Команда МФТИ на чемпионате Урала, который ежегодно проходит в УрФУ. Фото предоставлено Алексеем Малеевым


В ИТМО во время подготовки к финалам студенческого командного чемпионата мира по программированию, тренировки проходят два-три раза в неделю по пять часов. Не менее интенсивно готовятся к соревнованиям на Физтехе.

«Каждую неделю один или два раза мы с командой собираемся и проходим какое-нибудь старое соревнование в режиме, приближенном к боевому», — пояснил Иван.

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

Начать с нуля

Попробовать себя в спортивном программировании могут все желающие. Задачи для решения можно найти на сайтах чемпионатов: ICPC, TopCoder Open, «Яндекс.Алгоритм», Facebook Hacker Cup, Сodeforces.

«Для того чтобы начать, полезно знать какой-нибудь язык программирования хотя бы на самом базовом уровне, а если есть желание изучить предмет подробнее, можно обратиться к книге «Алгоритмы. Построение и анализ», — объяснила Лидия.
Теги:

Читать еще на Чердаке: