Когда вы начали заниматься программированием и как вы поняли, что это именно то, в чем вам хотелось бы развиваться дальше?
Рамазан Рахматуллин: Я из Казани, окончил Казанский лицей имени Н. И. Лобачевского КФУ. В свое время я перешел в эту школу, потому что там работает очень сильный учитель по информатике. Программированием я начал заниматься в 2014 году, тогда я как раз закончил седьмой класс. До этого, с шестого класса, я занимался математикой, мне нравилось решать задачи, хотя постепенно математика стала для меня достаточно скучной. Ведь там ты просто решаешь задачи, а когда пишешь контест по информатике, ты всегда соревнуешься. Мне это нравится. К тому же, информатика более динамична: там нужно не только думать, но и программировать.
Михаил Анопренко: Я из Петербурга, учился в Президентском ФМЛ 239. Но все мои достижения в программировании связаны в большей степени не со школой, а с обучением в кружке олимпиадного программирования в Университете ИТМО, куда я начал ходить с седьмого класса. Еще до этого я съездил в Летнюю компьютерную школу, мне понравилось, и я захотел попробовать себя в программировании.
Сначала я тоже занимался математикой, но не особо преуспевал в олимпиадах по этому предмету. Да и в принципе это в какой-то момент начало казаться мне скучным. А когда ты пишешь код и реально видишь, как он работает, когда ты своими руками создаешь что-то, что может решить какую-то задачу, это приносит большее удовлетворение, нежели просто решение, написанное на бумаге.
Начать во многом помогли опытные наставники. На ваш взгляд, могут ли добиться высоких результатов ребята, которые живут в небольших городах и у которых нет возможностей осваивать программирование на хорошем уровне?
Михаил: В наше время есть много материала, который доступен онлайн: много теоретических лекций, книг, видеоматериалов в принципе онлайн-площадок, на которых можно решать задачи, тренироваться и практиковать свои знания. Ресурсов появляется все больше, поэтому возможности для тех, кто хочет начать осваивать программирование, безусловно, растут. Хотя соглашусь, что проще начать изучать программирование, когда ты живешь в большом городе, где есть хорошие наставники.
В раннем возрасте я начинал осваивать Pascal просто потому, что именно с него обычно начинается обучение. После этого я изучал Python, который мне кажется гораздо более простым. На нем легче обучиться новичку, особенно если ему не нужно задумываться о каких-то фундаментальных проблемах. Но, по большому счету, все языки чем-то похожи, и суть олимпиад по программированию — это не доскональное знание синтаксиса какого-либо языка. Выучить язык несложно, достаточно прочитать книгу. Суть в том, чтобы научиться этот язык применять и создавать с его помощью какие-то готовые решения.
Рамазан: Казань — развитый город, но не настолько большой, как Москва или Петербург. В городе есть возможности на хорошем уровне заниматься информатикой и если ты, условно, хочешь достичь уровня победителя Всероссийской олимпиады — у тебя все получится. Но, если ты хочешь достичь большего, таких занятий будет мало. Поэтому в последнее время я занимался самостоятельно — сидел дома и решал задачи международных олимпиад, их легко найти в открытом доступе.
Если что-то непонятно, можно посмотреть готовые решения. У меня к тому моменту сложился достаточно большой опыт, поэтому мне несложно было разобраться в чужом коде. Самое главное здесь — долго и упорно заниматься. Даже если ты устаешь или тебе становится скучно, ты должен помнить, что у тебя есть цель и ты должен ее добиться сам.
Отбор на Международную олимпиаду по информатике очень жесткий: в сборную проходят только четыре человека. У вас все получилось с первого раза?
Михаил: В летних сборах, которые являются ключевой точкой отбора на Международную олимпиаду по информатике, мы с Рамазаном участвовали четыре раза. Поэтому получается, что только на четвертый раз у нас получилось пройти дальше. Правда, один раз до этого я все-таки прошел в состав второй сборной России, но это нельзя назвать полноценным попаданием в четверку лучших. Конкуренция на соревнованиях такого уровня очень высока и есть большое количество участников, которые в равной степени достойны выступать на Международной олимпиаде.
Рамазан: На второй раз я был очень близок к выходу в сборную, но мне все время не хватало одного тура. Я очень сильно нервничал и не высыпался, это сказывалось на выступлении в последнем туре, где я показывал результаты намного хуже, чем на предыдущих. Но в последний раз я собрался и решил, что надо бы уже пройти. Я очень много тренировался, и это помогло в итоге попасть на соревнования.
Сами международные соревнования тоже проходят достаточно напряженно: два дня по три задачи, только индивидуальная работа, запрет на использование дополнительных материалов. Как справлялись с волнением?
Михаил: Довольно большой опыт участия в олимпиадах помогает сконцентрироваться и не нервничать. По большому счету это соревнования, которые ни на что не влияют. Кроме того, в целом ты знаешь, что ожидать и представляешь, как устроен этот процесс. Все это помогает расслабиться и чувствовать себя в своей тарелке.
Тактика подстраивается под характер задач. Бывают задачи с очень странными системами оценки, непрозрачно сформулированными условиями, которые лучше отложить на потом. Поэтому лучше ориентироваться на месте, после того как вы прочитаете условия задач. Лично я стараюсь понемногу начать набирать баллы в каждой задаче, а после этого улучшать уже написанные решения.
Рамазан: Для меня самым сложным было пройти в сборную, а дальше я положился на свои знания. Перед самой олимпиадой я тренировался в два раза больше, чем перед отборочными соревнованиями, поэтому был вдвойне уверен, что у меня все получится.
Часто говорят, что олимпиадные задачи далеки от реальной жизни. Как, на ваш взгляд, может пригодиться в жизни олимпиадный опыт и умение решать такие задачи?
Михаил: Задачи, которые даются на олимпиадах по программированию, действительно имеют довольно мало общего с теми задачами, которые возникают в реальной жизни. Это в принципе другого вида и класса задачи, которые нужно решать иными методами. Опыт решения олимпиадных задач может пригодиться, я думаю, в очень специфичных областях. Но главное ведь не в том, что человек, который занимался олимпиадным программированием, умеет решать какие-то специфические задачи. Суть в том, что он хорошо обучаем, может быстро ориентироваться в ситуации и улавливать суть, он в принципе может придумать новое решение. Именно эти навыки, которые можно получить во время участия в олимпиадах, играют важную роль в дальнейшем развитии, в том, чтобы уже в реальной жизни создавать конкретные продукты.
Рамазан: Я думаю, что такие соревнования в принципе созданы для того, чтобы выявить талантливых и трудолюбивых людей. И они с этой задачей справляются.
В этом году вы поступили в Университет ИТМО. Почему выбрали обучение в Петербурге, а не Москве, например?
Рамазан: Я слышал, что Москва — более шумный город. Петербург в этом плане мне нравится больше. Кроме того, Университет ИТМО — семикратный победитель Чемпионата мира по программированию ACM ICPC.
Михаил: Я люблю Петербург и это, в принципе, ожидаемый ответ от меня. И конечно, успехи Университета ИТМО давно на слуху, эти результаты, безусловно, способствовали выбору вуза. Сейчас мы вместе ходим на тренировки по спортивному программированию, которые проводит Андрей Станкевич (доцент факультета информационных технологий и программирования Университета ИТМО, тренер сборной команды Университета ИТМО, подопечные которого семь раз становились победителями чемпионата мира по спортивному программированию ACM ICPC. Андрей Станкевич также тренировал сборную, выступавшую на IOI-2018 в Японии — прим.ред.). Наша цель — выступить на ACM ICPC.
Задумывались о том, чем хотите заниматься после вуза: что привлекает больше — работа в крупной компании, научные задачи, собственное дело?
Михаил: Пока я не могу сказать, что мечтаю работать именно программистом. Безусловно, я хотел бы получить работу в IT-сфере, но возможности здесь не ограничиваются только программированием. Это может быть и занятие наукой, и преподавание — обучение детей в тех же кружках, и более масштабные проекты, в том числе в крупной IT-компании. Но и в последнем случае все не ограничивается одним только программированием: в таких компаниях огромное количество позиций, где можно работать. Сейчас мне хотелось бы подробнее изучить все возможности, попробовать их на себе и сделать выбор. Уверен, что учеба в университете поможет мне в этом.
В последние годы много говорится о том, что программист — это профессия будущего (и уже настоящего, безусловно) Но, на ваш взгляд, каким должен быть специалист будущего? Как достигать успеха и оставаться востребованным?
Михаил: Один из главных критериев того, что человек будет востребован в современном мире — это обучаемость. Необходимо постоянно изучать что-то новое, быть в курсе появляющихся технологий и последних трендов в своей сфере. Когда человек перестает учиться, он вряд ли будет способен создавать что-то новое.
При этом я не стал бы делать четкого деления между теми, кто, условно, пишет код и теми, кто ими управляет. Форматов управления тоже может быть масса: есть руководители, которые просто разрабатывают некий стратегический курс, есть те, кто выступают наставником для своей команды и сами участвуют в процессе разработки. Лично мне было бы интересно создавать продукт, но при этом, если ты к какому-то времени становишься руководителем, у тебя растет команда, это не мешает тебе самому создавать новые решения.