Геннадий Короткевич: «Меня не раз звали в Google, но работа мне пока не нужна»

113

Предлагаем вашему вниманию интервью Геннадия Короткевича ресурсу Rusbase

Сегодня Короткевич является самым титулованным программистом мира и занимает первое место в рейтинге сильнейших кодеров по версии Codeforces. Он выиграл все самые известные соревнования, начиная от командного чемпионата мира (дважды) и заканчивая индивидуальными турнирами.

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

— Где ты был 24 мая — в тот момент, когда стало ясно, что команда из ИТМО в очередной раз выиграет чемпионат мира?

— Я тоже находился в Рапид-Сити, где проходил финал, и мне было очень приятно, что ребята победили. Я, кстати, решал те же задачи — параллельно со всеми участниками турнира. Ради фана мы собрали неофициальную команду, в которой были Петя Митричев (занимает первое место в рейтинге TopCoder.com — прим. Rusbase), Миша Тихомиров (тренер команды МФТИ — прим. Rusbase) и я — и вели онлайн-трансляцию на YouTube. Таким составом нам удалось решить 11 задач из 12. То есть мы бы тоже могли выиграть чемпионат мира, не будь мы такими старыми (смеется).

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

— Я больше не выступаю на командном чемпионате мира, потому что по правилам в нем можно участвовать только два раза. Поэтому у меня сейчас вольный формат, я участвую в соревнованиях, которые мне интересны. В середине июня еду в Сиэтл — на турнир от Facebook. В августе пройдут соревнования Google Code Jam. На них после отборочных раундов поедут 25 лучших программистов, финал пройдет в Дублине.

— Соревнования по программированию обычно длятся пять часов. Как твой мозг выдерживает такое напряжение? Можно ли применять какой-нибудь «допинг»?

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

— У многих спортсменов есть ритуалы. Что делаешь перед соревнованиями ты? Надеваешь «ту самую, счастливую» худи, пьешь крепкий кофе?

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

— Поговорим о скорости. О твоем умении расправляться с задачами ходят легенды. У тебя есть какая-то своя методика?

— Скорее, это определенные подходы и идеи, которые можно применять. С одной стороны, это common sense. То есть какого-то свода методик, как подойти к решению той или иной задачи, не существует. С другой стороны, все очень индивидуально. Например, есть сложная задача. Я ломаю голову над ее решением и не понимаю, как к ней вообще подступиться. И тогда мне бывает полезно взять какой-нибудь частный, конкретный случай. Они бывают легкие, тривиальные, а бывают посложнее. Я пытаюсь найти наиболее сложный для меня частный случай, который еще не умею решать. Решение частного помогает придумать решение для общего. Это лишь один из примеров.

— Что насчет озарений? Сидишь-сидишь, а потом — раз, вот же оно!

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

— Я слышала, что в Марокко ты сильно отравился перед соревнованиями. Это правда?

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

— Есть задачи, на которые ты точишь зуб? Которые так и не смог решить?

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

— Даже несмотря на твою суперскорость?

— Авторы задач готовят их неделями. Понятно, что за такое время можно придумать задачи, которые нельзя решить за пять часов (обычно на турнирах нужно решить от 10 до 12 задач — прим. Rusbase). Хотя обычно у авторов нет цели завалить участников. Они стараются сбалансировать уровень задач, чтобы было всем интересно — и сильным, и слабым командам.

— Объясни — почему на командных соревнованиях на столе только один компьютер на команду из трех человек?

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

— У этих трех человек есть какие-то амплуа? Например, один кодит, остальные думают.

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

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

— Вопрос, который интересует многих твоих поклонников. Почему у тебя ник tourist? С ним связана какая-то история?

— Ой, мне было лет девять, когда его выбрал, не больше. Точно помню, на моих лыжах было написано слово tourist, и оно мне понравилось. Вообще мне еще повезло, что я выбрал себе такой приличный ник. Знаю ребят, которым позже пришлось брать новые имена, потому что старые были ни в какие ворота.

— Самое яркое путешествие из последних?

— В начале апреля я ездил на два турнира. Первый, Hash Code, проводился во Франции, второй назывался PIZZA и проходил в Польше. Между соревнованиями была неделя, и мы решили не возвращаться в Питер, а покататься по Европе. Погуляли по Парижу, съездили в Болонью. Хорошо отдохнули и провели время. Еще в ноябре я впервые побывал в Японии, мне понравилось, как там все устроено, заинтересовала местная культура. Хотел бы еще добраться до Австралии, но там пока не проводили соревнования.

— Твои родители — программисты. Как думаешь, это сыграло важную роль в твоих достижениях?

— Личной подготовкой я обязан папе. В детстве мы с ним много занимались: разбирали задачи, учились программировать вместе, и это было очень классно. Папа объяснял мне программирование так, чтобы я понял. При этом меня никто не заставлял — пойди и позанимайся. Наоборот, бывало, говорили — пойди и отдохни. То есть мне самому решать задачи было интересно. Еще у нас в Гомеле был кружок для школьников-программистов под руководством Михаила Семеновича Долинского. Я попал в среду, где можно было с ребятами что-то пообсуждать и потренироваться — ценная штука.

— Видела фотографию, где ты стоишь с другими участниками соревнований. На вид они все — старше тебя лет на пять.

— Наверное, таких фоток много. В школьных олимпиадах по информатике не было разделения по возрастам и обычно я соревновался с 11-классниками. В старших классах я иногда участвовал в командных соревнованиях в одиночку. Хотелось прокачаться, набраться опыта.

— Сколько раз тебе пожимал руку Александр Лукашенко?

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

— Что он говорил?

— «Спасибо, Гена». Это все, что он успевал сказать, ведь нас было много.

— После школы перед тобой были открыты двери многих университетов. Почему ты выбрал именно ИТМО?

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

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

— Ты думал о том, чтобы учиться за границей?

— Если честно, я не очень представлял себя на тот момент где-то далеко за границей. Я вообще был довольно домашним. Моя гимназия №56 в Гомеле находилась в пяти минутах от дома. Я просто выходил и шел на учебу. Уехать в другую культуру — то есть, по сути, в другое все — мне не хотелось. Поэтому я рассматривал варианты в Беларуси и России.

— Как часто ты ездишь домой?

— Раз в два-три месяца. Есть прямой поезд Гомель — Санкт-Петербург. Он ночной, идет примерно 16 часов. Я ложусь спать, а утром уже дома. Иногда родители приезжают ко мне в Питер.

— Как родители реагируют на твои успехи?

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

— Как умение быстро решать задачи помогает тебе в обычной жизни?

— В магазине могу что-то быстро посчитать и перепроверить. Несколько раз меня обсчитывали — и я это замечал. Не то чтобы специально. Просто в голове автоматически складываются цифры — от этого никуда не деться.

— Сколько ты программируешь в день? Опиши свой график.

— Ох. Я обычно ничего не делаю. Просто сплю (смеется). Вот проснулся, пошел давать вам интервью. Если говорить серьезно, то сейчас я просто стараюсь поддерживать себя в тонусе — готовлю себя к различным отборам и раундам, участвую в тренировках. В школе, когда закладывал базу, мог сидеть за компьютером по полдня. Сейчас мне хватает нескольких часов.

— Объясни, почему ты кодишь на C++. Твой конкурент по рейтингам Петр Митричев программирует на Java.

— Не так важно, на каком языке писать, важно придумать решение. И у Java, и у C++ есть свои преимущества. Например, Java — более строгий язык, делает больше проверок при написании и исполнении программы. C++ каких-то ошибок может просто не заметить, программа не упадет и продолжит работу некорректно. В том числе поэтому C++, как правило, быстрее Java. Это может быть важно из-за ограничений по времени исполнения.

— Какие у тебя отношения с Петром? Соперничество дает о себе знать?

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

— Самый большой призовой чек, который тебе вручили после победы?

— На крупных соревнованиях призовые могут достигать $15 тысяч. Например, на Google Code Jam.

— То есть за последние три года ты здорово улучшил свое финансовое состояние?

— Получается, что так.

— Что ты сделал с деньгами?

— Пока ничего.

— Все смотрели фильм «Социальная сеть», в котором Марк Цукерберг с друзьями из Гарварда придумывал свой знаменитый стартап. Возможна ли такая история в ИТМО?

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

Предложения о том, чтобы запилить совместный стартап, сыпятся мне регулярно. Особенно много их было в 2013 году, когда я в первый раз выиграл ACM ICPC. От незнакомых людей приходили сообщения из серии: «Эй, Гена, давай сделаем такой-то стартап!» Приходилось вежливо отказывать.

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

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

— Стать кодером номер один — это была для тебя такая «галочка» в списке целей?

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

— Твоя следующая цель? Наука, работа на большую компанию, прорывной стартап?

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

— Тебе предлагали работу в больших компаниях вроде Google?

— Да, несколько раз. Но здесь есть тонкости. Обычно финалистам соревнований не предлагают работу напрямую. Как правило, их сначала зовут на собеседования. Если ты хорошо выступишь на турнире, организованном Google или Facebook, тебе скажут — приходите к нам, пообщаемся. И уже после собеседования могут сказать, на какую позицию приглашают и на какие деньги. Меня так звали в Google, но я не ходил.

— Почему?

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

— В российские компании приглашали?

— Я думаю, что у меня есть возможность попасть и в «Яндекс», и во «ВКонтакте». Это сейчас крупнейшие IT-компании в Петербурге. Некоторые из моих знакомых и друзей уже там. Но я сейчас сосредоточен на учебе.

— Ты бы хотел получить российское гражданство?

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

— Опровергни миф о том, что все программисты — странные гики.

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

Фото (с) Маша Парфитт