Вы находитесь на странице: 1из 6

Спортивное программирование: чем отличается от классической

разработки и помогает ли в IT-карьере?

ЛиД: Олимпиады по информатике берут свое начало еще в 80-х. С тех пор утекло
немало воды и строчек кода, да и спортивное программирование стало
прерогативой не только профильных университетов. Теперь собственные
турниры – распространенная активность IT-компаний.

Быть участником олимпиадного движения – значит уделять немало времени


тренировкам. Стоит ли игра свеч, если написанный во время турнира код нельзя
нигде применить? Являются ли школьные олимпиады по информатике весомым
вкладом в будущую профессию? Взвесим все “за” и “против” вместе с Иваном
Копейкиным, Software Engineer iTechArt, который знает олимпиадную систему
изнутри.

ЛиД (сокращенный): Выяснили, зачем будущим программистам стоит


участвовать в олимпиадах по информатике.

НАШ СОБЕСЕДНИК:
Иван Копейкин. Software Engineer iTechArt. Впервые стал участником олимпиадного
движения по информатике, учась в 7-м классе. Призер заключительного этапа
республиканской олимпиады по информатике.

Поясни, пожалуйста, в чём основная суть спортивного программирования

ИВАН КОПЕЙКИН: Дается несколько задач, их нужно решить за отведенное время и


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

Пример таких ограничений для задачи на codeforces:

Важный момент: В задаче дается такое условие, что если решить ее “в лоб”, то
программа будет работать слишком долго, либо ей не хватит памяти. В таких
ситуациях и нужны алгоритмы. Самый распространенный пример: у нас есть разные
алгоритмы сортировки чисел. Один алгоритм работает медленно, а другой быстро. С
нашими вычислительным мощностями мы можем быстро сортировать 100-500-2000
чисел, но когда их много (миллионы или, даже, миллиарды), медленной сортировке
понадобятся годы (!), зато быстрая сортировка сделает свою работу за доли секунды.

Когда ты начал участвовать в олимпиадах по программированию? Что было


основным мотивом?
ИВАН КОПЕЙКИН: Я заинтересовался олимпиадами еще в классе 7-8. Тогда активно
обсуждали успехи Гены Короткевича, а мне было интересно начать программировать и
решать какие-то задачи, чтобы видеть результат своих трудов. Думаю, Гена своим
успехом сделал великолепную рекламу олимпиадного программирования. Еще в
школе мой учитель информатики подталкивал попробовать себя в этом и настаивал
обратиться к Михаилу Семеновичу Долинскому, его знают многие в нашей стране. В то
же время я решился сходить на школьную олимпиаду и дошел до областного этапа,
просто решив среди сверстников больше задач. Думаю, такие результаты показали,
что есть к чему стремиться. К своей первой олимпиаде готовился недели две от силы.
Написанный код оставлял желать лучшего :)

Нашел фотографию, где мой тренер Михаил Семенович и я думаем о чем-то


насущном (я справа, с энергетиком :D)

В каких олимпиадах по программированию ты участвовал?

ИВАН КОПЕЙКИН: Я участвовал в абсолютно разных олимпиадах. И от частных


компаний, и в белорусской республиканской олимпиаде, и в питерской олимпиаде для
школьников от Андрея Станкевича.

Главным событием для ребят из Беларуси является белорусская республиканская


олимпиада школьников по информатике. Проходит в течение всего учебного года, в
октябре-ноябре стартует школьный этап, а весной заканчивается республиканским
(заключительным) этапом. Успехи этого соревнования зачтутся в баллы при
поступлении для 11 классов (кто-то и вовсе получит возможность поступить без
вступительных экзаменов), а ребята из топа получают возможность съездить на IOI –
международную олимпиаду по информатике. Я получил свои дипломы с
заключительных этапов этой олимпиады, даже тортик выиграл, но на международную
олимпиаду так и не попал. :)

Участие в частных олимпиадах (спонсором олимпиады выступает какая-нибудь


компания, например, Google) принесли мне пару прикольных футболок и предложения
о работе. Мотивы для участия в таких олимпиадах разные: у кого-то хороший призовой
фонд (на Google Code Jam за 1 место можно получить $15 тысяч), а где-то просто
спортивный интерес.

Здесь как с хакатонами: мероприятие сильно выматывает, обстановка напряженная, но


люди на нем, общие интересы, общение — вот в чем сила.

Как устроены данные олимпиады, какие основные правила? Там предусмотрен


индивидуальный зачёт или командный?

ИВАН КОПЕЙКИН: Да, олимпиады по информатике есть с индивидуальным зачетом и


командным. В индивидуальном зачете ты наедине с собой и своими задачами в
течение 5 часов, а в командном на 3-4 человека один компьютер, пока один пишет код,
остальные устраивают брейншторм для решения задач. Конечно, условия проведения
олимпиад отличаются друг от друга, но идея такова: нужно решить как можно больше и
быстрее различные задачи, уложившись во все условия. Как правило, здесь не
поможет скорость языка или тривиальное решение, нужно хорошо подумать, как найти
достоверно правильный ответ за оптимальное время. Еще и протестировать все это,
чтобы решение не упало. Интересный факт: в командном зачете дебаг происходит на
листочке бумаги :)

Какие задачи в основном рассматриваются на таких турнирах?

ИВАН КОПЕЙКИН: Условия задач абсолютно разные. Будет одна задача, чтобы просто
размять пальцы, где особо думать над решением не нужно. Условия строятся таким
образом, чтобы вдохновиться каким-то алгоритмом, а затем реализовать решение,
отталкиваясь от него. Здесь уже бывают задачи на графы, построение деревьев,
динамическое программирование и так далее.

Пример условия довольно простой задачи:


Твой личный опыт – как готовиться к олимпиадам по программированию, на что
делать особый упор?

ИВАН КОПЕЙКИН: Больше практики. Выучить абсолютно все невозможно, но с


опытом приходит навык поиска решения проблемы. Михаил Семенович Долинский,
мой тренер, проводит каждое воскресенье занятия. Мы начинали в 9 утра и
заканчивали около 14:00. Кто желает больше — пожалуйста, можно прийти раньше
или закончить позже.

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

Вот лог решений, когда я активно готовился к республиканской олимпиаде:


Какие языки используются в спортивном программировании?

ИВАН КОПЕЙКИН: Ребята, с которыми я учился и тренировался, в основном писали


на Turbo Pascal или С++. На заключительных этапах 1-2 человека писали решения на
Java. Я для себя выбрал С++ и решал задачи на нем. Этот язык позволял мне
распоряжаться памятью так, как я хотел, за что иногда платился ошибками c “Runtime
error”. Также важным преимуществом была стандартная библиотека, в которой
содержались уже готовые алгоритмы, например быстрая сортировка. На Pascal же
приходилось писать быструю сортировку самостоятельно :)

Что общего у классической коммерческой разработки и спортивного


программирования?

ИВАН КОПЕЙКИН: Из общего, наверное, только дедлайн. И там, и здесь время на


реализацию задачи ограничено.

Код, написанный на олимпиаде, больше не будет использоваться. Да и не стоит цель


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

С началом работы в IT ты попрощался с этим увлечением?

ИВАН КОПЕЙКИН: Не совсем, сейчас периодически решаю задачки на leetcode. Я


давно слышал про этот сайт, но когда начали выходить статьи о том, что с помощью
этой платформы люди готовятся к собеседованиям в FAANG (прим. - аббревиатура,
обозначающая компании Facebook, Amazon, Apple, Netflix и Google)/, решил сам
попробовать. Это не столько сложившаяся привычка, сколько желание размять мозг,
думать, искать решение и изучать что-то новое. Например, я на практике мало
использую Golang, но leetcode – отличная площадка, чтобы что-то написать и
протестировать. Таким образом убиваю двух зайцев: прошелся по алгоритмам и
поработал с чем-то новым. :)

Чувствуешь ли ты, что олимпиадный опыт помог в профессии? Если да, то как
именно?
ИВАН КОПЕЙКИН: Однозначно помог. Я смог сделать свой выбор и определиться с
тем, что мне нравится. Изучить проблему, провести анализ, а затем реализовать
решение. Все олимпиадное движение драйвило мной. Олимпиадное
программирование свело меня со многими классными людьми, которые, также как и я,
увлечены этим. Помимо прочего, это еще научило решать проблемы, уметь
концентрироваться на них и не теряться в стрессовых ситуациях. Думаю, основной
навык любого специалиста — умение решить проблему.

--
Смотри вакансии iTechArt и начинай новый яркий этап своей IT-карьеры!
https://www.itechart.by/careers/junior-java-developer-in-minsk/
https://www.itechart.by/careers/middle-c-developer-minsk/
https://www.itechart.by/careers/java-developer-v-vetebske/

Похожие статьи:
https://www.itechart.by/blog-itechart/code-review-po-vsem-pravilam-chek-list-ot-razrabotchik
ov-itechart/
https://www.itechart.by/blog-itechart/zachem-stoit-izuchat-novejshie-yazyki-programmirovani
ya/
https://www.itechart.by/blog-itechart/vybiraem-yazyki-programmirovaniya-kotorye-mozhno-by
stro-vyuchit-tekhnaryam/