Top.Mail.Ru
Колонки

Азартный кодинг: кто такой спортивный программист и зачем он нужен вашему бизнесу

Колонки
Алексей Малеев
Алексей Малеев

Директор по дистанционным программам МФТИ, руководитель штаба сборной РФ по информатике, инициатор фестиваля RuCode

Ольга Лисина

Спортивные программисты составляют всего 4,5% от общего числа разработчиков в мире. Совсем небольшой процент, однако за ними охотятся ведущие IT-гиганты, ведь такие специалисты могут принести большую пользу бизнесу во многих сферах — от финтеха до разработки беспилотных автомобилей. 

Какие преимущества есть у топ-кодеров и как наладить с ними взаимовыгодное сотрудничество, рассказывает Алексей Малеев, проректор по международным программам и цифровым инновациям МФТИ, основатель Moscow Workshops и олимпиадных школ МФТИ. 

Азартный кодинг: кто такой спортивный программист и зачем он нужен вашему бизнесу
Unsplash

Чем спортивное программирование отличается от обычного?

Спортивные программисты — большая редкость на рынке труда. По оценкам International Data Corporation, в мире насчитывается 22,3 млн разработчиков. Но опытом олимпиадного программирования обладает около 1 млн, если учитывать участников крупнейших чемпионатов и активных пользователей платформы Codeforces, число которых превышает 400 тысяч. 

Многие из них работают в крупных IT-компаниях — от Google и Huawei до «Яндекса» и Mail.ru Group, создают успешные стартапы и привлекают миллионы долларов инвестиций. Так, бывший технический директор Facebook Адам Д'Анджело входил в число лучших спортивных кодеров и побеждал на крупнейших соревнованиях. 

В России таких примеров тоже немало. Пожалуй, самый известный — Николай Дуров, сооснователь «ВКонтакте» и Telegram, а в прошлом — чемпион ICPC.

Основатель крупнейшей платформы для программистов Codeforces Михаил Мирзаянов — серебряный призер чемпионата мира по программированию ACM-ICPC. Другой пример — выпускник сборов Moscow Workshops Александр Машрабов, сооснователь стартапа AI Factory, который впоследствии приобрела компания Snap. 

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

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

Денис Шитов, координатор взаимодействия Huawei — ICPC, Российский Исследовательский Институт Huawei (Huawei Russian Research Institute, RRI)


Все сервисы и компании, связанные с релокацией, на одной карте

Существует мнение, что «спортивным» программистам не место в крупных компаниях, так как в них мало применимы навыки спортивного программирования из-за довлеющей «корпоративщины».

Как в плотном потоке машин, ты не можешь двигаться значительно быстрее (или медленнее) самого потока. При этом сам поток движется в одном глобальном направлении, над которым работает компания. 

Да и не все компании имеют глобальные (международные) проекты. Многие ограничены, например, одной страной. В Huawei RRI — по-другому.

Направлений разработок и исследований столь много, что по сути вы можете выбирать, предлагать свои проекты и получать на них финансирование и даже, в некоторых проектах, работать для Open Source community, получая деньги в Huawei.

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

В образовательном проекте по алгоритмическому программированию Moscow Workshops тренерами часто выступают бывшие победители мировых чемпионатов. Студенты приезжают в новую страну — Сингапур, Китай, Бразилию, Испанию — и погружаются на восемь дней в интенсивную подготовку вдали от привычной суеты.

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

Популяризацией спортивного программирования в России сейчас активно занимается МФТИ. Вуз при поддержке Фонда президентских грантов и Фонда развития Физтех-школ запустил многоуровневую бесплатную программу подготовки для тех, кто хочет прокачаться в спортивном программировании и ИИ, — фестиваль Rucode.

Его финал — всероссийский онлайн-чемпионат, в котором может поучаствовать любой желающий. 

Shutterstock / puhhha

Особенности топ-кодеров

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

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

Леонид Чёрный, директор по управлению данными «МегаФона»


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

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

В то же время спортивных программистов часто критикуют за поспешность. Тут тоже нужно понимать специфику контестов. Цель участника – за рекордный срок подобрать решение, которое будет работать с вероятностью 100%. Насколько красивым и изящным оно будет — уже другой вопрос. 

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

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

Например, задача может начинаться так: «Маленький Петя очень любит подарки. Его мама подарила ему на день рождения две строки равной длины, состоящие из больших и маленьких букв латинского алфавита. Теперь Петя хочет сравнить эти строки лексикографически».

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


Shutterstock / Joyseulay

Многие турниры предлагают участникам разбирать задачи, которые стоят перед реальными компаниями. Так, на первенстве Google Code Jam нужно работать с реальными кейсам Google. 

Кроме того, многие организаторы предоставляют для турнира оригинальные датасеты предприятий — это позволяет программисту решать промышленные задачи в спортивной среде. Например, на фестивале Rucode для участников трека по искусственному интеллекту есть кейс Аналитического центра при Правительстве РФ по соотнесению объектов в реестрах карт и в реальности.

С коммуникациями у «спортсменов» редко возникают проблемы. Они привыкли работать в команде, делегировать задачи и избегать конфликтов. От гибкости и умения быть командным игроком зависит победа, поэтому спортивные программисты редко идут на конфликт или упрямо настаивают на своей правоте в спорных ситуациях.

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

Алексей Толстиков, руководитель региональных академических проектов «Яндекса»


Спортивные программисты — это специалисты, которые готовы создавать что-то новое и востребованное в довольно сжатые сроки.

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

Все эти качества они приобретают благодаря регулярным тренировкам и участию в конкурсах и олимпиадах. Многие из тех, кто занимается спортивным программированием, приходят к нам на позиции стажеров и успевают совмещать учебу в университете и работу над реальными проектами компании.


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

  1. Определите заранее, какие задачи будет решать спортивный программист в команде. «Спортсмену» лучше поручить проекты, которые требуют нестандартного взгляда и оригинальных решений. Не стоит нанимать «олимпиадника» для рутинных задач, с которыми справится любой другой профессионал.
  2. Спортпрограммист отлично впишется в команду стартапа, которая разрабатывает технологию с нуля. Такой разработчик поможет запустить сложный проект, который пока существует только на бумаге.
  3. Крупной компании топ-кодеры нужны, чтобы совершить прорыв, быстро перестроить процессы и устроить технологическую мини-революцию.
  4. Всегда ставьте «спортсмену» четкое ТЗ, но оставляйте пространство для экспериментов. Сразу обозначьте, какой результат хотите получить, но предоставьте свободу в выборе инструментов.
  5. Ищите топ-кодеров на сборах и чемпионатах — многие предприятия используют контесты в процессе хантинга. Например, представители компаний приходят познакомиться с участниками на чемпионатах вроде Moscow Programming Contest или Moscode. 
  6. Заранее учитывайте ограничения по бюджету. Медалисты и чемпионы высоко оценивают свою работу и могут позволить себе выбирать, поэтому обычно они обходятся дороже.
  7. Помните, что спортивный программист — это не панацея. Он не поможет скорректировать неудачную бизнес-модель или спасти нежизнеспособный продукт. Однако он может создать крутое программное решение с нуля и построить базу, на которой будут в дальнейшем строиться разработки компании. 

Фото на обложке: Shutterstock / Elle Aon

Нашли опечатку? Выделите текст и нажмите Ctrl + Enter

Материалы по теме

  1. 1 «Стоит дороже, а знает меньше»: 6 мифов о спортивных программистах
  2. 2 «Скорость – важный фактор успеха». Кто такие спортивные программисты
  3. 3 Геннадий Короткевич: «Меня не раз звали в Google, но работа мне пока не нужна»
RB в Telegram
Больше полезного контента в Telegram
Подписывайтесь!