Ленинградская школа программирования
С. С. Лавров
Я переехал жить и работать в Ленинград осенью 1971 г. — в пору расцвета деятельности школы, о которой я собираюсь рассказать. Школу я называю ленинградской не из уважения к тогдашнему имени города, а просто чтобы избежать анахронизма. Наверно, можно было бы назвать ее и цейтинской — по имени ее неформального лидера Григория Самуиловича Цейтина. Велика роль Александра Николаевича Балуева — первого руководителя и наставника многих участников школы. Созданную за год до этого кафедру математического обеспечения ЭВМ возглавлял Сергей Михайлович Ермаков, а одним из ведущих преподавателей был Игорь Леонидович Братчиков. Надеюсь, никто из трех последних не обидится на меня за утверждение, что активным программированием они не занимались. Заведующий университетского вычислительного центра, вернее — крупнейшего из этих центров, Александр Михайлович Шауман также был одним из сотрудников кафедры, его специальность — структуры ЭВМ. Иосиф Владимирович Романовский — заведующий лабораторией исследования операций — никакого формального отношения к программистской деятельности не имел (как, впрочем, и сам Г. С. Цейтин, который возглавлял лабораторию математической лингвистики). Но он писал интересные программы и, как любили тогда говорить, программные комплексы и излучал много любопытных и свежих идей по части программирования. Назову, наконец, Бориса Асеновича Новикова, занимавшего далеко не последнее место среди деятельных и творческих программистов, связанных с матмехом ЛГУ.
Про Г. С. Цейтина заместитель декана математико-механического факультета и глава института математики и механики ЛГУ Георгий Петрович Самосюк сказал, что, чем бы тот ни занялся: программированием или ремонтом примусов — у него это получится лучше, чем у других. Не могу с этим не согласиться. Сам Г. С. Цейтин — ученик Андрея Андреевича Маркова — работал вначале в области математической логики. В ЛОМИ АН СССР программы поиска логического вывода разрабатывала группа молодых логиков, возглавлявшаяся Николаем Александровичем Шаниным — ранее также прошедшим школу А. А. Маркова. Многим памятно имя Сергея Юрьевича Маслова — создателя «обратного метода» доказательства, никак не менее эффективного, чем известный «метод резолюций». Думаю, что Г. С. Цейтин немало полезного для себя вынес, наблюдая за этими работами (против ожидания, мне не удалось обнаружить его имени среди их участников).
Впервые я встретился с Г. С. Цейтиным на крупной («второй всесоюзной») конференции по программированию, проходившей в Академгородке под Новосибирском весной 1970 г. Но года за два до этого мне случилось наблюдать за эпистолярной дискуссией между Г. С. Цейтиным и авторами Алгола 68, где первый указывал последним на довольно явную теоретическую ошибку в описании языка, а те упорно отказывались ее признавать.
Проект Алгола 68 вдохновил Г. С. Цейтина на создание транслятора с этого языка. Именно эта работа оказалась тем очагом, где разгорелось пламя ленинградской школы программирования. Итоги ее первого этапа подведены в монографии «Алгол 68. Методы реализации», вышедшей под редакцией Г. С. Цейтина в издательстве ЛГУ в 1976 г. В предисловии к ней перечислены (почти все?) участники работы. Среди них я назову Сергея Николаевича Баранова, Илью Борисовича Гиндыша, Бориса Константиновича Мартыненко, Петера Сёке мл., Андрея Николаевича Терехова, Николая Федоровича Фоминых. Все они, за исключением Б. К. Мартыненко и еще очень молодого И. Б. Гиндыша, были в пору начала работ еще студентами и прошли школу Г. С. Цейтина в полном смысле слова.
Уже в начале 70-х можно было предвидеть, что Алгол 68 не сыграет в программировании той роли, как его предшественник — Алгол 60 (впрочем, роль последнего ощущалась в Европе гораздо сильнее, чем в США, а в СССР, благодаря усилиям Андрея Петровича Ершова, Михаила Романовича Шура-Буры, Эдуарда Зиновьевича Любимского и их сотрудников, была исключительно велика). Но даже если бы Алгол 68 не нашел в нашей стране вообще никакого применения, что далеко не так, то одно появление цейтинской школы с лихвой оправдало бы его существование.
В числе достоинств монографии, выделяющих ее из круга других известных публикаций на ту же тему, я в своей рецензии отмечал:
- точное следование описанию языка (с учетом появившегося в 1974 г. Пересмотренного сообщения) без каких-либо упрощений,
- применимость методов переработки программы на различных этапах трансляции к широкому классу языков,
- автоматическое построение эффективного анализатора для видонезависимой части языка,
- технику синтеза эффективной рабочей программы, основанную на обмене информацией между языковыми конструкциями для выбора способа размещения промежуточных результатов при счете и на специальной двухпросмотровой схеме синтеза, обеспечивающей автоматический выбор варианта программирования с учетом последующего текста программы.
К слову, А. П. Ершов отметил, что двухпроходный транслятор стал у Стругацких двухходовым. «Вот что значит — знатоки и ценители языка!», — добавил он.
Эти и другие идеи и принципы были подхвачены учениками Г. С. Цейтина и неуклонно соблюдались во всех последующих разработках компиляторов. А их, написанных для вычислительных машин разных классов, было немало — не только для Алгола 68, но и для «Ады» (с участием И. Б. Гиндыша), «Паскаля» и других языков.
Среди заядлых матмеховских программистов («хакеров» в лучшем смысле слова) огромную популярность имела малая машина Одра-1204, работавшая в 70-е годы в режиме «персональной ЭВМ коллективного пользования». Неоценимую услугу им оказывала написанная Г. С. Цейтиным программа DICO — не только диалоговый корректор программ (буквальная расшифровка названия), но и универсальный диспетчер, обеспечивавший управление как самой машиной, так и файловой системой на магнитном барабане. С другими программами Г. С. Цейтина мне не случалось столь интенсивно работать, но DICO сэкономила для меня уйму времени и труда.
Из общения с Г. С. Цейтиным я, как, вероятно, очень многие, вынес массу вдохновлявших меня идей и тем для размышления. Его доклады на семинаре кафедры были не просто интересны — это всегда был праздник мысли.
Обо всем сказать здесь невозможно, но не могу не упомянуть об ассоциативных сетях Г. С. Цейтина как аппарате представления и использования знаний. В них важную роль играет операция приписывания класса объекту (узлу сети). Класс — это шаблон связей объекта с другими объектами, соответствующий лишь одной ролевой функции этого объекта. Раз начавшись, эта операция инициирует ценную реакцию приписывания классов объектам, с которыми исходный объект прямо или косвенно связан в сети. Это может сопровождаться порождением новых объектов и отождествлением уже существующих. Так обеспечивается высокий динамизм знаний, представленных сетью, что позволяет считать сеть оперативной, а не долговременной памятью системы. В терминальных узлах сети размещаются конкретные значения, в частности — константы или процедуры. Сети Цейтина (публикация 1985 г.) — это одна из самых эффективных реализаций весьма популярной сейчас идеи объектно-ориентированного программирования.
Остановлюсь на судьбе некоторых «выпускников» школы Г. С. Цейтина.
С. Н. Баранов известен как автор ряда теоретических работ, хотя он никогда не расставался и с практическим программированием. Сейчас он доктор наук, профессор, на протяжении ряда лет был заместителем директора Санкт-Петербургского института информатики.
Участие в упомянутых работах на многие годы определило круг научных интересов Б. К. Мартыненко. Недавно он весьма успешно защитил докторскую диссертацию по вышедшей в этом же году монографии «Синтаксически управляемая обработка данных», в которой возникшие 30 лет тому назад идеи получили дальнейшее развитие и нашли практическое воплощение в технологическом комплексе SYNTAX. Оппонентами по диссертации были Игорь Васильевич Поттосин, И. В. Романовский и я. Нашим более или менее общим мнением было то, что монография содержит ряд научных идей, хотя и с давними истоками, но не утративших значения до наших дней, и что молодым программистам там есть чему поучиться. А спрос на последних — научных внуков, а то и правнуков Г. С. Цейтина — велик, и не только в России.
Говоря о подготовке программистов, нельзя не сказать об А. Н. Терехове, неизменно привлекавшем как своей яркой индивидуальностью, так и незаурядным педагогическим даром одаренную молодежь даже до поступления в университет — в интернате при нем. Именно его способности организатора и лидера обеспечили на многие годы успех возникшей на базе цейтинской школы лаборатории (какое-то время ее возглавлял Б. К. Мартыненко) после того, как сам Г. С. Цейтин переключился на другие интересовавшие его дела. За плечами сотрудников лаборатории — немало выдающихся разработок прикладного программного обеспечения. Сейчас в лаборатории и вокруг нее (и далеко от нее) работает немало вполне зрелых создателей таких программ, да и не только программ. А. Н. Терехов уже несколько лет, как стал доктором наук и сейчас заведует кафедрой на матмехе.
Было бы наивно и несправедливо полностью сводить понятие ленинградской программистской школы к деятельности Г. С. Цейтина и его учеников и последователей.
В ЛОМИ Леонид Витальевич Канторович руководил работой группы программистов, пытавшейся внедрить предложенный им метод «крупноблочного программирования». Тогда я, по-видимому, просто не дорос до восприятия идей этого метода. По воспоминаниям И. В. Романовского, они включали функциональное программирование, интерпретацию (в форме составления плана вычислений, который затем исполняется специальной программой) и аналитические выкладки. Все это вошло в золотой фонд программистской культуры, но в иных формах.
К числу учеников и воспитанников Л. В. Канторовича, если и не вполне его последователей, принадлежат Ольга Карловна Даугавет и Игорь Васильевич Клокачев. Постоянным успехом и популярностью среди программистов города пользовался руководимый ими городской семинар. Семинар работал при академическом научном учреждении, носившем в разные годы разные названия — наиболее долго, пожалуй, ИСЭП (не стану приводить ни официальную, ни шутливую расшифровку). Это учреждение вело как теоретические, так и прикладные исследования в области математической экономики, а среди них работы программистского направления занимали вполне достойное место — откуда бы иначе возникнуть семинару?
К большим заслугам И. В. Романовского следует отнести развитый и широко пропагандировавшийся им объектный стиль программирования (в его терминологии — аппарат «служб», 1979).
Фигура Энна Харальдовича Тыугу известна многим не только советским программистам. А он — выпускник ЛЭТИ, и хотя его научная слава обеспечена прежде всего его собственным талантом, но и Электротехнический институт не может быть обойден при перечислении мест, где программированию, как и обучению этой дисциплине, уделялось достойное внимание.
Впрочем, отнюдь не меньшие заслуги имеет и Ленинградский политехнический институт (то, что ныне он зовется университетом, не прибавляет ему славы и не умаляет высокое звучание прежнего названия). Всеволод Павлович Котляров наиболее известен мне и, разумеется, многим другим лицам как специалист, деятельно и творчески занимающийся программированием в стенах этого вуза.
С огромным уважением я отношусь и к людям, работавшим и учившимся в Ленинградском институте точной механики и оптики. Правда, личные связи с ними у меня не были столь постоянными и тесными.
Институт физиологии АН СССР — казалось бы довольно неожиданное место для серьезной программистской деятельности. Но работавшие там Александр Сергеевич Клещев и Владимир Львович Темов со своими языком и системой ИНФ, полными оригинальных идей, как бы кометой взошли над программистским горизонтом. Увы, комета А. С. Клещева продолжает нам светить с другого конца России, а комета В. Л. Темова утонула в заокеанской дали.
Все упомянутые здесь лица постоянно и прочно были связаны научными и личными узами с Отделом программирования, созданным и возглавлявшимся Андреем Петровичем Ершовым, и впоследствии — с Институтом систем информатики РАН, носящим его имя.
Я крайне благодарен И. В. Романовскому и Г. С. Цейтину за замечания по тексту этих заметок, но несу полную ответственность за допущенные ошибки и вынесенные оценки.
Статья опубликована в сборнике «История информатики в России. Ученые и их школы», М., «Наука», 2003 г., стр. 274.