Институт

Поттосин И.В. А.П. Ершов — пионер и лидер отечественного программирования

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

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

Начальной точкой возникновения отечественного программирования следует считать 1950 год, когда появился макет первой советской ЭВМ МЭСМ (и первой ЭВМ в континентальной Европе). Ершов связал свою жизнь с программированием двумя годами позже — когда он стал специализироваться на кафедре вычислительной математики мехмата Московского университета. Он принадлежал к первому в СССР выпуску дипломированных специалистов по программированию — так же, как и его однокашники Э.З.Любимский, В.С.Штаркман, И.Б.Задыхайло, В.В.Луцикович, О.С.Кулагина, Н.Н.Рикко и другие. Очень интересно вспомнить, как возникло первое поколение программистов. Они уже заведомо не мечтали связать свою жизнь с программированием со школьной скамьи — они, в большинстве своем, рекрутировались из смежных областей — математики, механики, физики, инженерии. Были среди них и педагоги с математическим уклоном. Ершов и его однокашники выглядели среди них элитой — только у них было базовое образование, специализирующее в новой области. Ершов, впрочем, мечтал быть физиком, и только стечение обстоятельств вынудило его прийти учиться на мехмат. Следует заметить, что по словам Е.А.Жоголева, приложившего руку к ориентации Ершова на программирование, именно интерес Ершова к физическому устройству ЭВМ и привел его на кафедру вычислительной математики — единственную кафедру на мехмате, где такое устройство изучалось.

Специфика возникавшей научной дисциплины была таковой, что при своем зарождении она выступала под другой — не чужой, но другой — крышей. Все приходившие в программирование приобретали — независимо от изначальной специализации — марку "математик". Заметим, что все, работавшие вокруг ЭВМ, делились грубо на два клана. Принадлежавшие к одному клану носили марку "инженер", принадлежавшие к другому — марку "математик". Именно последние и были программистами, людьми, создававшими программное обеспечение.

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

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

Ершов как один из пионеров программирования в полной мере испытал трудности становления программирования. Его кандидатская диссертация, законченная в 1959 году и посвященная такой модели программ, как операторные алгоритмы, была защищена только в 1962 году. "Чистые" математики не могли понять той ее ценности, что предлагаемая модель хорошо отражает существенные свойства реальных программ. С постоянной оппозицией Ершову приходилось сталкиваться и при осуществлении его знаменитого Альфа-проекта. Многие не могли понять — как это, коллектив высококвалифицированных программистов вместо того, чтобы писать прикладные, очень полезные программы, занят созданием какого-то транслятора — вещи и бесполезной, и, по своему замыслу создания процессора с языка типа Алгол, получающего программы, близкие по качеству к программам, написанным вручную, невозможной.

Реакция на те внешние трудности, которые возникали на пути становления программирования, могла быть двояка. Можно было "сломаться" — уйти либо в исследование только чисто математических проблем, связанных с программированием (их, слава Богу, достаточно много), либо в обслуживание вычислительных задач, не претендуя ни на какую самоидентификацию. Можно было обидеться и порвать с математикой, занимаясь лишь конструированием программных систем без всякой попытки привлекать точные методы. Мудрость Ершова была в том, что он не пошел ни по одному из этих путей. Его решением было — одновременное и связанное развитие понятийного фундамента программирования и точных математических моделей, формализующих эти понятия в той мере, в какой возможно. Именно на таком сочетании основывается созданная им новосибирская школа программирования.

Как и для подавляющего большинство пионеров программирования, первые научные результаты Ершова связаны с вычислительными задачами. Его первой статьей была опубликованная в 1958 году в Докладах Академии наук работа "Об одном методе обращения матриц", но Ершов не был бы программистом, если бы он сам не написал стандартную программу для БЭСМ, реализующую этот новый, предложенный им метод. Кстати, здесь сказались его начальные математические интересы — прежде чем пойти на кафедру вычислительной математики, он собирался специализироваться по алгебре. Однако с появлением идей, связанных с внутренними проблемами программирования, он, как и многие пионеры программирования, ушел полностью на новую, неизведанную область. Первой такой областью программирования были языки и системы программирования. Он не был самым первым в этой области, но был одним из первых, и сразу выдвинулся. Действительно, целый ряд активных и ищущих программистов с громадным интересом устремились в такую область, которую потом назовут системным программированием. Это были, как и Ершов, будущие лидеры нашего системного программирования — М.Р.Шура-Бура, Э.З.Любимский, С.С.Камынин, Л.Н.Королев, В.М.Курочкин и другие. Ершов был одним из основных разработчиков программирующей программы для БЭСМ — одного из первых отечественных трансляторов. Его идеи были сильными и сразу стали составляющими фундамента концепций языков и методов трансляции. Достаточно вспомнить, что им были предложены (во всяком случае, впервые в отечественном программировании) такая языковая конструкция, как цикл, и такой метод, как функция расстановки (хэш-функция). Им была написана первая в мировой практике монография по трансляции, ставшая широко известной — русское издание 1958 год, английское издание 1959 г., китайское 1960 г.

Начиная со своих ранних работ, Ершов становится одним из ведущих мировых ученых в этой области — области языков программирования и языковых процессоров. Предложенные им идеи и опыт задуманных им и руководимых им проектов — первого оптимизирующего транслятора с языков типа Алгол Альфа, первого кросс-транслятора АЛГИБР, транслятора Альфа-6 для ЭВМ БЭСМ-6, многоязыковой транслирующей системы Бета — стали составной частью современного фундамента трансляции. Методы оптимизации памяти, зачатки методов анализа программ, понятие внутреннего языка как семантического представления программ одного (в Альфа-системах) или широкого класса языков (в проекте Бета), предназначенного для целей оптимизации программ и/или кросс-компиляции, унифицированная схема трансляции — вот его личный вклад в такой фундамент, основанный на этих системах. Даже такой долговременный и не до конца решивший намеченные проблемы проект, как Бета (некоторыми ехидными коллегами расшифровывающийся как Большая Ершовская Трансляторная Авантюра — что несло оттенок истины: действительно большая и действительно в чем-то авантюрная) внес большой вклад в методику трансляции — и в методах определения внутреннего языка, и во влиянии опыта этого проекта — положительного и отрицательного — на последующие многоязыковые системы.

Он сделал существенный шаг в послеалголовское развитие языков программирования: в Альфа-языке, расширении Алгола 60, был введен ряд черт, характерных для современных языков — многомерные значения, многообразие конструкций циклов, начальные значения и т.п. Предложенный им язык Сигма был примером языкового ядра, расширяемого за счет механизма подстановки.

Широко известными являются его результаты по специализации программ путем смешанных вычислений. Здесь у него были предшественники — Футамура, Турчин — но именно ему принадлежит кристаллизация принципа смешанных вычислений, давшая толчок к появлению большого числа теоретических и практических работ по смешанным и частичным вычислениям. Ученикам Ершова принадлежат работы по практическим и высокоэффективным смешанным вычислениям. Его идеи дали толчок к появлению похожих подходов к специализации программ, в частности, конкретизации. Ершов же сформулировал понятие трансформационной машины как подхода к построению надежных и качественных программ. Все эти идеи Ершова являются основой нового направления создания программ — трансформационного программирования, которое пока еще не нашло большого практического применения, но имеет большое будущее.

Особое место в его работах занимает проект АИСТ. На мой взгляд, значимость и ценность этого проекта были недооценены, а его новаторство было значительным. Здесь Ершов выступал как руководитель создания всей вычислительной системы — и ее архитектуры, и ее программного обеспечения. Начальный этап этого проекта — АИСТ-0 — представлял собой одну из первых отечественных мультипроцессорных систем, снабженную богатым программным обеспечением, реализующим различные режимы обслуживания — от пакетного до разделения времени.

Работы по программному обеспечению в проекте АИСТ происходили практически одновременно с другими работами у нас и за рубежом по созданию развитых ОС, прототипов современных ОС (Малтикс, ОС ИПМ и др.) и были в ряду этих работ достаточно яркими и оригинальными. Архитектура же системы АИСТ была первым серьезным архитектурным проектом, выполненным в Новосибирске, за которым последовали другие оригинальные проекты, выполненные в Институте математики и Вычислительном центре Сибирского отделения. Само программное обеспечение было реализовано по трехуровневой модели: ядро ОС, специализированные ОС и диалоговые системы, прикладное программное обеспечение. Работа была прервана, и последующие этапы не были реализованы из-за принятия, по-видимому, ошибочной национальной программы, о которой Эдсгар Дейкстра как-то сказал: "Наибольшей победой Запада в холодной войне было то, что Советский Союз принял архитектуру ИБМ".

Первому поколению программистов принадлежит честь создания понятийного аппарата, фундаментального базиса новой научной дисциплины. Они находились в положении первооткрывателей, исследователей мира, который, по выражению Киплинга, "был совсем новенький". Они черпали понятия, методы из осознания собственного опыта. Ершов с его математической закалкой и опытом руководства рядом принципиально новых проектов, о некоторых из которых говорилось, много сделал для формирования понятийного базиса новой дисциплины. Деталь, но важная: он придавал нужное значение терминологической работе. Ряд фундаментальных терминов русского программистского языка — "информатика", "программное обеспечение", "технология программирования" и другие — был привнесен им. Но дело тут, конечно, не только в изобретении названия. За этим стояла и серьезная понятийная и методологическая работа.

По поводу термина "информатика". Как уже говорилось, Ершов, как и все мы, достаточно долгое время считал себя человеком, работающим в некоторой особой, но математической области, не осознавая до конца специфику того дела, которым занимался. Расстаться с привычной крышей было не так то просто. Однако накопление специфического для новой научной дисциплины багажа рано или поздно потребовало и соответствующего осознания. Но как только этот факт — существование новой научной дисциплины — был Ершовым осознан, он делает решительный шаг, предлагает новый термин — "информатика", и в работе 1984 года "О предмете информатики", опубликованной в Вестнике Академии Наук, очерчивает контуры новой науки, ее смысл и предмет изучения. Он дал термину "информатика" более широкое толкование, чем то, что вкладывается в его традиционный английский эквивалент "Computer Science", а именно — фундаментальная естественная наука, изучающая процессы передачи и обработки информации. Компьютерная же наука — как она понимается — составляет "рабочее" содержание информатики лишь на сегодняшний день.

Не менее значительную роль сыграл запуск Ершовым в обиход термина "технология программирования". Программисты из первого поколения привыкли к тому, что создание программ есть высокоинтеллектуальный труд, сродни исследовательскому. В чем-то они были правы, на первых порах так и было. Ершов первым (во всяком случае, среди отечественных программистов) увидел другую ипостась программирования — не исследовательскую, а производственную — как основу новой возникающей промышленности, софтверной промышленности. Очень важно, что Ершов предвидел роль и значимость этой промышленности, необходимость готовить ее кадры, причем разноплановые — архитекторов, руководителей проектов, тестовиков, разработчиков. Иногда он сознательно обострял свою позицию — говорил о "дегероизации трансляции" в том смысле, что создание "хороших" трансляторов с известных языков пусть и сложная, но конструкторская, а не исследовательская задача; ввел термин "фабрика трансляторов". Такая "промышленная" точка зрения вызвала резкие возражения среди многих, и Ершов достаточно долго и упорно пробивал свою позицию, которая, как оказалось впоследствии, была верной. Термин "технология" в применении к программированию и отражал эту позицию.

Если говорить о фундаменте новой дисциплины — а Ершов с его осознаваемым лидерством понимал всю ответственность формирования такого фундамента и четко видел нужды всего направления — то он подчеркивал две проблемы. Первая — это создание понятийной основы, системы связанных и формализованных понятий, отражающих на хорошем уровне абстракции все, что нужно для процессов создания программ, того, что Ершов назвал лексиконом программирования. Многое в его работах идет в этом направлении, достаточно вспомнить его работы вокруг проекта Бета или работы по смешанным вычислениям. Вторая, связанная с первой, — развитие теории, формальных методов, того, что сейчас четко прослеживается в новых методологиях и технологиях создания программ, в математизации процесса создания программ. В этом направлении он тоже сделал много. О его вкладе в теорию схем программ еще будет говориться, а я хотел бы остановиться на том, что он всегда видел связь между теорией и практикой программирования и умел как увидеть в практических результатах основу для теоретических моделей, так и применить теоретические исследования для практических целей. Еще в Альфа-трансляторе он использовал теорию экономии памяти, созданную им совместно с С.С. Лавровым для построения соответствующих оптимизирующих преобразований. Это было первое практическое применение теории схем программ к обоснованию оптимизирующих преобразований. Эта работа имела далеко идущие последствия. Большое число последующих работ новосибирской школы по созданию моделей программ — линейных, кратных схем, линейных программ, крупноблочных схем, регулярных схем — и по их применению к обоснованию оптимизирующих преобразований выросли из этой работы. Это была, так сказать, наша "Шинель", из которой мы росли. Еще один пример — наряду с проектом АИСТ, которым он руководил, с его многопроцессной и многопроцессорной обработкой он инициирует работы по формальным моделям параллельных программ.

Ершову принадлежит великолепная и в чем-то уникальная книга — "Введение в теоретическое программирование. Беседы о методе". Особая значимость этой книги в том, что там ясно показывается, как на основе рассмотрения практических проблем возникают теоретические модели и как эти модели позволяют решать практические задачи. Книга издана в 1977 году, а программистские монографии, мы хорошо знаем, быстро стареют. Но эта монография вне этого — увы — общего правила: в 1990 годы вышел ее английский перевод.

Одним из основных проблем возникающего нового направления является воспитание кадров профессионалов и исследователей. Ершов и здесь был и пионером, и лидером. Он много времени уделял становлению образовательной информатики, ее методологии, созданию учебников и учебных систем, пропаганде важности этой области деятельности. Он был признанным главой этой деятельности в нашей стране.

С одной стороны, он занимался проблемой того, как готовить профессиональных программистов — этому был посвящен ряд его работ, а также деятельность на мехмате НГУ, где он создавал коллектив преподавателей, обучающих программированию, и сам ставил курс программирования, с другой стороны, он начинал школьную информатику у нас в стране. Здесь его деятельность была многообразна: телевизионный курс лекций, один из первых учебников по информатике для средней школы (он был переведен на многие национальные языки Советского Союза), организация летних школ юных программистов, организация поездки юных программистов в Соединенные Штаты и многое другое. Самое главное, он видел единство и того, и другого: воспитание высококлассных специалистов и повышения информационной культуры общества, начинаемого в средней школе.

Ершов был лидером советского программирования и осознавал это. Лидерство воспринималось им как ответственность — за судьбу и развитие нового направления, за судьбу людей, работающих в этом направлении. Он умел отстаивать значимость программирования и программистов перед внешним миром. У него было прекрасное, далеко не частое свойство: он ценил авторитет знаний, кругозора, ума, а не авторитет должности и положения, и это он относил и к себе. Его высказывания всегда были продуманными, аргументированными, он внимательно следил за собой и никогда не рассчитывал на то, чтобы они воспринимались как неоспоримые истины, неоспоримые потому, что высказываются "большим человеком".

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

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

Само определение духа новой специальности, ее этики, ее профессиональной специфики обязано работам и деятельности Ершова. Общественный облик программирования в нашей стране складывался благодаря деятельности таких всесоюзных организаций, как Комиссия по системному программному обеспечению, Совет по кибернетике, Комитет по языкам и системам программирования, которыми руководил Ершов. Его широко известные работы, такие как "Two faces of programming", "Aesthetics and the human factors of programming", "Programming, the second literacy", ясно и выпукло определяли дух и специфику нового вида деятельности.

Он был лидером и в общественной программистской жизни: организатором совещаний и конференций, отечественных и международных, руководителем всесоюзных комиссий и комитетов, проводником международных связей, создателем информационных потоков (след, оставленный им — Мемориальная библиотека А.П.Ершова при ИСИ СО РАН).

Его безусловное и всеми признаваемое лидерство связано и с его личностными свойствами.

Он обладал истинной стратегией мышления, предвидя будущность только что появившегося явления, прекрасно видел точки роста. Достаточно вспомнить, какие работы он в свое время инициировал — реализацию одного из первых языков спецификации СЕТЛ, работы по технологии создания интеллектуальных систем, работы по теории параллельного программирования, создание системы Школьница — методологически обоснованного инструмента обучению программированию в школе. Уже при появлении персональных компьютеров он понял их громадную будущность, образно назвав первые персональные компьютеры "предками млекопитающих в динозавровом мире ЭВМ". Помню, как-то мы с Геной Кожухиным, обсуждая основы нашего программистского бытия, пришли к заключению, что если в тактике мы "сами умные", то в стратегии нам надо доверять мнению Андрея Петровича больше, чем своим собственным — его стратегическая мудрость была для нас очевидной.

Ершов как никто другой из известных мне людей умел радоваться чужим идеям. Он внимательно их выслушивал вне зависимости от того, кто их высказывал, аспирант или профессор, активно их пропагандировал, способствовал авторам в их реализации. Ершов был непревзойденным мастером ведения дискуссий: он умел с ходу схватывать рациональное зерно в любых, даже самых неожиданных высказываниях, выпукло их демонстрировать, конструктивно направлять сам ход дискуссий, не давая им увязнуть в пережевывании одних и тех же положений. Он всегда охотно оказывал помощь и поддержку своим коллегам. Я знаю много людей, для которых поддержка Ершова была весьма существенной. Среди них и эстонец Тыугу, и грузин Цуладзе, и украинец Вельбицкий, и молдаванин Тодорой, и петербуржец Терехов и многие, многие другие. Я уже не говорю о нас, сибиряках.

Итак, Ершов был и одним из пионеров, и лидером отечественного программирования. Если первому он обязан во многом временем, то второму — личным заслугам, величине и значимости своей личности.