Программирование для математиков

Программирование для математиков

Наталья Дубова 

В 1980 году на мехмате МГУ был введен новый курс программирования

Вместе с появлением первых вычислительных машин возникла потребность в фундаментальной подготовке тех, кто научит этих электрических монстров осмысленной деятельности, то есть программистов. На мехмате МГУ в начале 50-х Алексей Андреевич Ляпунов читал первый учебный курс по принципам программирования. В 1980 году здесь же возникает новый курс программирования, который в конечном итоге оказал серьезное влияние не только на несколько поколений «мехматян», но и в целом на преподавание информатики в стране. 

В заголовок статьи мы вынесли название учебника по мехматскому курсу программирования, который вышел восемью годами позже. Авторы курса Геннадий Викторович Лебедев и Анатолий Георгиевич Кушниренко подчеркивают, что название это отражало не просто принадлежность предмета главному математическому факультету страны. К 80-м стало очевидно, что мехмат, проложивший дорогу преподаванию теоретического программирования, уже не имеет соответствующего его высокой научной планке курса по этому предмету. Преподавание программирования сводилось к изложению Фортрана — языка, авторитет которого в сфере научных расчетов был непререкаем, и описанию архитектуры машин IBM 360, с которых делались наши ЕС ЭВМ. Качество этих курсов никак не отвечало мехматским требованиям. Вызревала потребность в абсолютно новом курсе, способном внести вклад в общую математическую культуру студентов.

Теперь его авторы уверены, что в итоге, когда курс окончательно сформировался, им удалось достигнуть этой цели. Правда, накануне 1 сентября 1980 года такие глобальные идеи не формулировались. Просто молодые преподаватели решили, что каждый студент, пришедший на первое занятие по программированию, должен уйти с него с распечаткой готовой программы. Для этого решили написать пакет программ с использованием библиотек системы «Асфор» — сокращенной версии Фортрана, разработанной на мехмате специально для программирования студенческих задач. Студенты должны были построить алгоритм передвижения некого «путника» через заданный набор препятствий и составить программу, состоящую только из вызовов стандартных программ. Дальше оставалось только собрать нужные перфокарты с набитыми на них программами, запустить их обработку и получить результат.

После нескольких дней борьбы с библиотеками на Фортране создать такой пакет программ не удалось. 

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

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

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

Два других кита — технология программирования «сверху вниз», cхематическое изображение которой вынесено на обложку учебника, и иерархия структур данных с описанием методов реализации одних структур на базе других — важнейшие компоненты, без которых не обходится программист-практик. Мехматский курс программирования действительно закладывал базу для грамотной разработки сложных систем. Однако только изложение важных понятий, не подкрепленное практикой, мало что дало бы студентам. Поэтому в курсе предлагалось разобраться с несколькими законченными проектами (построение выпуклой оболочки, реализация компилятора с языка арифметических формул, построение изображения полиэдра) и, что самое главное, модифицировать эти проекты, то есть, изучив 6-8 тыс. строк эталонных программ, добавить тысячу-другую своих. Так студент на практике закреплял полученные теоретические знания и одновременно готовился к реальной работе. Ведь в жизни часто все так и происходит — решение задачи сводится к модификации готовых программных систем.

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

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

Авторы курса говорят, что учебник, изданный более десяти лет назад, не стыдно читать и сейчас. И добавляют, что порекомендуют его любому старшему школьнику или студенту, заинтересованному в глубоком изучении программирования. Во второй половине 80-х из созданного на мехмате курса выросло школьное преподавание информатики, которое начали повсеместно внедрять в те годы. К этой теме мы непременно вернемся в будущих номерах.