Все новости

Кодить как дышать. Главное в программировании вовсе не код, а алгоритм

© Фото предоставлено пресс-службой МФТИ
Школьники и студенты из России уже несколько лет занимают первые места на престижных мировых турнирах по спортивному программированию. Уже с 14 лет за ними начинают охотиться крупные IT-компании, а еще несколько лет спустя для них открывается путь в Кремниевую долину. «Чердак» попытался разобраться, как вырастить гениального программиста, и поговорил с тренерами и педагогами.

Откуда появляются такие таланты, кто и как их учит? Растут сами по себе? Не совсем так. Оказывается, компании не только «хантят» уже подготовленных юных программистов, но и создают условия для того, чтобы их становилось все больше, оказывая поддержку учителям информатики. Так, например, ВКонтакте при поддержке Промсвязьбанка учредила стипендиальную программу VK Fellowship для преподавателей программирования, создавших авторские образовательные программы. В программе могут принять участие преподаватели из всех субъектов Российской Федерации, за исключением (увы) Москвы и Санкт-Петербурга; прошедшие конкурсный отбор получают стипендию и принимают участие в летних и зимних школах.

Программирование как спорт

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

И второе, очевидное для тех, кто программированием занимался, и совсем не очевидное для остальных: главное в программировании вовсе не код, а гениальный алгоритм.

Михаил Тихомиров
Описание
Михаил Тихомиров

«Теория алгоритмов, которая занимает центральное место на нынешних олимпиадах, — это на самом деле область математики, хотя не все участники об этом задумываются», — говорит тренер российской национальной школьной сборной по программированию, тренер победителей студенческого турнира ICPC 2016—2018 годов, преподаватель МФТИ Михаил Тихомиров.

«Задачи по программированию предполагают наличие умений по формализации условий, представлению решения в виде некоторой математической модели, выбору структур данных, алгоритмов и, конечно, реализации программы на языке программирования», — добавляет директор липецкого Центра поддержки одаренных детей «Стратегия», стипендиат VK Fellowship Инесса Шуйкова.

Так что путь в олимпиадном программировании начинается с хорошего знания математики. «Математические способности и способности к программированию очень тесно связаны. Как правило, хороший программист всегда хороший математик. При этом в олимпиадах по программированию часто используются знания областей математики, выходящие далеко за рамки школьной программы», — добавляет лауреат VK Fellowship, университетский преподаватель из Красноярска, основатель самой известной платформы с задачами по программированию acmp.ru Сергей Беляев.

Язык же программирования, по словам экспертов, не имеет особого значения, по крайней мере на начальных этапах олимпиадной «карьеры». Для решения задач ты можешь написать код хоть на «бейсике», лишь бы твоя программа работала эффективнее, чем у конкурентов. По словам Михаила Тихомирова, язык становится важен на поздних этапах соревнований: тут C++ и Java оказываются предпочтительнее Python, с которого чаще всего начинают учиться «кодить» современные школьники. А вот уже на международной олимпиаде (IOI) написать программу можно только на одном из трех языков — C++, Java или Pascal.

В отличие от олимпиад по другим предметам, в программировании, пожалуй, наиболее объективное судейство, просто потому, что все решения проверяются автоматической системой — в одинаковых условиях на одинаковом наборе тестов. «Конечно, жюри всегда имеет строгое решение, удовлетворяющее всем требованиям задачи по эффективности. Однако участник не обязан придумать именно его, могут быть и другие способы. Бывает, что участники придумывают более изящное или эффективное решение и, конечно, получают максимальный балл», — поясняет Михаил Тихомиров.

Чему не учат в школе

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

«Главная проблема не в количестве часов, а в их качестве. Если постараться, то и за один урок можно немало сделать. Может, к олимпиадам и не подготовить, но заложить фундамент для будущих побед вполне возможно. А как показывает практика, в 90% школ уроки информатики сводятся к рисованию открыток на каждый праздник до самого окончания школы, и связано это с дефицитом преподавательских кадров», — рассказывает еще один стипендиат VK Fellowship, школьный учитель из Челябинска Антон Деникин.

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

Завершение работы летней школы по компьютерным наукам НИУ ВШЭ и Центра «Стратегия». Инесса Шуйкова — в центре.
Описание
Завершение работы летней школы по компьютерным наукам НИУ ВШЭ и Центра «Стратегия». Инесса Шуйкова — в центре.

«Я бы сказала, что в таких школах, лагерях, центрах учат принципиально иначе. Например, тематические образовательные смены предполагают интенсивную подготовку, полное погружение в предмет. Лекции, тренировки (решение контестов), разбор задач, спецкурсы и мастер-классы — расписан по минутам весь день, с утра до ночи. Преподавательский состав на таких образовательных сменах творит, выдумывает, экспериментирует, подзаряжается новыми идеями, задачами, методиками», — рассказывает Инесса Шуйкова, один из руководителей смены по программированию в «Сириусе».

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

«Успешная форма воспитания олимпиадника по программированию как раз и заключается во всем этом разнообразии, в возможности составить свой собственный маршрут обучения и календарь соревнований. Этот маршрут ежегодно определяется уровнем ученика, отбором в ту или иную образовательную смену, рекомендациями наставника-тренера», — добавляет Инесса.

Педагог или тренер?

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

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

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

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

Антон Деникин
Описание
Антон Деникин

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

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

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

Олимпиады и профессия

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

«Спортивное программирование вовсе не оторвано от жизни. Часто люди думают, что спортивное программирование — это человек выложился три-пять часов и все, больше ничего не может. На самом же деле за этим стоят годы интенсивной подготовки, требующей не только таланта, но и собранности, силы воли и других так называемых soft skills, очень востребованных в профессиональной сфере», — говорит руководитель национальной сборной России по программированию, проректор по международным программам и технологическому предпринимательству МФТИ и основатель олимпиадных школ МФТИ Алексей Малеев.

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

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

То же, по мнению Алексея, подтверждает и зарубежный опыт: в штате и Google, и Facebook, и в других технологических компаниях найдутся чемпионы и участники крупных программистских турниров.

Мало того, успешно работать в IT-индустрии российские школьники иногда начинают, еще не окончив школу.

 Евгения Береснева