Разработка
Kirill Bychkov

Инструкция: как стать "мастером спорта" по программированию

В карьере разработчика нет высшей финальной точки – осваивать новое приходится постоянно. Зато можно быстро прокачать навыки и перепрыгнуть сразу несколько ступенек карьерной лестницы. Лучший способ это сделать – освоить спортивное программирование.

Школу олимпиадного кодинга прошли сотни тысяч айтишников, в том числе топ-менеджеры Google, Facebook и VK. Команда Moscow Workshops составила подробную инструкцию для начинающего "спортсмена".

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

Спортивное программирование, как понятно из названия, – это разновидность интеллектуального спорта. Разработчики решают сложные алгоритмические задачи на скорость, используя популярные языки программирования – в основном C/C++, Kotlin, Java и Python.

Существуют как локальные конкурсы, например, мини-турниры на платформах Codeforces, TopCoder или Codechef, так и крупные международные чемпионаты и олимпиады, в которых участвуют десятки тысяч программистов.

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

А зачем это нужно?

Во-первых, это сильно затягивает. На платформе Codeforces зарегистрировано больше 750 тыс. человек и из них 60 тыс. участвует в рейтинговых раундах. Большинство решает задачи в свободное от работы время, чтобы получить красный статус гроссмейстера.

Интервью со спортивными программистами и видео с лайфхаками собирают миллионы просмотров на YouTube. Например, ролик, в котором Геннадий Короткевич завершает финальный раунд чемпионата Google Code Jam, посмотрели почти полмиллиона раз. Геннадий Короткевич – легенда спортивного программирования, двукратный чемпион мира, который победил практически во всех существующих соревнованиях.

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

Из спортивного программирования выходят успешные предприниматели и топ-менеджеры. Например, бывший CTO Facebook и основатель Quora Адам Д'анджело или сооснователь стартапа AI Factory Александр Машрабов, который продал свою компанию гиганту Snap. Ну а о том, какую роль спортивные программисты сыграли в истории "ВКонтакте" и Telegram, можно не упоминать.

Кстати, именно в России базируются лучшие спортивные программисты. Россия стабильно занимает верхние строчки рейтингов Google Code Jam, Facebook Hacker Cup и TopCoder Open, а на студенческих турнирах МГУ, ИТМО, МФТИ и НИУ ВШЭ обходят MIT, Гарвард, Оксфорд, Кембридж и Университет Цинхуа.

С чего начать?

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

Главное для начинающего "спортсмена" – это знание хотя бы одного языка программирования. Лучше всего подойдут С, С++ и Java, но популярный сейчас Python тоже неплохой вариант для начала. Раньше в ходу был и Pascal, но на современных турнирах этот язык уже давно не практикуется.

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

Также обязательно пригодится базовая математическая подготовка, знание векторной геометрии и тригонометрии. Делимость, ее свойства, представление целых чисел, теория графов, алгоритм Евклида – это точно нужно знать. Без опыта алгоритмического программирования и базовых знаний информатики тоже не обойтись. Увы, но школьных знаний в этих сферах недостаточно – на уроках и задачи не те, и инструменты другие.

Если планируете выступать на чемпионатах в высших дивизионах, потребуется более серьезная прокачка. Теория графов, остовные деревья, алгоритм Флойда – Уоршелла, преобразование Фурье, выпуклые оболочки, базовая теория игр, основы динамического программирования – все это вы должны знать так, чтобы, проснувшись посреди ночи, применить знания на практике.

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

Начните решать задачи. Practice makes perfect – это правило работает и для спортивного программирования. Чтобы понять специфику заданий на соревнованиях, зарегистрируйтесь на популярных платформах, например, Timus Online Judge, SPOJ, Codechef, тех же TopCoder и Codeforces, Codingame и C Puzzles. На русском есть отличный ресурс informatics.mccme.ru.

Начинайте с задач, у которых самый большой процент решаемости – они самые простые. А потом понемногу повышайте уровень сложности.

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

Посмотрите мастер-классы на YouTube – там часто пошагово показывают решения сложных кейсов. Еще стоит заглянуть в тред вопросов на Quora: там программисты делятся своими тревогами, а новички советуются с мастерами. Например, можно узнать, был ли Цукерберг хорошим кодером и как олимпиадное программирование помогает в карьере.

А что потом?

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

Регистрируйтесь на сборы, буткэмпы и интенсивы – сейчас большинство проходит в онлайн-режиме. Начинать можно еще в старших классах – например, на кампуспе МФТИ проходит лагерь Moscow Workshops Juniors. Занятия в них ведут преподаватели российских и зарубежных вузов.

Приготовьтесь к жесткому графику – например, студенческие сборы Moscow Workshops длятся 8 дней, причем тренировки проходят ежедневно. Мастер-классы организуют в Европе, Азии, на Ближнем Востоке, в Южной Америке – география широкая. Это не только отличный способ быстро прокачать навыки, но и возможность познакомиться с новыми людьми – в том числе с будущими конкурентами из разных стран. Многие, кстати, заводят друзей на сборах, а потом вместе открывают бизнес.

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

Начинайте участвовать в контестах. Большинство крупных чемпионатов проводят онлайн-раунды, в которые попасть может любой желающий. В редких случаях в чемпионате можно участвовать без предварительного отборочного турнира – например, международный фестиваль RuCode, который запустили МФТИ, Яндекс и МегаФон при поддержке Фонда президентских грантов, открыт для программистов всех возрастов разного уровня. Чемпионат пройдет в это воскресенье и поучаствовать в нем сможет любой, кто прошел регистрацию на сайте. HashCode, Google Code Jam, TopCoder Open и VK Cup устанавливают минимальные требования для прохождения отборочных туров – можно попытать удачу и, если повезет, пройти в финал.

Студентам стоит попробовать свои силы на крупнейшем чемпионате ICPC, а школьникам – на Всероссийской олимпиаде школьников по информатике, а затем и международной IOI, Открытой олимпиаде школьников по программированию, ВКОШП и Технокубке.

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

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

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

0
4 комментария
Популярные
По порядку
Григорий Николаенко

Хорошая статья, спамибо очень полезно!

Ответить
1
Развернуть ветку
Лапук Мария

Мастер спорта)

Ответить
0
Развернуть ветку
Paul Mayer

Ща Бадюк подъедет

Ответить
0
Развернуть ветку
Заитов Роберт

Это что новый вид спорта такой?))

Ответить
0
Развернуть ветку
Читать все 4 комментария
Аллилуйя: платные комментарии на vc.ru существуют

Не замечали в статьях на vc.ru про крупные банки (да и не только про банки) странные комментарии? Вдруг десятками слетаются любители бренда и начинают его защищать от нападок. Исследую, существует ли рынок платных комментариев для «Виси‎», и уже нашел первые следы.

Как добиться перехода на электромобили? Спросите Норвегию

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

Вы ВТБ или календарь праздников?

Зачем в мобильном приложении ВТБ каждый день показывают клиентам, какой сегодня день в истории? Нет, я очень уважаю Эйзенштейна, Сезанна и Винни-Пуха, но вам не кажется, что клиенты заходят совсем не за этим?

Яндекс.Директ меняет формат работы корректировок в Конверсионных стратегиях. «Нас не просили, но мы сделали!»

В конце Декабря 2021-го года Яндекс.Директ анонсировал изменение формата работы корректировок ставок для кампаний с конверсионными стратегиями. Теперь выставленная корректировка будет влиять не на стоимость клика, а на конечную стоимость конверсии. Что это, и как это повлияет на эффективность и окупаемость рекламы — разберём сегодня в статье.

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

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

«Инновации — это поле для сражений»

Как фуд-ритейл внедряет новые технологии.

«Холакратия, любимые мемчики и прозрачность»: программист о работе в Точке, моделинге и запуске треков на Spotify

Точка — это про людей. Про сотрудников, которые создают удобный банк для бизнеса. Мы запускаем серию интервью с нашей командой, чтобы рассказать, как у нас всё устроено.

Статус бота Veles
В Москве появился фонд, инвестирующий в перспективные транспортные проекты

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

Токсичная маркетинг-тусовка: как у номинального директора по маркетингу Самолета подгорело от нашего кейса

Наш c Digital Bands кейс про продажу квартир на PornHub завирусился после публикации на VC. По сути мы были первопроходцами: до нас никто не продавал недвижимость на порносайтах. Получили награду, опубликовали кейс — и хапнули негатива от коллег по цеху и приближенных к маркетингу. Но одно дело — комментарии среднестатистического спеца под…

SMM-кейс: бар Сайгон (г. Санкт-Петербург, ул. Рубинштейна)

Бар Сайгон радует петербуржцев уже 5 лет. Часто его принимают за одноименный советский бар, который посещал еще сам Виктор Цой. Однако это, скорее, дань старому Сайгону.

null