Основатель Codeforces Михаил Мирзаянов — о том, как крупнейшая площадка для соревнований по программированию изменилась за 10 лет

Одна из крупнейших мировых площадок для соревнований по спортивному программированию — платформа Codeforces — отмечает свое десятилетие. В начале 2010-х она была запущена преподавателем Саратовского государственного университета Михаилом Мирзаяновым. С тех пор Codeforces стал настоящей социальной сетью для любителей спортивного программирования, где проводятся соревнования, идет общение специалистов и любителей из разных стран. Только за прошлый январь аудитория ресурса составила около полумиллиона человек со всего мира. Сам основатель платформы полтора года назад присоединился к команде Университета ИТМО. Корреспондент ITMO.NEWS встретился с Михаилом и узнал, в чем отличие соревнований площадки от ICPC, чем Codeforces привлекает пользователей и почему сейчас проект запустил краудфандинг (добавим, что поддержать платформу можно по этой ссылке).  

Михаил Мирзаянов

Как все начиналось

С чего все началось? Почему десять лет назад вы решили создать площадку для проведения соревнований по спортивному программированию?

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

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

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

Tinkoff Challenge 2017. Источник: социальные сети
Tinkoff Challenge 2017. Источник: социальные сети

Как велась эта работа? Какие были первые шаги на пути к созданию Codeforces?

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

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

Во время разработки Polygon я обкатывал те технологии и подходы, которые планировал использовать и для Codeforces. Например, для разработки веба на Java я написал микро-фреймворк, который, жонглируя загрузчиками классов, поддерживает горячую перезагрузку кода всего приложения. Это значительно ускорило разработку. Никаких редеплоев: написал код, скомпилировал в среде, нажал F5 в браузере и вот тебе результат. В мире Java, особенно конца 2000-х, традиционная разработка так не работала.

Я впервые показал Polygon коллегам в 2009 году во время финала Чемпионата мира [по программированию] в Стокгольме. А затем уже полноценно заработал и Codeforces. Основную часть проекта я писал в состоянии потока, я программировал по 14 часов в сутки изо дня в день, писал какое-то нереальное количество кода и функционала. Участие в соревнованиях приучило меня работать быстро, именно в таком режиме я люблю писать код — не важно олимпиада это или более промышленная разработка. 

Codeforces. Источник: codeforces.com
Codeforces. Источник: codeforces.com

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

Мне сразу стало понятно, что надо сделать не только площадку для проведения соревнований, но и место для общения. Уже на моменте появления идеи Codeforces имела явные черты социальной сети. Вторая половина 2000-х — это время Web 2.0.

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

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

Михаил Мирзаянов
Михаил Мирзаянов

Любой пользователь Codeforces, который благодаря участию в предыдущих раундах подтвердил свой уровень и опыт, может оставить заявку на проведение раунда. Такие заявки появляются, и сейчас с ними работают координаторы — несколько ребят, которые хорошо разбираются в подготовке задач и вплотную работают с авторами. Они смотрят в идеи задач, понимают, из каких задач можно сделать раунд, помогают авторам что-то «докрутить». Перед раундом проходит тестирование. К примеру, человек не может принять участие в ближайшем раунде и не против помочь написать этот раунд предварительно, высказать мнение о задачах, подтвердить правильность авторских решений, полноту тестов. С помощью такого механизма мы добиваемся того, чтобы раунды проходили с заложенной частотой и высоким средним качеством.

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

Десять лет спустя

Насколько сильно изменилось сообщество любителей спортивного программирования за те 10 лет, пока работает Codeforces?

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

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

ICPC
ICPC

Какая сейчас аудитория у Codeforces?

К примеру, за прошедший январь, по данным Google Analytics, у нас было около полумиллиона пользователей и 32 миллиона просмотров страницы. То есть около миллиона просмотров в день. Средняя продолжительность сеанса — более 15 минут. Немногие сайты могут похвастаться столь длительным средним пребыванием на их площадках.

На один раунд сейчас регистрируется около 17 000 пользователей со всего мира, и это количество постоянно растет. Я не так давно вспоминал, смотрел историю, как 10 лет назад мы впервые перевалили 1000 регистраций на раунд! Тогда это казалось много.

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

Мы с удовольствием работаем с компаниями, проводим совместные мероприятия, иногда даже с очным участием финалистов в конце. Долгое время мы сотрудничали с компанией «ВКонтакте» и проводили VKCup, у нас большая совместная история работы с Mail.ru, с другими компаниями — как большими, так и стартапами. Мы открыты к сотрудничеству со всеми, кто разделяет наш интерес к спортивному программированию — с теми, кто готов провести совместный раунд или чемпионат, поддержать сообщество.

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

ICPC
ICPC

В чем отличие заданий в соревнованиях Codeforces от заданий других олимпиад, к примеру, ICPC?

В целом задания, разумеется, похожи. Однако ICPC проводится в течение пяти часов для команд из трех человек. Наши соревнования идут два часа, и решает задачи один человек. В результате они, как правило, лаконичнее, короче по форме. Хотя в целом соревнования у нас бывают разные — для начинающих, для профессионалов, смешанные.

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

Не задумывались о том, чтобы добавить другие языки?

Организационно это сложно — мне довольно непросто будет гарантировать надлежащее качество переводов. К тому же, сразу встанет вопрос, например, мы добавим испанский, а почему нет китайского? А если дадим китайский, где хинди? И этот процесс будет бесконечен.

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

Вы сказали, что вам важно лично гарантировать качество перевода и вопросов. Насколько много вы лично делаете для Codeforces, нет ли желания делегировать какие-то полномочия?

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

Я трачу на Codeforces и задачи от восьми часов каждый день. Иногда значительно больше. Бывает, ночью меня будит алерт в Telegram, что на одном из серверов что-то пошло не так. Я встаю и чиню. Работа Codeforces не прекращается, не имеет каникул. К сожалению, я не могу просто выключиться из этого процесса и сказать: «До свидания, я уезжаю на месяц на остров кататься на серфе». Хотя желание иногда есть.

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

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

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

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

Из Саратова в Санкт-Петербург

Михаил Мирзаянов
Михаил Мирзаянов

Еще несколько вопросов о вас лично, о вашем переезде в Петербург, в Университет ИТМО. Какие у вас впечатления от смены города сейчас, спустя полтора года?

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

Наконец, я в восторге от студентов Университета ИТМО. Здесь очень высокий средний уровень студентов, с ними приятно работать.

Знаете, для меня очень важно иметь интересные задачи. Если мне интересно, если я горю, если я просыпаюсь с мыслью как сделать мое дело лучше, то я понимаю, что делаю правильное дело. Мне необходимо иметь возможность его реализовать. На протяжении долгого времени домом для Codeforces был Саратовский университет, теперь это Университет ИТМО, атмосфера в котором мне тоже безумно нравится.

VKCup-2016. Источник: социальные сети
VKCup-2016. Источник: социальные сети

Есть ли разница между школами программирования в саратовских и в петербургских вузах?

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

Еще одно впечатление от ИТМО: очень приятно, что каждый день, приходя и уходя с работы, я вижу большое количество детей в холле. Постоянно идут какие-то кружки, какие-то занятия. Мне кажется, это очень важно. Любой университет должен много работать со школьниками. Будет ошибкой думать, что к вам повалят абитуриенты только из-за вашего статуса. И мне кажется, что тот конкурс, который сейчас есть в Университете ИТМО, связан в том числе и с глубокой работой со школьниками.

Редакция новостного портала