В каждой науке есть великие персоналии – люди, определившие вектор развития на годы вперед. Почти всегда они разносторонне одарены: Бородин был великим композитором и не менее одаренным химиком-органиком, а медицинское образование Чехова позволяло ему беспристрастно, с хирургической точностью, препарировать человеческие души.
И в относительно новой по историческим меркам науке информатике есть такой человек – это академик Андрей Петрович Ершов – выдающийся советский ученый, педагог и просто прекрасный человек, обладавший тонким языковым чутьем.
27 октября 1980 года Андрея Петровича пригласили выступить с заглавным докладом на 3-й Всемирной конференции ИФИП и Юнеско по применению ЭВМ в обучении. И Ершов выступил с совершенно замечательной речью под нетипичным метафорическим названием «Программирование – вторая грамотность». Так что же он имел в виду?
Для этого нужно рассказать о жизненном пути этого человека.
Родился он 19 апреля 1931 года в Москве. В 1937 году семья переехала в Рубежное, городок в Луганской области, который в ВОВ будет оккупирован. И, если бы он не был оккупирован, то, возможно, судьба Ершова сложилась бы иначе: ведь именно из-за этого факта юношу отчислили с первого курса «секретного» физфака. Так, в июне 1950 года он был вынужден выбирать, на какой факультет перевестись.
Студенческий приятель Евгений Жоголев, который уже записался на новую кафедру вычислительной математики, рассказал об их деятельности, и в частности — об ЭВМ.
Андрей Петрович: «…он мне рассказал поразительную вещь. Оказывается, существуют какие-то электронно-вычислительные машины, они очень интересно устроены, и у них есть ртутная память. Я был поражен — что такое ртутная память? Такая стеклянная трубка, наполненная ртутью, а по бокам заткнута пьезокристаллами. Если тебе надо запомнить какое-либо число, то оно изображается как в азбуке Морзе: импульс, нет импульса и т. д., целая цепочка электрических импульсов. Так вот, эти импульсы по проводу приходят в пьезокристалл, он от этих импульсов сотрясается, и получается звуковая волна, которая бежит вдоль ртути по трубке, добегает до следующего пьезокристалла, сотрясает его, в результате получается электрический ток, и это же число в виде импульсов воспроизводится на другом конце трубки, потом по проводу бежит назад, снова на трубку — выходит, что число беспрерывно бегает в этой ртутной памяти. Не знаю почему, но этот рассказ произвел на меня очень сильное впечатление, резко повысив мой интерес к электронно-вычислительным машинам, и я записался на кафедру вычислительной математики».
Первый год, по словам Андрея Петровича, он занимался «чем попало», но затем на кафедру пришел молодой профессор Ляпунов, который начал читать студентам первый в Союзе курс основ программирования для ЭВМ. Между первым и вторым курсом Ляпунов с командировкой посетил Киев, где Лебедев доделывал свою знаменитую первую электронно-вычислительную машину, которая потом стала называться МЭСМ — Малая электронно-счетная машина. Ляпунову посчастливилось поработать на ней и изучить, так что к студентам он возвратился воодушевленный, и на втором курсе начал рассказывать о своих идеях.
МЭСМ
Ершов: «Это были еще очень непричесанные идеи, но то, что они рождались прямо на глазах, всех очень заразило, и наша группа в полном составе записалась к Алексею Андреевичу в ученики».
Так Андрей Петрович окончательно и бесповоротно увлекся программированием. По окончании университета Ершов поступил в Институт точной механики и вычислительной техники (ИТМ) – организацию, в которой складывался один из первых советских коллективов программистов, также горевших своим делом.
В 1955 году был создан Вычислительный центр Академии наук СССР, его директором стал академик А. А. Дородницын. Часть сотрудников-математиков, включая Андрея Ершова, была переведена из ИТМ и ВТ в образованный Вычислительный центр в новосибирском Академгородке, где Андрей Петрович и останется.
Еще работая в стенах ИТМ и ВТ, группа А. П. Ершова создала один из первых трансляторов (программирующую программу) — ПП «БЭСМ» для быстродействующей электронной счетной машины. Входной язык ПП «БЭСМ» содержал арифметические и логические операторы, несколько напоминающие современные операторы выбора. Наиболее важными атрибутами были операторы цикла и индексные переменные. Текст программы на входном языке ПП БЭСМ не разделялся на схему и спецификацию операторов, а представлял собой бесформатный линейный текст, в котором операторы отделялись точкой с запятой.
В ПП БЭСМ Ершов выдвинул в качестве общего правила принцип «адресной кодировки» различных объектов, с которыми имеют дело при трансляции. Такая кодировка существенно сокращает время поиска информации и соответствует структуре оперативной памяти с произвольным доступом. В 1957 году А. П. Ершовым, независимо от американских ученых, определена функция расстановки как способ бесперебойного поиска информации по ключу и исследованы ее статистические свойства и применение для алгоритма экономии команд, работающих за линейное время. На основе работ по ПП БЭСМ в 1958 году им была опубликована монография «Программирующая программа для быстродействующей электронной счетной машины», которая является первой в мировой литературе монографией по автоматизации программирования. Она сразу же была издана за рубежом, а советский тираж в 4000 экземпляров был раскуплен буквально за месяц.
Ершов: «ПП в магазинах нет! Автору слышать приятно».
Совсем не удивительно, что такой специалист стал своего рода связующим звеном между советскими и мировыми учеными – его неоднократно приглашали на лекции и семинары по всему миру, присылали передовую западную литературу, которую в СССР было невозможно достать.
С Джоном Маккарти (одним из соавторов термина «искусственный интеллект») Ершов познакомился в ноябре 1958 года в Англии на конференции, и это знакомство переросло в дружбу и сотрудничество. В 1965 году Маккарти впервые посетил Ершова в Новосибирске, а тремя годами позже Маккарти провел там два месяца, прочитав курс лекций студентам университета.
Джон Маккарти
В 1958 году академик С. Л. Соболев, один из создателей Сибирского отделения АН СССР, привлекает Ершова к работе по организации научного центра. Полностью в СО АН СССР А. П. Ершов переходит в 1960 году. Здесь, в Институте математики СО АН СССР, он формирует коллектив программистов и осуществляет научное руководство работами этого коллектива. Работы коллектива по языкам и методам трансляции заложили фундамент дальнейшего развития этого направления.
Под руководством Андрея Петровича Ершова были созданы такие известные оптимизирующие системы программирования, как АЛЬФА, АЛЬФА-6, БЕТА, которые во многом определили современную методологию оптимизирующей трансляции.
Разработка системы АЛЬФА началась с создания языка — это было характерно для традиций программирующих программ. Данный язык отталкивался от первоначальной версии ALGOL 60 — ALGOL 58. Группа, руководимая Ершовым, вела разработку параллельно с международной группой, создающей ALGOL 60. Во многом работы этих групп оказались совпадающими, поэтому после опубликования описания ALGOL 60 новый, созданный группой Ершова, язык был сформулирован как расширение ALGOL 60. Этот язык, носивший рабочие названия «Входной», «Сибирский», окончательно утвердился под названием АЛЬФА-язык.
Процесс создания транслятора команда Ершова задокументировала в книгах с потрясающими названиями — «Рождение α-транслятора», «Детство α-транслятора» и «Отрочество α-транслятора». В них описана вся работа над проектом: технические проблемы, ход их решения и результаты. И всё для того, чтобы облегчить изучение Альфы другим разработчикам.
И. В. Поттосин (коллега А. П. Ершова): «В АЛЬФА-языке впервые введено понятие многомерных значений и определены операции над ними, в том числе операции конструирования. Все это вошло в структуру таких языков, как PL/1, ALGOL 68, ADA. Впервые в языке были введены и такие естественные для современных языков концепции, как разнообразие циклов, задание начальных значений выражениями. Интересными, но не повторенными по существу свойствами языка были перечисления и верхние (временные) индексы. В своих метасредствах язык впервые выходил за пределы контекстно-свободных грамматик».
Дальнейшие работы А. П. Ершова по оптимизирующей трансляции привели к появлению широко известной системы АЛЬФА-6. Повторяя во многом систему АЛЬФА, система АЛЬФА-6 обладала более компактной схемой трансляции, более четко был выделен в схеме трансляции внутренний язык представления программы как основа для алгоритмов оптимизирующих преобразований.
Формировался он примерно так же, как учатся понимать друг друга люди, говорящие на разных языках и случайно оказавшиеся вместе:
- Сначала происходил поиск понятий и конструкций, общих для всех языков, и определялся единый семантический базис.
- Затем этот базис оптимизировался, преобразовывался, и из него генерировался объектный код для различных ЭВМ.
Внутренний язык Беты оказался очень удобным для алгоритмов потокового анализа и оптимизирующих компиляторов, а машинно-ориентированный подход сделал систему гибкой при генерации кода для различных архитектур БЭСМ-6 и СМ ЭВМ.
Анализируя Альфу и Бету, Ершов задумался: почему бы не создать язык, который станет общей средой для разработки и обоснования программ? Так родилась идея единого лексикона программирования, или лингвистики систем.
А. П. Ершов: «Лингвистическая система с фразовой структурой, содержащая в себе формальную нотацию для выражения всех общезначимых конструкций, употребляемых при формулировании условий задач, при синтезе и преобразовании программ…».
Лексикон должен был стать универсальной системой для людей и машин. При этом люди бы думали за пределами программного текста, оставляя предметную область задачи компьютеру.
А. П. Ершов: «Программа, выраженная средствами лексикона, в определённом смысле содержит в своём тексте описание своей семантики в виде совокупности нетривиальных фактов о вычисляемой ею функции — в отличие от чистых программ, которые не говорят ничего о своих функциональных свойствах».
Главным отличием Лексикона от языков программирования должна была стать его открытость для других разработчиков. Ему не нужно было транслироваться в машинную программу, но при этом любую машинную программу можно было бы выразить в Лексиконе.
К сожалению, идея так и осталась идеей. Но Ершов задал направление для других учёных на десятки лет вперёд.
Не менее значимым проектом учёного стали АИСТы — автоматические информационные станции. Это были распределительные системы, которые позволяли ЭВМ выполнять несколько процессов одновременно.
Ершов воплотил в АИСТах результаты исследований по архитектуре вычислительных комплексов, ПО и моделированию вычислительных систем. Он создал первую в стране развитую систему разделения времени — АИСТ-0 — и продемонстрировал её на комплексе, собранном из нескольких ЭВМ.
Также Андрей Петрович реализовал в АИСТе идеи, которые и сегодня применяются в распределительных системах:
- разделение в процессорах комплекса управления и обработки данных;
- иерархичность строения программного обеспечения;
- выделение ядра операционной системы;
- естественное сочетание различных режимов общения и обработки.
Правда, в дальнейшем разработки заморозили: системы зарубежных учёных признали более эффективными.
В 1960-е годы Ершов вместе с коллегами начал эксперименты по преподаванию программирования в средней школе, что привело к созданию первой в стране детальной концепции школьной информатики. Термин «информатика» придумал сам Ершов – и сам же написал макет школьной и вузовской программ по предмету. Вскоре в рамках эксперимента в Новосибирске начали преподавать программирование в вузах, а затем и информатику в школах. Учёные разработали компьютер «Агат», обучающую систему «Школьница» и язык Рапира. В 1976 году была даже создана «Летняя школа программирования» для школьников, куда по приглашению Ершова приезжал Маккарти. В написанной вместе с Г. А. Звенигородским и Ю. А. Первиным в 1979 году работе «Школьная информатика (концепции, состояние, перспективы)» он определил развитие этого направления вплоть до наших дней.
К 1985 году был издан первый учебник «Основы информатики и вычислительной техники». Для записи алгоритмов в книге использовали алголоподобный Русский алгоритмический язык, который в шутку называют «Ершол».
Научно-организационной работе он уделял много внимания. Ершов был организатором многих Международных и Всесоюзных конференций, членом редколлегий ряда ведущих зарубежных и отечественных журналов, членом Международной организации по обработке информации (IFIP). В последние годы он являлся главным редактором журнала «Микропроцессорные средства и системы».
8 декабря 1988 года после тяжелой и продолжительной болезни Андрей Петрович Ершов скончался.
Его заслуги в компьютерном мире значительны, он внес определяющий вклад в становление и развитие программирования как науки. Академик А. П. Ершов был иностранным членом Ассоциации вычислительной техники США, почетным членом Британского общества по вычислительной технике, он удостоен награды «Серебряный сердечник» Международной федерации по обработке информации.
Возвращаясь к началу нашей заметки, скажем, что в 1980 году Андрей Петрович выступил со своим знаменитым докладом «Программирование – вторая грамотность» на пленарном заседании 3-й Всемирной конференции ИФИ и Юнеско по применению ЭВМ в обучении.
Примечательно, что организаторы конференции предлагали ему назвать доклад как-то более традиционно – «Основополагающая роль компьютеров в образовании», например. Но Андрей Петрович настоял на своём, да еще попросил у будущего заслуженного художника России М. Златковского графически оформить тезисы доклада. Так, высказывание «Программирование – вторая грамотность» стало чем-то вроде мема, разошлось по агитационным плакатам и ныне считается, что это «народная мудрость», но в этом случае мы можем с точностью до дня установить, кто автор этого изречения.
Приведем несколько тезисов из этой поистине эпической и пророческой работы, в которой воедино сплелись все накопленные знания великого человека не только из области программирования, но и из области истории, лингвистики, педагогики и даже генетики. Воистину – талантливый человек талантлив во всем.
«На меня всегда производит сильное впечатление один простой пример задачи на программирование как демонстрация перехода от знания к действию. Я выпишу последовательные этапы перехода от спецификации, выражающей знание, к программе, выражающей действие, для задачи возведения числа x в целую степень n: Предлагаю каждому дать свою интерпретацию того, какие законы и какое знание он применяет при переходе от этапа к этапу, для того чтобы перейти от очевидного знания к весьма нетривиальной программе. Хочу лишь сказать, что если бы мы умели в таком стиле строить любую программу, да при этом, рассуждая вслух, комментировать это построение, то это и была бы та фундаментализация программирования, о которой мы мечтаем».
«Даже обучение, то есть приобретение знаний или, скорее, способности что-то сделать – это программирование».
«Какая-то компания выпустила на рынок игру-компьютер, которая проверяет спеллинг английских слов. С помощью синтезатора речи слово произносится, ребенок набирает это слово по буквам, машина проверяет и реагирует. В карманную игру трудно вложить хороший синтезатор речи, но авторы обратили его недостаток в достоинство, сделав его очень похожим на голос Буратино. Представляете себе восторг детей, когда игрушка пищит им голосом Буратино: «Пробуй снова, пробуй снова, ты не знаешь это слово!»».
«Вычислительная машина станет не только техническим орудием учебного процесса. Она приведет к формированию нового интеллектуального фона, новой операционной обстановки, органически и естественно используемой ребенком в его развитии в школе и дома. Возможности, предоставляемые машиной, и новые задачи образования неизбежно окажут заметное влияние на основные положения психологии развития, сложившиеся дидактические принципы и формы обучения».
Что посмотреть/почить по теме?
- Архив академика А.П. Ершова
- «ПРОГРАММИРОВАНИЕ – ВТОРАЯ ГРАМОТНОСТЬ»
- Пионер отечественного программирования
- 90 лет со дня рождения Игоря Васильевича Поттосина
- Незаслуженно забытые герои Computer Science