Скорее всего, многие из вас слышали про олимпиады по спортивному программированию. В последние годы появилось очень много соревнований по этому виду программирования. Это и Google Code Jam, и Topcoder Open, и Russian Code Cup. Сегодня мне посчастливилось лично пообщаться с Романом Удовиченко (по супер-мега секретной программе подготовки авторов класса «Саурон»), одним из тех, кто добился в них серьезных успехов. Он живет в городе Минске, в прошлом году окончил Белорусский Государственный Университет, работает в компании Яндекс. Он рассказал, как готовился к олимпиадам и чем они помогли ему в жизни.
Всех заинтересованных прошу под кат.
Некоторые успехи Романа:
Серебряный медалист IOI 2007 и 2008
Абсолютный победитель ВКОШП-2007
Финалист студенческого чемпионата мира ACM ICPC 2011
Финалист Topcoder Open 2011 и 2012
Призёр Russian AI Cup 2012
Финалист Russian Code Cup 2011, 2012, 2013
Серебряный медалист студенческого чемпионата мира ACM ICPC 2013
Финалист Challenge24 2014
Финалист Google Code Jam 2014
Q: Рома, когда ты начал заниматься олимпиадным программированием?
A: Я начал заниматься олимпиадным программированием в пятом классе. У нас в школе были разные кружки, в том числе и по информатике. Я стал на него ходить и вскоре научился решать задачки и стал участвовать в олимпиадах.
Q: Как родители отнеслись к твоему выбору, не стали ругать за то, что ты стал много времени проводить за компьютером?
A: Первое время родители отнеслись нормально, как к обычному увлечению, но долго проводить время за компьютером все равно не разрешали. Например, мама ставила ограничение, чтобы я проводил за компьютером не больше одного часа в день.
Q: С чего началась твоя олимпиадная карьера?
A: На кружке мы изучали язык программирования ИнтАл, потом совсем простые алгоритмы. Но потом преподаватель увидел, что у меня очень хорошо получается, и уже через год предложил порешать совсем простенькие задачи олимпиадного направления, начиная с того, что вычислить площадь прямоугольника по двум сторонам и прочие совсем простые. Позже я поехал на областную олимпиаду и понял, что мне это очень интересно и дальше стал решать олимпиадные задачи, изучать алгоритмы.
Q: А когда у тебя была действительно сильная радость от успеха на олимпиаде?
A: В школе все происходило как-то плавно: вначале я поехал на областную, потом на республиканскую олимпиаду, через несколько лет на сборы к международной олимпиаде и на саму международную олимпиаду. Наверное, одна из самых сильных радостей была, когда я взял диплом первой степени на республиканской олимпиаде и поехал на сборы к международной олимпиаде. Еще, пожалуй, когда мы вышли в финал чемпионата по программированию на третьем курсе.
Q: Если бы у тебя была возможность вернуться в прошлое, изменил бы ты что-нибудь в своих тренировках?
A: Хороший вопрос. Возможно, я недостаточно готовился к последней школьной международной олимпиаде в 11 классе, взял там серебряную медаль, был этим очень недоволен. Наверное, стоило готовится поактивнее, но я по разным причинам уделял не очень много времени подготовке. Поэтому у меня получилась только серебряная медаль, хотя хватало сил и умений вроде как на золотую. Вероятно, это можно было бы как-то изменить, но в целом я собой доволен.
Роман второй слева с серебром на IOI-2008
Q: То есть ты всегда нацелен только на высший результат, только на первое место?
A: Не совсем так: я стараюсь более-менее объективно оценивать свои силы и понимаю: в одних ситуациях могу рассчитывать на победу, а в других — прикидываю, где я могу оказаться, на каком месте, исходя, например, из каких-то общих онлайн тренировок.
Q: Как ты сейчас совершенствуешься?
A: На текущем уровне я уже не особо тренируюсь. Потому что я сейчас уже закончил университет, занимаюсь работой и участвую в соревнованиях, так сказать, имея то, что есть.
Q: А в какой момент ты больше всего «прокачался» в плане олимпиадного программирования? Это был лагерь, учебник или что-то другое?
A: Это был учебник Кормена. Однажды в восьмом или девятом классе, я точно уже не помню, мне не удалось попасть на сборы к международной олимпиаде, хотя я очень хотел. И тогда у меня была спортивная злость: «Да блин, почему, я же могу, мне же надо!». Тогда мне родители купили книгу Кормена, это такой здоровый классический учебник по алгоритмам, и я начал целеустрёмленно его читать в течение всего лета.
Та самая книга
Q: Как вообще стоит начинать олимпиадную карьеру?
A: Если действительно хочешь начать заниматься олимпиадным программированием, то учебный процесс должен быть итерационный: ты пробуешь решить задачу, у тебя не получается — ты узнаешь у старших товарищей или преподавателей, как она решается. Узнаешь что-то новое, пробуешь решать новые задачки, опять не понимаешь и так далее… Такой практически-теоретический подход следует чередовать, потому что опыт показывает, что, если просто засесть над учебником и начать учить алгоритмы, а потом пытаться решать задачи, то скорее всего, ничего не получится.
Q: А как ты готовился к олимпиадам в школьные годы?
A: Школьные годы… В школьные годы я старался каждый день помимо уроков решать какие-то задачки. На это уходило в день по несколько часов. В сумме, примерно, часов 20-30 в неделю вместе с выходными. К счастью, у нас в школе был хороший директор, который был рад, что у него в школе есть такой ученик, и поэтому разрешал мне свободное посещение занятий чуть ли не круглый год, чем я пользовался с удовольствием. (улыбается) Благодаря этому я смог больше времени посвящать тренировкам. Хотя и с посещениями у меня не было проблем: школу закончил с золотой медалью.
Q: А как отдыхал?
A: Я любил и до сих пор люблю играть в настольные игры с друзьями, в школе, например, мы любили играть в «Колонизаторов». Кроме этого играли в Манчкина и другие классические. Еще играл в футбол и волейбол, по вечерам часто ходил на стадион.
Рома играет в Magic: The Gathering
Q: А в студенческие годы?
A: В студенческие годы все очень сложно, потому что я очень хотел поехать на финал чемпионата мира, и там какое-то время мы тренировались очень сильно, возможно, даже слишком. Бывали такие дни, когда мы решали по два пятичасовых контеста в день. Когда мы на втором курсе хотели поехать на финал, тренировались по 40-50 часов в неделю, это дало свои плоды, но по некоторым причинам все-таки нам не удалось поехать, зато удалось в следующем.
Q: Насколько помню, на третьем курсе вы не очень удачно выступили, как так?
A: Да, на третьем курсе мы заняли место где-то посередине таблички. Но, думаю, это было связано с волнением. С этим чувством мы так и не смогли справиться в течение всего соревнования. Все мысли были примерно такие: «Вааа! Уже все сдают задачки, у всех уже по 2-3, а у нас ничего не получается! Паника, паника, паника — что же делать?» Это неосознанно, но очень мешает сосредоточиться.
Q: Ты буквально неделю назад был в Лос-Анджелесе на Google Cod Jam, доволен ли ты своим результатом или можно было бы лучше? И как в целом выступило СНГ?
A: СНГ выступило хорошо, многие ребята в верхушке таблицы. Я занял 10 место, не потому, что не не придумал задачку, а из-за небольшой идеологической ошибки. Если честно, мне очень обидно осознавать, что я придумал как решать, но применил не совсем верный подход.
слева: Рома, Андрей Малевич, за ним — сотрудник из Google
справа: Гена, Дмитрий Егоров
Q: А какой тур был самый трудный и есть ли у тебя какой-нибудь алгоритм в решении задач?
A: Да, наверное, не было таких. Я стараюсь решать туры без лишнего напряжения: если в какой-то момент не хватит усилий, чтобы пройти в следующий раунд – так тому и быть. Что насчет алгоритма решения: я стараюсь не гнаться за сложными, непосильными задачами, а стремлюсь поувереннее набрать баллов на более доступных для меня задачах.
Q: Ты сказал, что стараешься участвовать в разных отборочных соревнованиях и по возможности ездить на финалы. А не мешает ли твоя олимпиадная карьера работе?
A: Нет, не мешает. В Яндексе много олимпиадников, бывших и нынешних, так что у нас нет такого: «Не езжай на соревнования, сиди, пиши код на работе" (улыбается)
Перед началом Code Jam'а
Q: Яндекс и ABBYY организовали прекрасный лагерь, тут действительно круто. Ты сюда приехал как преподаватель, нравится ли тебе это и что движет внутренне тобой? Если бы не твоя работа в Яндексе, был бы ты готов потратить все свое время на то, чтобы учить детей?
A: Мне безумно нравится учить детей, это одно из моих любимых занятий в жизни. К сожалению, у нас в стране так складывается, что учителям платят не очень высокие зарплаты, поэтому я не готов полностью посвятить себя преподаванию. Программировать мне тоже нравится, поэтому я хочу работать в какой-нибудь крупной компании, делать какие-нибудь интересные проекты и получать хорошую зарплату. Разумеется, учить детей мне тоже очень нравится, поэтому я с удовольствием участвую в проведении летних лагерей, вроде этого. На сборах или в лагерях я стараюсь убедить детей, что я не страшный и мне не нужно бояться задавать вопросы, потому что самое страшное, что может произойти, это то, что я отвечу на него не сразу, а через день-два. В целом мне много ребят пишут Вконтакте или на электронную почту как решать ту или иную задачу, и я с радостью им отвечаю.
Q: Хочется ли тебе на кого-то равняться?
A: В целом, да. Есть ребята из Белоруси, такие как Иван Метельский и Гена Короткевич, которые хорошо выступают на различных соревнованиях. Иногда советуюсь с ними, беру пример в плане стратегического, тактического мышления. Из России есть один замечательный человек — это Сережа Копелиович, который тоже служит для меня клевым примером совмещения успехов в олимпиадах и активного, разнопланового развития личности, потому что он общительный, интересуется и танцами, и спортивными играми — в общем и целом весьма положительный молодой человек.
Q: А на каком языке в основном программируешь?
A: Задачки решаю на языке C++, какие-то вспомогательные программки пишу на питоне.
Q: Как ты попал в Яндекс и помогли ли тебе олимпиады?
A: Когда Яндекс решил открыть офис в Минске, а это произошло сразу после моего третьего курса, они приехали к нам небольшой командой и стали проводить собеседование, куда в первую очередь стали приглашать сильнейших олимпиадников. Соответственно, я и еще более десятка человек, которые активно занимались олимпиадами прошли собеседование, нами остались очень довольны, и, можно сказать, что в основном олимпиадники и составили первый состав минского офиса. С тех пор, конечно, он пополнился различными другими разработчиками и не только разработчиками даже, ещё рекрутёрами и прочими специалистами. Но начало офиса было положено именно командами олимпиадников, поэтому можно сказать, что да, олимпиады мне помогли.
Q: Нет ли какого-то дискомфорта или разногласия между олимпиадниками, вроде тебя, и какими-нибудь обычными разработчиками?
A: Есть, на самом деле, но они не критичны. Как и в любой деятельности, часть людей голосует за какой-то один способ разработки, а часть — какой-то другой. Для олимпиадников характерна быстрота и экспрессивность в решении задач. То есть, когда попадается какая-то задача, которую нужно сделать, олимпиаднику более характерно быстрее её начать делать, чтобы она работала, потому что он этим занимается на всех своих олимпиадах и, когда приходит на работу, пытается там действовать так же. Однако не всегда это хорошо. Иногда нужно подумать, спланировать, спроектировать, прежде чем делать. Этого олимпиадники в большинстве своём не умеют.
Q: Что ты можешь сказать о своей работе в Яндексе и какой ты видишь свою карьеру в IT отрасли в будущем?
A: Сейчас я руковожу небольшим проектом, который делается у нас в Минске. В принципе, мне нравится совмещать процесс написания кода с управлением небольшой командой, раздачей всем небольших задачек и каким-то планированием, но, к сожалению, в последнее время это стало все больше и больше уходить в процесс раздачи заданий и планирование и все меньше и меньше в процесс написания кода, и мне такая тенденция не нравится, потому что код я писать умею, люблю, делаю это более-менее хорошо и не хотелось бы от этого уходить в менеджерско-управленческую деятельность. Надеюсь, что в будущем я смогу тоже руководить каким-то проектом, достаточно небольшим, в рамках Яндекса, чтобы успевать и проконтролировать работу остальных сотрудников и пописать код самому.
Роман за работой
Q: А каким проектом ты занимаешься в данный момент?
A: Мы улучшаем подложку карт, т.е. то, что используется другими сервисами: пробками, маршрутизацией, панорамами и другими. Они используют базовую подложку карт, т.е. базовые картинки домиков, улиц и прочее. Мы в последнее время занимаемся тем, что улучшаем читабельность этой подложки. Наши менеджеры придумывают, как сделать ее еще более наглядной, более понятной и удобной для пользования и ориентирования, а мы реализуем это. В частности, в начале лета мы запустили проект под названием «Ориентиры на картах» и теперь у нас на Яндекс.Картах можно смотреть на какие-то здания не просто: «А вот это здание номер 25 такой-то улицы», а написано, что это концертный зал, кинотеатр или аптека.
Q: Хабр читаешь?
A: Да, читаю. (Улыбается)
Q: А что читаешь и что считаешь там полезным?
A: Я читаю Хабрахабр в ленте Вконтакте. Я подписан на группу и просто просматриваю заголовки, которые там попадаются и открываю интересные статьи. Обычно для меня интересны какие-то новости о машинном обучении, питоне и всем околопитоновским.
Q: Держи такой бонус-вопрос: Твое отношение к покеру и как эта игра «прокачивает» мозг, стоит ли включать ее в учебную программу, можно ли на этом чему-то научиться?
A: Забавный вопрос. У меня отношение в целом такое же, как к компьютерным играм. Это занятие, в первую очередь, зависит от самого человека: можно спокойно поигрывать в покер или онлайн игры в свое удовольствие, не тратя ни копейки, а можно и в каких-нибудь шашках или шахматах проиграть состояние. Игры, конечно, бывают более азартные или менее азартные, но все-таки степень пристрастия к ним зависит от человека. А что касается покера — эта игра имеет неплохую математическую основу. Не то, чтобы я призывал ее изучать, но играть в покер и понимать, что там происходит — вполне себе достойное занятие.
Q: Рома, спасибо тебе за интервью, успехов в будущем и читай это интервью на Хабре!
A: О’кей, спасибо большое. Если еще что-то хотите спросить, “допросить”— обращайтесь (смеется).
Огромнейшее спасибо MagisterLudi, моему наставнику в написании статьи.