Андрей Ершов: отец советской «информатики» и один из первых программистов в СССР
Он не стал физиком из-за советских запретов. Зато придумал новую науку и предопределил развитие информационных технологий на много лет вперёд.
Иллюстрация: P. Lameiro / Soviet Digital Electronics Museum / Autopilot / Wikimedia Commons / Дима Руденок для Skillbox Media
Ещё в детстве Андрей поставил перед собой невероятную цель — решить все задачи из школьных учебников по алгебре, геометрии и физике. И это у него получилось. Поступая в 1949 году на физтех МГУ, он мечтал изучать ядерную физику, исследовать законы Вселенной — но судьба распорядилась иначе.
Из физиков — в айтишники
С поступлением в университет проблем не было: несмотря на сложность вступительных экзаменов, которые проходили в три тура, Ершов блестяще их сдал.
Но на первом курсе всплыл «нежелательный» пункт анкеты. Выяснилось, что будущий учёный провёл детство в Рубежном — во время войны этот город был оккупирован гитлеровской Германией. Поэтому путь в физику, считавшуюся наукой государственной важности и повышенной секретности, был закрыт.
Тогда Ершов перевёлся на кафедру программирования, которая только формировалась. Правда, студенты кафедры в основном занимались техобслуживанием вычислительных машин, а о программировании речи не шло.
И тут в судьбе Андрея Петровича случился ещё один поворот: на кафедру пришёл профессор Ляпунов с легендарным курсом «Принципы программирования».
Курс был инновационным: до этого никто не знал, как устроены советские ЭВМ, — они были засекречены. К счастью, Ляпунову удалось съездить в Киев, протестировать первую европейскую ЭВМ — МЭСМ — и ухватить основные идеи и принципы её работы. Ляпунов заложил основы операторного метода, на базе которого позже были созданы символические языки программирования, трансляторы и теория схем.
Профессор быстро заметил выдающиеся способности студента Ершова, стал его наставником и вдохновил на дальнейшую работу.
До начала 1950-х годов в СССР не существовало профессии «программист»; Ершов был одним из первых дипломированных специалистов.
Параллельно с учёбой Андрей Петрович интенсивно осваивал английский — он понимал, что вскоре этот язык станет международным.
С отличием окончив университет, а позже аспирантуру, Ершов стал старшим инженером лаборатории программирования, а несколько лет спустя — завотделом теоретического программирования в Вычислительном центре Академии наук СССР. Так началась его научная карьера.
Первые успехи
Ещё в аспирантуре Ершов начал работать над программирующей программой (ПП) для Большой электронной счётной машины (БЭСМ) и «Стрелы».
Это были громоздкие ламповые ЭВМ, требующие постоянной техподдержки. Даже по меркам 1950-х они были довольно слабыми: их вычислительных способностей не хватало для атомной промышленности, ракетостроения и оборонки.
Чтобы покрыть нехватку мощностей, учёные решили автоматизировать программирование. Руководителем проекта стал Ершов. Он предложил подходы и методы, которые позже стали классическими в теории компиляции:
- объединить схему и спецификации операторов в ПП для БЭСМ в одном тексте, а также ввести оператор цикла;
- применить табличный подход к синтаксическому анализу в ПП для «Стрелы-3»;
- оптимизировать программирование арифметических выражений, использовать новый, более экономичный метод их расстановки.
Свои нововведения Ершов объединил в монографии «Программирующая программа для электронной вычислительной машины БЭСМ». Она стала одной из первых в мире книг по автоматизации программирования и оказала большое влияние на Дональда Кнута, ставшего спустя годы другом Андрея Петровича.
«Когда только появилась книга Андрея „Программирование для БЭСМ“, мы [студенты] убедили преподавателя русского языка включить её в курс в качестве одного из двух сборников текстов для изучения научной лексики».
Дональд Кнут,
учёный-информатик, автор монографий и статей
Первый тираж книги в 4000 экземпляров был распродан в Союзе буквально за месяц. Сам Ершов отреагировал так: «ПП в магазинах нет! Автору слышать приятно».
Триумф за границей
Путь к мировой известности оказался более тернистым: разработки советских программистов держали под секретом. При этом интерес к ним во всём мире был огромным, ведь успехи СССР в освоении космоса были у всех на слуху.
«На Западе возникли опасения, что СССР захватит первенство и в области вычислительной техники», — писала известная исследовательница советских и постсоветских информационных технологий, социолог Ксения Татарченко в своей монографии Cold War Origins of the International Federation.
С 1959 года Ершов стал учёным секретарём комиссии по международным связям ВЦ АН СССР. Это позволило общаться с зарубежными коллегами, обмениваться с ними опытом и знаниями. В частности, Ершов познакомился с профессором Технологического университета Карнеги Перлисом, который открыл ему Algol.
Кроме того, советский учёный посетил симпозиум «Механизация процессов мышления» в Англии — первое международное собрание, посвящённое искусственному интеллекту.
Ершов стал одним из немногих «связных» между программистами СССР и остального мира. За это его ценили и там, и там — приглашали в качестве лектора на различные семинары, присылали западную литературу по программированию, которую невозможно было достать в СССР.
Альфа и Бета советского программирования
В 1957 году Ершову предложили возглавить отдел теории алгоритмов и программирования Института математики с вычислительным центром в новосибирском Академгородке. Там он и провёл оставшуюся жизнь.
Именно в Новосибирске учёный начал работу над языком программирования Альфа, чем-то похожим на Algol 60. Язык Альфа позволил реализовать многомерные значения и операции с ними, в том числе конструирование. На нём же разработали циклы и возможность задавать начальные значения выражениям.
Естественно, Альфа требовала транслятора, чтобы запускать программный код на ЭВМ М-20, которая с 1959 года стала основной вычислительной машиной в СССР. Процесс создания транслятора команда Ершова задокументировала в книгах «Рождение α-транслятора», «Детство α-транслятора» и «Отрочество α-транслятора». В них описана вся работа над проектом: технические проблемы, ход их решения и результаты. И всё для того, чтобы облегчить изучение Альфы другим разработчикам.
«Альфа-транслятор» стал первым в мире оптимизирующим транслятором с языков семейства Algol, в котором были реализованы прорывные по тем временам возможности: многопроходная система трансляции, алгоритмы оптимизации и другие методы экономии памяти.
Успех Альфа побудил Ершова к созданию улучшенной версии — Альфа-6. Она обладала более компактной схемой трансляции, а её внутренний язык стал основой для алгоритмов оптимизирующих преобразований.
Позже Андрей Петрович начал внедрять свои идеи в новом поколении алгоритмических языков высокого уровня. Так родилась концепция Бета.
В Бете были реализованы концепции из самых модных высокоуровневых языков того времени — Pascal, С, Ada, Modula-2.
Главной фичей Беты стала идея «внутреннего языка», понятного для разных языковых процессоров — трансляторов, анализаторов свойств, систем преобразования и так далее.
Формировался он примерно так же, как учатся понимать друг друга люди, говорящие на разных языках и случайно оказавшиеся вместе:
- Сначала происходил поиск понятий и конструкций, общих для всех языков, и определялся единый семантический базис.
- Затем этот базис оптимизировался, преобразовывался, и из него генерировался объектный код для различных ЭВМ.
Внутренний язык Беты оказался очень удобным для алгоритмов потокового анализа и оптимизирующих компиляторов, а машинно-ориентированный подход сделал систему гибкой при генерации кода для различных архитектур БЭСМ-6 и СМ ЭВМ.
От Лексикона — к АИСТу
Анализируя Альфу и Бету, Ершов задумался: почему бы не создать язык, который станет общей средой для разработки и обоснования программ? Так родилась идея единого лексикона программирования, или лингвистики систем.
«Лингвистическая система с фразовой структурой, содержащая в себе формальную нотацию для выражения всех общезначимых конструкций, употребляемых при формулировании условий задач, при синтезе и преобразовании программ…»
Андрей Петрович Ершов,
учёный-информатик
Лексикон должен был стать универсальной системой для людей и машин. При этом люди бы думали за пределами программного текста, оставляя предметную область задачи компьютеру.
«Программа, выраженная средствами лексикона, в определённом смысле содержит в своём тексте описание своей семантики в виде совокупности нетривиальных фактов о вычисляемой ею функции — в отличие от чистых программ, которые не говорят ничего о своих функциональных свойствах».
Андрей Петрович Ершов,
учёный-информатик
Главным отличием Лексикона от языков программирования должна была стать его открытость для других разработчиков. Ему не нужно было транслироваться в машинную программу, но при этом любую машинную программу можно было бы выразить в Лексиконе.
К сожалению, идея так и осталась идеей. Но Ершов задал направление для других учёных на десятки лет вперёд.
«Программисты — жрецы-посредники между машинами и человечеством».
Андрей Петрович Ершов,
учёный-информатик
Не менее значимым проектом учёного стали АИСТы — автоматические информационные станции. Это были распределительные системы, которые позволяли ЭВМ выполнять несколько процессов одновременно.
Ершов воплотил в АИСТах результаты исследований по архитектуре вычислительных комплексов, ПО и моделированию вычислительных систем. Он создал первую в стране развитую систему разделения времени — АИСТ-0 — и продемонстрировал её на комплексе, собранном из нескольких ЭВМ.
Также Андрей Петрович реализовал в АИСТе идеи, которые и сегодня применяются в распределительных системах:
- разделение в процессорах комплекса управления и обработки данных;
- иерархичность строения программного обеспечения;
- выделение ядра операционной системы;
- естественное сочетание различных режимов общения и обработки.
Правда, в дальнейшем разработки заморозили: системы зарубежных учёных признали более эффективными.
Преподавание и конференции
С 1970-х годов Андрей Петрович начал активно заниматься преподаванием. Вокруг него сложился неформальный коллектив научных сотрудников из академических институтов. Вместе они разработали вузовскую и школьную программы по информатике. Кстати, термин «информатика» придумал именно Ершов.
Параллельно учёный выступал на советских и международных конференциях. В 1981 году на совместной конференции Международной федерации по обработке информации (IFIP) и ЮНЕСКО по применению ЭВМ в обучении Ершов выступил с докладом «Программирование — вторая грамотность». Это название быстро стало мемом и лозунгом на советских плакатах.
Вскоре в рамках эксперимента в Новосибирске начали преподавать программирование в вузах, а затем и информатику в школах. Учёные разработали компьютер «Агат», обучающую систему «Школьница» и язык Рапира.
В 1985 году Ершов с группой соавторов написал первый школьный учебник — «Основы информатики и вычислительной техники». Для записи алгоритмов в книге использовали алголоподобный Русский алгоритмический язык, который в шутку называют «Ершол».
Ершов принял участие в шести конгрессах IFIP как докладчик и организатор. В 1987 году он стал председателем Научного совета АН СССР по проблеме кибернетики, активно участвовал в создании журнала «Микропроцессорные средства и системы».
За существенный вклад в теорию смешанных вычислений ему вручили Премию имени академика А. Н. Крылова.
Творчество как вторая жизнь
Ершов был не только учёным: он прекрасно играл на гитаре, пел, писал стихи и даже переводил на русский английских поэтов — например, Редьярда Киплинга.
Многие коллеги запомнили Ершова по метким и образным высказываниям. Например: «Сибирь спасает русскую литературу, как сибирские дивизии в сорок первом году — Москву».
Он хорошо чувствовал слово — это заметно даже по его научным работам. Тем более впечатляют стихи, которые подтверждают слова Фейхтвангера: человек талантливый талантлив во всех областях.
Неведенье
Иисус пронёс свой крест и к муке был готов,
«Распни его», — народ кричал, беснуясь.
Но он был Божий сын и знал: в конце концов
Господь его посадит одесную.
Я знанья добывал из потаённых мест,
Чтоб человек был жив не только хлебом.
Но сам не ведаю, неся свой тяжкий крест:
Распнут меня иль вознесут на небо?..