Зачем нам чемпионы по программированию?
Зачем нам чемпионы по программированию?
Автор: Анатолий Шалыто
Олимпиады школьников по математике проходят в нашей стране с 1934 года, когда в Ленинграде состоялась первая из них. Для многих школьников, особенно победителей олимпиад высокого уровня, участие в этих состязаниях определило выбор профессии.
Начиная с 1988 года ежегодно проводится Всесоюзная (в настоящее время - Всероссийская) олимпиада школьников по информатике, а с 2000 года - Всероссийская командная олимпиада школьников по программированию.
Подробнее об этих и других олимпиадах см. врезку. Успехи российских команд на таких соревнованиях - выдающиеся.
Четырежды команды российских университетов были чемпионами мира и не раз занимали другие призовые места. Эти успехи были неоднократно отмечены на государственном уровне (is.ifmo.ru/belletristic/medved).
Если достижения наших соотечественников на школьных олимпиадах практически ни у кого не вызывают раздражения, как говорится, "чем бы дитя ни тешилось, лишь бы не плакало", то после побед на студенческих чемпионатах все чаще приходится слышать отрицательные мнения об этих соревнованиях, принижающие важность этих успехов. Одни считают, что это соревнования в области решения головоломок студентами младших курсов, другие - что это "потемкинские деревни", создаваемые несколькими вундеркиндами, при плохом состоянии образования в нашей стране, и т. д.
В чем причина таких оценок? Возможны три варианта. Первый - у каждого может быть своя точка зрения (и тогда спорить бесполезно). Второй - зависть коллег по "цеху", которым не удается добиться успехов в этих соревнованиях. Третий вариант - непонимание сути дела. Применительно к последнему случаю изложу свою позицию.
1. Решение задач на олимпиадах по программированию основано на хорошем знании алгоритмов для задач дискретной математики и других разделов математики (например, геометрии). Люди, которые могут в составе команды из трех человек за пять часов на тренировке решить семь задач, а затем (после часового перерыва) за то же время еще восемь задач, участвуя в интернет-соревновании с сильнейшими командами мира, - несомненно, обладают незаурядными способностями. Понаблюдав однажды за такими соревнованиями, я понял, что эти высококвалифицированные специалисты должны называться не "программистами", а "решателями задач", так как они никогда не будут писать программы по чужим алгоритмам. Природные способности, хорошее образование (включая фундаментальную составляющую) и упорные многолетние тренировки позволяют им не бояться задач в новых для себя областях, быстро ориентироваться в них и практически всегда успешно их решать.
2. Существует очень мало видов человеческой деятельности, в которых представители России побеждают на мировом уровне. Поэтому каждая такая победа (при наличии соответствующей информации о ней) повышает оптимизм в обществе, что особенно важно для воспитания молодежи и привлечения ее в нашу профессию. Первые крупные успехи российских студентов из СПбГУ и СПбГУ ИТМО в финалах чемпионата мира по программированию пришлись на 1998, 1999 и 2000 годы, когда "в активе" России были дефолт 1998 года, нефть по 10 долларов за баррель и страна на грани развала. В этих "замечательных" имиджевых условиях первые российские компании-разработчики ПО начали свой поход на мировой рынок. И в то время студенческие победы на чемпионатах были весьма существенным и чуть ли не единственным аргументом в переговорах с зарубежными заказчиками.
3. Первые двадцать лет на студенческих чемпионатах мира по программированию побеждали в основном команды американских университетов - и это всегда отмечали ведущие американские газеты. В последние годы "праздник на американской улице" кончился - на одном из последних чемпионатов лучшая команда из США заняла двадцать пятое место. Победителями же стали команды университетов России, Польши и Китая.
4. Программирование - одна из немногих профессиональных областей, где еще со времен СССР нет сомнений в том, что подготовка наших специалистов ведется на мировом уровне. Но только успехи на студенческих чемпионатах мира, за результатами которых следят крупнейшие компьютерные фирмы, привели к тому, что практически все эти фирмы открыли в России центры разработки программного обеспечения. Программирование - одна из немногих массовых отраслей, где мы способны создавать высокотехнологичную и конкурентоспособную продукцию мирового уровня.
5. В крупнейших корпорациях Microsoft и Google найм разработчиков проводится в такой форме, что люди с опытом решения задач на олимпиадах имеют существенное преимущество. Руководители московского представительства корпорации Google неоднократно заявляли, что они готовы принять на работу любое число победителей чемпионатов по программированию. Это и не удивительно - я своими глазами видел, что один из "олимпийцев" мог себе позволить участвовать в интернет-соревновании по программированию через небольшое время после пятичасового собеседования, с которого многие сильные программисты были изгнаны, пройдя лишь половину пути. При этом другой чемпион, быстро решив все предложенные задачи, сказал мне, что эти задачи вообще не представляют ни сложности, ни интереса. А знаете, какой вывод сделали работодатели, которые до встречи с этим молодым человеком еще сильно сомневались, открывать ли им центр разработки в Санкт-Петербурге? "Раз здесь есть такие уникумы, то мы решим этот вопрос положительно!"
6. Наконец-то появились и российские компании, которые готовы взять на работу большое число "олимпийцев" и платить им немалые деньги, так как подготовленные по традиционным методикам программисты не смогли справиться с предложенными им задачами в заданные сроки.
7. На мировом уровне выступают не только команды университетов обеих столиц, но и команды многих региональных университетов России. Это улучшает экономическую ситуацию в регионах, поскольку наличие высококвалифицированных программистов служит основой для создания там компьютерных компаний.
8. Все это привело к тому, что российские программисты (в отличие, например, от математиков) в настоящее время практически не уезжают работать за границу.
9. Отсутствие необходимости переезда в столицы и за границу в поисках достойной работы улучшает ситуацию с воспроизведением высококвалифицированных кадров. Многие из участников чемпионатов, работая в программистских фирмах, не только занимаются подготовкой своей смены, но и преподают в школах и университетах.
10. Очень непростой вопрос - как сохранить в университетах (где зарплата копеечная) "чемпионов", способных и желающих остаться на преподавательской, тренерской и научной работе. Но кадровый дефицит привел к тому, что некоторые российские фирмы берут "на содержание" чемпионов, которые остаются работать в вузе. Это позволяет им не бегать в поисках заработков, тем более что "на бегу нельзя обучать даже бегу", а зарабатывать нормальные деньги, занимаясь обучением студентов и школьников.
11. Участие в командных чемпионатах мира долгое время не рассматривалось как вид спорта. Однако в последние годы в мире стали проводиться индивидуальные соревнования по спортивному программированию, по результатам которых участники зарабатывают очки рейтинга (www.topcoder.com), а лучшие - еще и деньги. Эти соревнования проводятся как среди студентов и аспирантов, так и среди программистов вообще. В этом виде программистской деятельности всего за два-три года многие россияне добились очень высоких рейтингов, а один из них, Петр Митричев, в 2006 году выиграл три крупнейших финала международных соревнований и еще в одном занял второе место. Как вы думаете, кто его "схватил", когда он закончил университет? Вы угадали - одна из упомянутых выше фирм, которая в прошлом году была признана лучшей в мире по социальным условиям, предоставляемым своим сотрудникам.
12. В России уже несколько лет существует Всесоюзная федерация компьютерных игр. Один из университетов Томска намерен готовить специалистов по шахматам. А чем программирование хуже? Существует стройная система всероссийских (не дай бог, ее разрушат, улучшая) и международных соревнований, проведение многих из которых поддерживает государство, есть международная рейтинговая система. Если появится Федерация спортивного программирования, решится вопрос о присвоении квалификации "тренер по программированию" - возникнет новая профессия, которая со временем может стать хорошо оплачиваемой. Это отвлечет некоторое число специалистов из отрасли, зато повысит престиж программирования и охват учащихся.
13. По поводу "потемкинских деревень": как вы думаете, теннис в России или легкая атлетика в Кении имеют ту же материальную базу и охват, как в лучших университетах США? Все знают, что это не так, однако не говорят ни о каких "деревнях", а радуются успехам своих спортсменов. Разве Олимпиады и победы на них никому не нужны?
14. В области образования и науки мы уже и так отстали от многих университетов мира, неужели кому-то станет лучше, если успехов по олимпиадному программированию у нас тоже не будет? Мне кажется, это тот хвост, за который можно вытащить хотя бы одну область образования и науки. Некоторые из чемпионов стали защищать диссертации (только у меня таких трое), а после окончания университетов - оставаться работать в вузах. Программирование, в отличие от математики, "молодая наука". Кроме того, в России можно получить высокооплачиваемую работу по этой профессии. Поэтому в настоящее время лишь немногие победители олимпиад стали известными учеными (например, Илья Миронов из Microsoft Research и Марк Сандлер из Google). Но хочется надеяться, что состязания программистов приведут в науку ученых масштаба Григория Перельмана, Андрея Суслина и Юрия Матиясевича, успешно выступавших на математических олимпиадах.
15. Предлагаю срочно организовать в стране движение "Сохраним в университетах лучших". На это и денег-то много не требуется, так как в программировании людей способных и желающих преподавать, тренировать и заниматься наукой крайне мало. Однако они есть, только у нас на кафедре таких двое. Если сохраним в университетах лучших - к ним потянутся новые таланты, и мы продержимся, перешагнув через демографическую яму. Тогда появится шанс на то, что со временем мы сможем опережать ведущие университеты мира не только на чемпионатах по программированию. А иначе никак!
Олимпиады программистов
В Ленинграде (Санкт-Петербурге) городские олимпиады школьников по информатике начали проводиться раньше всесоюзных. Первая состоялась в 1986 году (anichkovpalace.spb.ru/olimpus/inform), а городская командная олимпиада школьников по программированию - в 1993 году. Как и у математиков, участие юных программистов в этих соревнованиях существенно влияет на их дальнейшую профессиональную жизнь. Олимпиады по программированию проходят и среди студентов. Ежегодный командный студенческий чемпионат мира по программированию проводится с 1977 года, причем курирует его авторитетная международная организация по вычислительной технике Association for Computing Machinery (ACM). В последние годы генеральным спонсором чемпионата стала корпорация IBM. Его охват глобален, сегодня в чемпионате состязаются около шести тысяч команд из почти тысячи шестисот университетов восьмидесяти с лишним стран. Российские команды программистов участвуют в полуфинальных соревнованиях студенческого чемпионата мира с 1993 года (тогда страну представляла только команда СПбГУ, а в 1994 году - команды уже трех университетов: СПбГУ, МГУ и ИТМО).
В 1995 году в Санкт-Петербурге по правилам чемпионата ACM был проведен городской командный чемпионат по программированию, который в дальнейшем был преобразован в четвертьфинал чемпионата мира.
С 1996 года в Санкт-Петербурге ежегодно стали проводиться и полуфинальные соревнования чемпионата мира, которые охватывают Северо-Восточный Европейский регион (по классификации ACM). В рамках этих соревнований проходит и чемпионат России.