Перспективно-стратегические парадигмы программирования академика Андрея Петровича Ершова

Перспективно-стратегические парадигмы программирования академика Андрея Петровича Ершова

Аннотация

Доклад посвящен описанию малозаметной линии научной деятельности лидера программировани А.П. Ершова в области проявления и развития парадигм программирования[1]. В науке лидерство означает умение рапознавать проблемы и расширять пространство путей их решения. А.П.Ершов оказался способным распознавать неожиданные ключевые проблемы программирования как новой области и убеждённо расширять пространства решений таких проблем. Цитаты из ранее опубликованных материалов приведены для удобочитаемости.

Ключевые слова – А.П. Ершов, парадигма программирования, стратегические парадигмы, проблемы программирования.

I. Введение

Успех пионерских проектов Новосибирской школы программирования, выполненных в сфере влияния академика А.П. Ершова в ВЦ СО АН СССР, достигнут в условиях исключительного внимания человеческому фактору в вопросах подбора кадров и создания в Новосибирском Академгородке плодотворной обстановки для выполнения всех необходимых целевых и вспомогательных работ по применению вычислительной техники. Эксплуатация размещенных там с середины 1960-ых годов ЭВМ была организована в условиях ограниченных ресурсов на уровне высшего пилотажа гениальных управленческих, технических и психологически очень метких решений академика Г.И. Марчука, директора ВЦ СО АН СССР, потом возглавлявшего ГКНТ СССР и АН СССР [39]. В развитие информатики и информационных технологий внесли свой вклад различные институты Сибирского отделения Академии наук, в том числе и те, для которых информатика не является основным направлением исследований (Институт математики, Институт ядерной физики, СКБ научного приборостроения, Институт автоматики и электрометрии, Институт физики полупроводников, институты химического профиля, СКБ вычислительной техники, Институт цитологии и генетики, Государственная публичная научная-техническая библиотека). Многие из таких работ "вошли в историю науки". История Новосибирского Академгородка ещё не получила полного понимания и описания. Лишь немногие, преимущественно парадные, эпизоды и линии освещены в юбилейных сборниках ряда НИИ и Президиума СО РАН [1].

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

В сфере программирования наиболее яркой является школа академика Андрея Петровича Ершова. Под руководством А.П.Ершова был выполнен каскад пионерских работ, опережавших технические возможности отечественных ЭВМ того времени, что позволило коллективу новосибирских программистов на долгое время стать законодателями мод в отечественном программировании, а А.П. Ершов не только стал лидером программирования, но уже 40 лет эта позиция вакантна [2-9]. Научная карьера Андрея Петровича затрагивает четыре направления: программные эксперименты, теория программирования, общественная деятельность по формированию программистского мира, постановка школьной учебной дисциплины «информатика». Коллеги и ученики Андрея Петровича освещают преимущественно компиляторную линию, практическая значимость которой наиболее очевидна. Остальные направления служат фоном, их признание и проявление требует более тонких исследований, результаты которых могут не дождаться подтверждения очевидцами и участниками. При систематизации парадигм программирования[2] бросается в глаза, что многие системообразующие и перспективно-стратегические парадигмы программирования не просто входили в сферу интересов Андрея Петровича, но в формирование многих из них ему удалось сделать значительный вклад, другие – получили развитие трудами его учеников.

Как это ни странно, выпускники школ, успешно сдавшие ЕГЭ по информатике и поступившие в НГУ на ФИТ, в большинстве не знают, кто такой А.П. Ершов, им не известно откуда взялся в школе предмет «информатика». Магистранты ММФ и ФИТ НГУ безмерно удивляются, что в нашей стране были выполнены достойные проекты [10], хотя обширный материал о них вполне достоверно изложен на страницах Виртуального компьютерного музея Э.М. Пройдакова [11].

II. Парадигма программирования

1. Технологичное и теоретическое программирования: практичность и надёжность

В те времена, хотя уже существовали математические модели организации вычислений – машина Тьюринга, лямбда-исчисление Чёрча, продукции Поста, цепи Маркова, ещё не сложились стандарты на подходы к представлению решений прикладных задач в виде компьютерных программ. Абстрактные достижения математиков вообще с большим трудом получают признание у практиков. Понятийная база математических моделей была слишком далека от компьютерных средств для непосредственного применения в программировании.

Рассказывают, что Алексей Адреевич Ляпунов посетил Феофанию, где отлаживалась МЭСМ, посмотрел как инженеры работают с этой машиной и вернулся в Москву с методом операторных схем, который и описал слушателям первых лекций по программированию. Таким образом, с лёгкой руки Алексея Андреевича, наше программирование обрело сразу две взаимодополняющие парадигмы: технологичное и теоретическое программирования (схематология – фундаментальное). В основе был метод операторных схем, использующий графовые схемы, сопровождаемые текстовыми комментариями, пригодными в качестве пояснений при записи на бланках числового кода программ. Такая двойственность позволяла преодолеть дистанцию между математико-интуитивным представлением алгоритма решения и его реализацией в машинных кодах. Собственно, графовые схемы попутно выполняли роль нормализатора сложности, что обеспечивало практичность программирования – предпочтение задач, решение которых не требует чрезмерно сложных схем. Прогон полученной таким образом программы гарантировал «объективную» надёжность реализации – её результат был доступен и без присутствия автора [12-17].

Особенности этого легендарного курса отмечают Любимский Э.З., Поттосин И.В., Шура-Бура М.Р. в статье “От программирующих программ к системам программирования (российский опыт)” [18], где выделяют ключевые понятия будущего программирования и отмечают, что “А.А. Ляпунов в те же годы атаковал проблему с другой стороны. Он заметил, что структура программы включает в себя операторы из небольшого набора типовых операторов и может быть представлена формально в виде строки, соответствующей последовательности операторов программы. На языке операторных схем программа представляется как схема, соответствующая управляющему графу программы, и совокупность спецификаций каждого оператора. Эти идеи А.А. Ляпунов положил в основу курса по программированию, читавшегося им в Московском Университете. Понятие программы как некоторой операторной структуры, взгляд на программу сверху, было революционной идеей, которая практически сразу же легла в основу первых отечественных трансляторов.”

Стоит отметить, что Алексея Андреевича отличала большая любовь к научным открытиям. Лекции по матанализу на ММФ НГУ он обычно начинал рассказом о новейших открытиях и достижениях в самых разных областях науки – астрономии, биологии, лингвистике, физике, геологоразведке и др., казалось не было научных направлений, не привлекавших его любознательности.

2. Системное и алгоритмическое программирования: трудоёмкость и эффективность реализации

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

Романтическое начало этой эпохи описано многими участниками. Так, Е.А. Жоголев в статье “Как А.П. Ершов стал программистом” [19] отмечал: “А.П. Ершов окончил механико-математический факультет МГУ по кафедре Вычислительной математики в 1954 году. Это был первый выпуск кафедры, для которого читался курс программирования. Лекции читал профессор А.А. Ляпунов. Зав. кафедрой Вычислительной математики в то время был профессор Б.М. Щиголев (академик С.Л. Соболев[3] стал зав. кафедрой только после переезда в новое здание). После окончания университета мы с А.П. Ершовым регулярно встречались на различных программистских форумах. Он стал признанным лидером программистов СССР”.

И.В.Поттосин уточняет: «Он принадлежал к первому в СССР выпуску дипломированных специалистов по программированию – так же, как и его однокашники Э.З. Любимский, В.С. Штаркман, И.Б. Задыхайло, В.В. Луцикович, О.С. Кулагина, Н.Н. Рикко и другие».

Э.З. Любимский напоминает: «Первые отечественные трансляторы носили мнемоническое название программирующих программ» (ПП). Он шаг за шагом отслеживает формирование стартовых идей в программировании и авангарда коллективов, сумевших эти идеи реализовывать и внедрять. «ПП для БЭСМ, разработанная А.П. Ершовым, Л.Н. Королевым, В.М. Курочкиным, Л.Д. Паниной и В.Д. Поддерюгиным, развивала входной язык программирующих программ [20]. Во-первых, она объединяла схему и спецификацию операторов в одном тексте, во-вторых, был введен первый структурный оператор, а именно – столь существенный оператор цикла (соответствующий современным циклам с параметром)».

«ПП-2 послужила идейной основой двух проектов – ПП для Стрелы 4 [21] (разработчики Н.М. Ершова, Е.А. Жоголев, Т.С. Росляков, Н.П. Трифонов и др. при идейном руководстве М.Р. Шура-Буры) и ПП для Стрелы 7 [22] (разработчики А.М. Бухтияров, Л.В. Войтишек, Н.А. Криницкий, А.А. Левина, И.В. Поттосин, Г.Д. Фролов). Важно отметить, что первая из них представляла собой зачаток настоящей системы программирования: помимо собственно транслятора она содержала систему сборки модулей и некоторые средства отладки. Транслятор получал такие фрагменты объектной программы, которые потом назовут модулями, а система сборки создавала программу из оттранслированных модулей и библиотечных программ. ПП для Стрелы 3 [23] (разработчики Т.М. Великанова, А.П. Ершов, К.В. Ким, В.М. Курочкин, Ю.А. Олейник-Овод, В.Д. Поддерюгин) создавалась под идейным влиянием ПП БЭСМ. В ней был реализован ряд идей, новых тогда, но ставших классическими сейчас – табличный подход к синтаксическому анализу, оптимальное (по числу рабочих переменных) программирование арифметических выражений. А.П. Ершовым был независимо (и практически одновременно с Петерсеном) изобретен метод хеширования [24], который применялся к экономии арифметических выражений.

Итак, при становлении нового направления, одновременно с созданием первых российских трансляторов – программирующих программ – шел процесс кристаллизации и оформления базовых идей и подходов и одновременно процесс создания коллективов квалифицированных исследователей, сказавших свое слово и на последующих этапах развития этого направления. Как некоторый итог этого начального этапа представляется вышедшая в 1958 г. первая в мировой науке монография А.П. Ершова [25], посвященная проблемам трансляции. Монография практически сразу была переведена и издана за рубежом[26].

Нужно заметить, что с трансляции стартовало не только системное, но и теоретическое программирование. Именно работы по входным языкам (операторным схемам) и трансляторам (программирующим программам) послужили толчком к созданию первой математической модели программ – схемам Янова [27]. Начальным толчком к появлению такой известной модели, как стандартные схемы стала работа А.П. Ершова, одного из создателей первых трансляторов по операторным алгоритмам [28].»

Программирование на этом уровне было весьма трудоёмким и требовательным к уровню способностей. Высокая трудоёмкость препятствовала развитию программирования в более массовую профессию. Конечно, были созданы прецеденты непревзойдённого программистского мастерства, как ИС-2М. Р. Шура-Буры [29], но мало кто мог повторить такие образцы. Выход был найден в идее программирующих программ.

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

3. Оптимизационное и доказательное программирования: эффективность кода и правильность преобразований

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

Э.З. Любимский: «Работы над этими трансляторами (ТА-2, ТА-1 и АЛЬФА) начались практически сразу после публикации завершенного международной рабочей группой описания языка [4]. Хотя, по-видимому, первым алголовским транслятором стал транслятор Айронса, но и ТА-1, и ТА-2 были завершены в 1963г., т.е. практически одновременно с другими известными западными работами – П.Наура и Э.Дейкстры. Транслятор АЛЬФА ввиду объемности реализации был завершен годом позже».

«... для тех, кому надо было программировать задачи с большим счетом и, значит, обязательно иметь эффективный код, существовал АЛЬФА-транслятор».

«Отечественные языки Алмо[30], Эпсилон [31], Сигма [32], которые были одними из первых в мире языков системного программирования, создавались, поэтому, в коллективах трансляторщиков, только что завершивших большие программные проекты и почувствовавших, каково сапожнику обходиться без сапог».

И.В. Поттосин: «Несмотря на свои молодые годы, А.П. Ершов к этому времени уже стал известным специалистом в области трансляции и одним из лидеров этого направления в стране – он был руководителем двух проектов программирующих программ, ПП БЭСМ и ППС, автором первой монографии по трансляции».

«Достижению поставленной цели послужил богатый набор оптимизаций, реализованный в Альфа-трансляторе [33, 34] . Была предложена смешанная стратегия программирования (то, что позднее на Западе было названо "casing") таких конструкций, как процедуры, циклы, индексные выражения, когда на основании анализа контекста выбирался наиболее эффективный из допустимых способ генерации конструкций. Особенно изощренно программировались процедуры и подстановка параметров для них: выбор осуществлялся среди 11 способов[5]. В результате алголовские процедуры при всей мощности механизма программировались оптимальным образом (что стимулировало программистов активно использовать это средство). Существовавшая ранее оптимизация экономии выражений была существенно развита – полностью учитывались свойства коммутативности и ассоциативности; если это преобразование не стало глобальным, то оно уже было квазилокальным. Впервые была реализована глобальная чистка циклов. Тщательной оптимизации подвергались операции над многомерными значениями – то, чего не было в стандартном Алголе, но активно использовалось вычислителями. Впервые была реализована глобальная экономия памяти, опирающаяся на теоретические работы А.П. Ершова и С.С. Лаврова [35].»

История и идеи АЛЬФА-транслятора описаны в большом числе источников [36, 38].

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

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

Эксплуатация Альфа-системы показала ещё одну неожиданную проблемы – проблемадоверия правильности реализации оптимизирующих преобразований. При наличии поддержки тензорных операций в языке Альфа[6], большинство программистов-вычислителей предпочитали вместо использования выражений вида «А + В» для преобразования двух-трёх мерных матриц тщательно выписывать многоуровневые циклы. В результате возник целых разворот средств и методов доказательного программирования, призванный обосновывать корректность оптимизирующих преобразований и анализировать критерии и границы их применимости при кодогенерации.

«Ершов был лидером советского программирования и осознавал это. Лидерство воспринималось им как ответственность – за судьбу и развитие нового направления, за судьбу людей, работающих в этом направлении[7]. Он умел отстаивать значимость программирования и программистов перед внешним миром».

«Новый язык в разное время носил разные названия. Сначала он носил название "входной" (в английском переводе Input Language), затем – скорее обиходное, чем официальное – "сибирский" и, наконец, уже установившееся и официальное имя – язык Альфа. Следует особо отметить творческую атмосферу Альфа-проекта» [37].

Не будет преувеличением сказать, что реализация Альфа-транслятора знаменует рождение оптимизационного программирования. Одновременно из теоретического программирования выделяется доказательное, исследующее понятие «эквивалентность. Прежде чем реализовать конкретную оптимизацию надлежит доказать, что она не слишком нарушает правильность программы.

«Новый транслятор – транслятор Альфа-6 – был улучшенной версией оптимизирующего транслятора с Алгола.» «В результате система Альфа-6 стала достаточно широко используемой системой у пользователей БЭСМ-6.» [62, 61]

4. Учебное и ознакомительное программирования – стартовый барьер: русификация, изучаемость, имплицитное знание

Середина 1960-ых годов – время очередной реформы общеобразовательной системы, направленной на обретение выпускниками школ рабочих навыков. Естественно, это дало возможность в учебные планы лучших школ Новосибирска и других городов включить изучение основ программирования с возможностью эпизодического прогона программ на труднодоступных в те времена ЭВМ. В результате через несколько лет ряд выпускников этих школ влились в сферу влияния А.П. Ершова, некоторые из них стали видными учёными. Можно сказать, что так было положено начало парадигме учебного программирования.

Продолжение этой линии решало проблему стартового барьера– перехода от понимания программы как конструкции из машинных команд над скалярами с передачами управления к изучению и представлению программ из сложно вычисляемых выражений под управлением развитых схем и процедур с возможностью раздельной компиляции, допускающей минимизацию повторного программирования решений типовых задач. Были организованы Альфа-курсы, изучение средств и методов программирования на Альфа-языке для многих выпускников этих курсов стало путёвкой в мир современного программирования на языках высокого уровня [40]. Одновременно создаются языки программирования, изучаемость которых много проще, а эффективность реализации существенно выше [31, 32, 48].

Андрей Петрович придавал большое значение опоре программирования на речевую практику на родном языке. По его мнению, продумывание программ на родном языке позволяет естественно наследовать интуитивный опыт надёжной организации процессов, формируемый человеком с детства. Характерной особенностью разработки своих языков программирования была опора на русский язык и экспериментальные реализации зарубежных языков настойчиво подвергались русификации. [41]

Позднее была выражена идея концепции «лексикон программирования» [42, 43]. При подготовке школьного программного обеспечения были развёрнуты проекты учебных языков программирования на базе национальной лексики. Сторонники программирования на базе речевой практики на родном языке не отступают и продолжают разработку своих языков [44].

И.В. Поттосин: «мы от "нашего" языка хотели близкой к машинному языку семантики и удобного синтаксиса. Заметим, что подобная же, по-видимому, идея была и у Никлауса Вирта, когда он создавал ориентированный на архитектуру ИБМ-360 язык ПЛ-360, ставший прототипом большого числа так называемых машинно-ориентированных языков или "языков повыше уровнем" (higher level languages). Разница между нами была в том, что Вирт ориентировался на конкретную архитектуру, а мы – на конкретный класс задач.»

«Системы ЭПСИЛОН успешно эксплуатировались на этих компьютерах, пока они (кроме БЭСМ-6) не были вытеснены "отечественными" ЕС ЭВМ. Где-то году в 1974-м была предпринята попытка разработать систему ЭПСИЛОН для ЕС ЭВМ, но неудачный выбор разработчиков не дал осуществиться этому проекту. Язык Эпсилон ушел в прошлое вместе со старыми компьютерами, но сыграл большую и очень полезную роль в создании различных программных систем для этих компьютеров» [31, 46].

«СИГМА определялась как многоуровневая система с некоторым числом свободных параметров. Базисные операции языка не имели своей семантики, имелись лишь стандартные процедуры для адресации объектов, распределения памяти и т.д.»

«Работу над первым СИГМА-транслятором хорошо описал Г.Г. Степанов. Надо только добавить, что происходила эта деятельность в период расцвета "Факела" и что работали Степанов с Синенкиным по трудовому соглашению с этой, столь популярной тогда, организацией» [32, 45, 48, 47].

5. Операционные системы и многопроцессорные комплексы: противоречие между механизмами производства и исследований

В конце 1960-ых годов в Академгородке был инициирован процесс создания пояса внедрения результатов научных исследований. Развернулось строительство корпусов для специально формируемых организаций-спутников, призванных осваивать достижения науки и выполнять их внедрение в промышленность. Одной из таких организаций был КБ-1, вскоре переименованный в КБСП, рассматриваемый как спутник ВЦ СОАН, значительная часть тематики этой организации нацеливалась на разработку промышленного ПО под руководством А.П. Ершова. В числе первых проектов были проекты операционной сисемы АИСТ-0 и многопроцессорного комплекса АИСТ-1. Оба проекта предполагали экспериментальную реализацию средств и методов распределённого доступа к вычислительной технике в условиях промышленной эксплуатации разносортных устройств.

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

Вскоре противоречия между производством и наукой стали столь непримиримы, что из КБСП выделился НФ ИТМиВТ, сохранивший сотрудничество с Отделением информатики ВЦ СОАН. Не исключено, что именно опыт взаимодействия с промышленно-ориентированным звеном привлёк внимание Андрея Петрович к знаменитой книге Фр. Брукса «Мифический человеко-месяц» [57]. Андрей Петрович провёл серию семинаров с анализом содержания этой книги и стал научным редактором первого перевода этой книги на русский язык. Отзвуки этих противоречий можно увидеть в воспоминаниях по проектам МВК Эльбрус [58].

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

6. Многоязыковое и мультипарадигмальное программирования: мультипликативный рост объёма работ – новые машины, языки и задачи

Конец 1060-ых годов характеризуется ярким разнообразиемкомпьютерных архитектур и созданием самых сложных языков программирования. Для разработчиков компиляторов это означало мультипликативный рост объёма работ. Поиск решения привёл Андрея Петровича к идее проекта БЭТА для поддержки методов разработки многоязыковых систем построениятрансляторов, что можно назватьмногоязыковым программированием. Основным отличием от других аналогичных подходов было сохранение оптимизационных инструментов, состав которых при реализации распался на два уровня: универсальные и машинно-ориентированные оптимизации. Это произошло в процессе исследования критериев применимости эквивалентных преобразований. Часть как бы универсальных оказались на деле машинно-зависимыми на новых архитектурах.

Упрощение подготовки и изучаемости программ привело к постепенному отказу от использования блок-схем в практике программирования и к резкому расширению объёмов создаваемых программ, понимание которых стало отдельной проблемой. Появляются программные комплексы, функционирование которых выходит за пределы понимания их авторов. Одновременно появляются самые сложные в мировой практике языки программирования, авторы которых спокойно провозглашают, что практикующим программистам нет необходимости понимать весь язык программирования, достаточно выбрать наиболее подходящий его уголок и им ограничиваться, пока очередная задача не потребует новых знаний. Остальное отдаётся на откуп компиляторам и системам программирования, точнее – системным программистам. Одновременное расширение парка компьютерных архитектур приводит к проблемам мультпликативного роста объёма работ по реализации языков программирования на новых машинах и переноса готового программного обеспечения на новую аппаратуру.

Самый яркий и дискуссионный проект того времени, конечно, – Ершовский проект многоязыковой системы построения трансляторов БЕТА [64, 63].

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

«Замысел был слишком рискован, так как одновременно предполагалось опробовать слишком много новшеств: многоязычие на входе, многомашинность на выходе; новые языки (например, при начале работ существовали только неполные экспериментальные трансляторы с Алгола-68) и новые методы оптимизации для новых прикладных областей – и всё это в рамках научно-исследовательского института, полупроизводственная работа силами сотрудников, ориентированных на получение научных результатов»[65].

И.В. Поттосин: «Накопленный в оптимизирующей трансляции опыт дал возможность перейти к следующему новосибирскому трансляторному проекту – многоязыковой транслирующей системе БЕТА»[66].

«Теория, наряду с исследованиями в различных направлениях системного программирования – и это очень важно отметить – в новосибирской школе велись исследования и по теоретическому программированию, основы которых были заложены А.П.Ершовым. Сознательная его позиция, заключавшаяся в том, что серьезные эксперименты по созданию систем должны подкрепляться разработкой теоретических моделей и стимулировать эту разработку, была весьма плодотворной». [67]

7. Экспериментальное и исследовательское программирования: освоение новых языков и интеллектуальные вызовы

Начало проекта БЕТА совпало с развёртыванием производства ЕС-ЭВМ и многочисленных проектов разработки и внедрения АСУ по всей стране. В этот период под руководством А.П. Ершова и И.В. Поттосина выполняется серия работ «в меру личной инициативы», нацеленных на реализационное самостоятельное освоение разнообразных языков программирования. Критерием качества таких работ считается как можно более полное соответствие определению изучаемого языка [55, 54], но имеет место и учёт других практичных критериев. Андрей Петрович пишет ряд работ по гуманитарным аспектам программирования и, в частности, отмечает самоубийственный характер профессии «системный программист» – чем лучше выполняется его работа, тем меньше она заметна пользователю [57, 56].

В конце 1968 года в кабинете А.П. Ершова Джон Маккарти прочел серию лекций, посвященных языку Lisp. Возможность практичной реализации такого языка даже на нашей лучшей ЭВМ БЭСМ-6 вызывала сомнения у иностранных специалистов. Тем не менее, была реализована версия Лисп-системы, включавшая в себя русифицированную лексику, универсальную обработку свойств объектов и механизм перераспределения памяти с выгрузкой стека во внешнюю память. Во время очередного визита в Новосибирск Джон Маккарти собственноручно написал тест для проверки функциональной полноты реализационной семантики новосибирской Лисп-системы. Система выдержала эту проверку. Основное применение системы – исследования в области верификации программ, эксперименты по организации недоопределенных вычислений, синтаксически ориентированных преобразований программ и конструированию семантических моделей. Можно сказать, что система поддерживала решение задач уровня исследовательского полигона [58].

Д.Я. Левин: «Язык Сетл был предложен и разработан в начале 70-х годов профессором Нью-Йоркского университета Джекобом Шварцем (Jacob Schwartz). Это стало выдающимся событием: математик с мировым именем смело вошел в область программирования с радикальным практическим предложением, нацеленным на вовлечение математической интуиции в сферу решения программистских задач. Оно состояло в том, чтобы, базируясь на множествах как основных типах данных, писать программы в терминах высокоуровневых непроцедурных алгоритмов, широко использующих логико-предикатные средства» [78].

Следует отметить, что язык SETL изначально позиционировался как язык сверх высокого уровня (ЯСВУ). Под сверхвысоким уровнем языка подразумевалось не только использование полного объёма математических абстракций, но и требования к прагматике языка – его реализация должны была поддерживать полноценное пространство допустимых реализационных конструкций, выбор которых должен был автоматизироваться с учётом динамики их применения. Столь сложное для реализации требование было обосновано необходимостью поддерживать возможность экспериментального исследования постановки задачи без отвлечения на детали реализационных структур данных. В этом плане формально реализация ЯСВУ может быть выполнена как обычный язык высокого уровня, в котором пространство реализационных конструкций ограничено одним решением без выбора или нагружено типизацией структур данных. Быстрая реализация Сетла на системе ЭПСИЛОН-БЭСМ-6 являет собой ценный прецедент достижения успеха ценой сужения решаемой задачи до уровня макетного образца. Она дала возможность продемонстрировать возможности языка на небольших понятных примерах, на которых ограничения математического аппараты не заметны. В их числе были первые эксперименты по искусственному интеллекту и детскому программированию. Можно сказать, что была продемонстрирована целесообразность ограничивать программистский перфекционизм и начинать решение слишком новых программистских задач с создания макетного образца.

Развитие практичности языка Эпсилон привело к определению его расширения МАКРО-Эпсилон, представляющего собой практичный компромисс, дополняющий обычную процедурную технику механизмом макроопределений. Созданная Ф.Г. Светлаковой система для этого языка была успешно применена при разработке системы поддержки пакетов прикладных программ СОФИСТ для выполнения работ по исследованию процессов атмосферы иокеана [80].

Реализацию эффективной системы программирования для языка Setl Дж. Шварц предполагал выполнить с помощью специально разработанного машинно-независимого машинно-ориентированного языка системного программирования Little, похожего на Fortran, но обрабатывающего произвольные коды и приспособленного к крупноблочной организации программ и данных. Предполагалось, что именно этот язык – подходящая основа для машинно-зависимого переноса программ на наши машины.

Советская разработка системы программирования и компилятора для языка Little на БЭСМ-6 была выполнена на макроассемблере БЭМШ и было экспериментально опробовано комплексное решение ряда технологических проблем обеспечения машинно-зависимого переноса программ без кросс-трансляции. Решение базировалось на идеях вертикального расслоения программ [97], функциональной декомпозиции на простые классы семантических систем [81], синтаксическое и семантическое управление конструированием компилятора, виртуального кода программы и оптимизирующей кодогенерации, что суммарно позволяло решать задачи, требующие достижения предельного баланса между эффективностью применения аппаратуры и технологичностью процесса разработки экспериментальных программ.

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

8. Параллельное и непрофессиональное программирования: расширение пространства решений и круга пользователей, искусственный интеллект

И.В. Поттосин: «Новосибирская школа одной из первых в мире занялась проблемами теории параллельного программирования. В.Е.Котовым и А.С.Нариньяни была предложена одна из первых моделей параллельных программ – недетерминированные асинхронные автоматы. Для этой модели получен ряд важных результатов, связанных с условиями отсутствия конфликтов параллелизма, с преобразованием последовательных программ в параллельные и преобразованиями, увеличивающими внутренний параллелизм – это определяющие проблемы теории параллелизма.» [49]

Модель была достаточно общей для представления как асинхронных так и синхронизованных процессов и программ управления ими. Это было сделано на основе введения понятия «спусковое условие», которое могло быть любой природы [83-85].

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

От этого направления отделились задачи искусственного интеллекта, преимущественно нацеленные на лингвистические интерфейсы и экспертные системы, используемые при автоматизации работ с представлениями знаний, не требующими обучения программированию [88-91].

Опыт этих работ дал материал для формализации реализационной семантики языков программирования в виде интерпретируемых сетей, допускающих сетевое определение правила их функционирования. Кроме того, была выполнена систематизация требований ЕСПД к программной документации и представлена в форме, сходной с гипертекстом.

9. Верификационное программирование и типизация данных – свойства программ, контроль типы данных и протоколов

В конце 1960-х годов были достигнуты первые успехи в автоматизации проверки правильности доказательств теорем. Естественно, возник соблазн и программу рассматривать как большое доказательство теоремы, утверждающей, что из специально описанных входных данных можно вывести выходные данные, обладающие свойствами, распознаваемыми по тексту программы. Для первых экспериментов в качестве таких, сравнительно удобно удостоверяемых свойств, были выбраны представления типов данных. Экспериментальный полигон обычно был ограничен сравнительно рафинированными подмножествами языков программирования, свободными от усложнённых конструкций. Хотя некоторые важные свойства выводить удалось, полученные таким образом системы верификации дискредитировали себя из-за диссонанса между заметной сложностью системы и слишком малой её пропускной способностью.

Сложившееся в результате предубеждение не преодолено до сих пор, несмотря на многократные подтверждения пользы от способности систем верификации, особенно поддерживающих проверку на логических моделях, обнаруживать достаточно тонкие ошибки, не заметные при непосредственном тестировании. В основном прижилась практика проверки статических типов данных, считающаяся хорошим тоном при определении новых языков и реализации статических анализаторов в оптимизирующих компиляторах [92-94].

10. Системы управления библиотечной базой данных – тематический классификатор материалов и доступ

Всю жизнь Андрей Петрович собирал книги. Часть его библиотеки, расположенная в его кабинете, была доступна его сотрудникам и гостям. Для этого Андрей Петрович изобрёл поразительно оптимальную систему пользования библиотекой. В каждую книгу вкладывалось две перфокарты с наименованием книги. Можно было в любое время зайти в кабинет, взять книгу, на перфокартах записать дату и свою фамилию, одну перфокарту оставить на месте книги, а вторую положить в коробочку за указателем на свою фамилию. Эту механику дополняла созданная специально тематическая классификация книжного фонда, а заодно и рубрикация тематики новой науки, для которой стандартные рубрикаторы были не удобны [95, 99, 100].

Эта коллекция имела всесоюзное значение – многие авторитетные специалисты немало времени провели в ней при подготовке своих диссертаций [96-98]. Часть таких контактов дали материал для исследования «незримых» коллективов [69, 70]. Таким образом, А.П. Ершов осуществлял интеграцию высшего эшелона программистского корпуса, что дало ему моральное право выполнить монументальный труд по освещению истории программирования в СССР [103] и организовать, можно сказать, всемирное паломничество на родину Али-Хорезми [104].

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

Позднее была разработана информационно-поисковая система, хранящая все сведения о книжном фонде. Первую версию сделал А.В.Замулин, более поздние – Я.М.Курляндчик. Система выдержала несколько поколений и успешно функционирует до сих пор в Мемориальной библиотеке [101-102].

11. Трансформационное и конструктивное программирования – наследование корректности систем и программ

Опыт оптимизирующей компиляции, а также появление переносимых компиляторов и средств автоматического конструирования систем программирования методами синтаксической генерации привёл к парадигме смешанных вычислений или трансформационного программирования, позволяющей снижать трудоёмкость разработки компиляторов формальными преобразованиями синтаксически определённого интерпретатора. Известно, что трудоёмкость реализации интерпретатора в 3-10 раз меньше, чем разработки компилятора. Вопросы эффективности можно решать уже наработанными методами оптимизирующей компиляции [105, 106, 110, 111].

Профессиональный корпус воспринял лишь наиболее очевидное компиляторное воплощение этой идеи. Перипетии исследований в этой области подробно описаны М.А. Бульонковым [107, 108, 112].

Неудовлетворённость освоением потенциала парадигмы трансформационного программирования показана в докладе А.В. Климова, продвигающего подобную идею на материале языка РЕФАЛ [113]. Не исключено, что техника проекций, реализуемая методами смешанных вычислений, ещё приведёт к технологии декомпозиции программ на многократно используемые компоненты для надёжного конструирования сложных систем, отвечающих трудно удостоверяемым критериям качества.

12. Редакционное и издательское программирования – электронная фактография и автоматизация полиграфии и делопроизводства

Появление микропроцессоров и персональных компьютеров позволило наметить перспективу освобождения публикационной активности от чрезмерной зависимости от трудоёмких лаборантских и полиграфических работ. Андрей Петрович широко пропагандирует возможности новой техники [114, 116].Появляются догадки, что вскоре компьютер появится в каждом доме и станет просто бытовым прибором, таким же как кофейник или пылесос.

Полный разворот проектов этого направления, связанного с бюротикой, документооборотом,полиграфией и другими аспектами работы с текстами на русском и других языках, подробно описан в статьях А.А. Берса [117-120].

Тематически близко могут быть рассмотрены работы, связанные с корпусом русского языка, высоко оцениваемые лингвистами. [121, 122].

13. Любительское программирование и школьная информатика: отставание от прогресса элементной базы

Общеизвестно, что большинство людей имеют склонность привыкать к обстановке, жаргону, кругу общения. Неудивительно, что смена компьютерных архитектур, операционных систем, языков программирования вызывает у многих опытных программистов заметные трудности. Кроме того, имеет место ограничение на пропускную способность осознавать новое. Так, специалисты по суперкомпьютерным вычислениям часто жалуются, что не успевают осваивать открывающиеся перед ними возможности. Нечто похожее можно пронаблюдать на эффекте отставания на 10-20 лет появления наименований парадигм программирования и их признания от создания и применения инструментов, поддерживающих эти парадигмы. Обычно преодоление таких проблем происходит двумя способами: поиск любознательных энтузиастов, обладающих высокой восприимчивостью к новому, и спуск новизны на молодое поколение, ещё не обременённое традиционными познаниями. Андрей Петрович сумел адаптировать оба эти способа к особенностям программирования.

Резкая смена информационно-коммуникационных технологий стала серьёзно опережать возможности их рационального освоения опытными программистами. Проявилась проблема эстафеты поколений, успешно решённая системой Новосибирский школ юных программистов (ШЮП) [125-129],механизм которой включал в себя быстрое выполнение интересных любительских проектов, результаты которых заранее никому не были известны, даже руководителю. В те времена в мировой практике не существовало опыта преподавания программирования в общеобразовательной системе. Были лишь рекомендации ЮНЕСКО слабо развитым странам использовать Logo-миры в факультативной работе с детьми.

Лозунг «Программирование – вторая грамотность», взволновавший профессиональное программирование, был успешно доведён до уровня школьной дисциплины [132-136]. Начал издаваться журнал «Микропроцессорные средства и системы (МПСС)», в колонке редактора Андрей Петрович терпеливо разъясняет актуальность происходящих изменений [130, 131]. Созданные учебники получили признание как обладающие научной достоверностью и до появления ЕГЭ рекомендовались выпускникам школ использовать эти учебники при подготовке к экзаменам. Материалы Концепции использования средств вычислительной техники в сфере образования [139] более десяти лет активно использовались работниками управления образованием при подготовке перспективных планов мероприятий и деятельности в этой сфере.

Традиции летних школ юных программистов (ЛШЮП) до сих пор поддерживаются ИСИ СО РАН им. А.П. Ершова и являются центром притяжения для любителей программирования из разных городов [137, 138].

III. Выводы и заключение

Часто говорят, что основная задача программиста – это кодирование созданных математиками алгоритмов, выполнение подготовленных менеджерами технических заданий или реализация разработанных аналитиками спецификаций. Перспективно-стратегические парадигмы программирования академика А.П. Ершова различаются по обнаруживаемым проблемам и подходам к их решению, открывающим новые пространства решений, по мере изучения которых проблемы преобразуются в практические задачи с примерами типовых решений. Нахождение практичных методов и создание удобных средств приводит к исчезновению проблемы, кажется, что её и не было. Череда пройденных Андреем Петровичем парадигм программирования доказывает, что истинная миссия программирования – решение новых задач при отсутствии готовых средств и типовых методов. Многие из этих парадигм для его коллег и учеников стали полигоном научных исследований, другие парадигмы обрели аналоги по мере развития ИТ, некоторые временно оттеснились от массового программирования в сторону, ждут своего времени.

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

Источник финансирования

Работа выполнена при частичной финансовой поддержке Российского фонда фундаментальных исследований, проект No 18-07-01048-а.

Список литературы

  1. http://www.soran1957.ru/ ФотоАрхив СОАН

  2. http://ershov.iis.nsk.su/ Архив академика Ершова

  3. http://www.iis.nsk.su/files/book/file/bibliografiya_prep_140509.pdf – библиография о Ершове и труды Ершова

  4. Богатырев Р.П. Портреты великих: А.П. Ершов // МирПК. – 2005. – No 4. – С. 111–113.

  5. https://neuronus.com/biography/1214-andrej-petrovich-ershov.html – портал знаний об искусственном интеллекте.

  6. Андрей Петрович Ершов – ученый и человек / отв. ред. А.Г. Марчук. – Новосибирск: Изд-во СО РАН,2006. – 503 с. (ред.-сост. М.А. Бульонков, А.А. Бульонкова, Н.А. Черемных, И.А. Крайнева). – (Наука Сибири в лицах).

  7. Ершов А.П. Выдающийся ученый в области программирования // Частиков А. П. Архитекторы компьютерного мира. СПб.: БХВ – Петербург, 2002. – С. 243–250.

  8. Крайнева И.А., Черемных Н.А. Путь программиста. Новосибирск, 2012.

  9. Крайнева И.А. История программирования в трудах академика А.П. Ершова. –http:/ershov.iis.nsk.su/russian/foundation/pred.html

  10. https://germanych.livejournal.com/366113.html – Некоторые особенности советской науки

  11. https://www.computer-museum.ru/books/n_collection.htm Виртуальный компьютерный музей. Новосибирская школа программирования

  12. Ляпунов А.А. Проблемы теоретической и прикладной кибернетики. М.: Наука, 1980, 336 с.

  13. Ляпунов А.А. О некоторых общих вопросах кибернетики // Пробл. Кибернетики. – 1958. – Вып. 1.-С. 5–22.

  14. Ляпунов А.А., Янов Ю.И. О логических схемах программ // Пробл. кибернетики, 1958. – Вып. 1. – С. 46–74.

  15. Ляпунов А.А. / Ред. – сост. Н.А.Ляпунова, Я.И.Фет. – Новосибирск: Филиал «Гео» Изд-ва СО РАН: Изд-во ИВМиМГ СО РАН, 2001. – 524с.

  16. Ершов А.П. А.А. Ляпунов и программирование: реферат докл. на Сиб. мат. о-ве, 28 окт. 1981 г. / А.П.Ершов // Сибирский математический журнал. - 1982/

  17. http://pcosrv.iis.nsk.su/simics/informatics/fet/ershov.htm Ершов – учитель

  18. Любимский Э.З., Поттосин И.В., Шура-Бура М.Р. От программирующих программ к системам программирования (российский опыт)

  19. Жоголев Е.А. Как А.П. Ершов стал программистом

  20. Ершов А.П.. Программирующая программа для БЭСМ АН СССР // Тр. конф. "Пути развития советского математического машиностроения и приборостроения". – ч.3. – М.:ВИНИТИ, 1956. – С.18- 29.

  21. Система автоматизации программирования // Под ред. Н.П. Трифонова и М.Р. Шуры-Буры. – М.: Физматгиз, 1961. –- 187 с.

  22. Бухтияров А.М., Войтишек Л.В., Левина А.А., Криницкий Н.А. и др. Программирующая программа ПП-С // Сб. научных трудов No 1. – МО СССР. – М., 1959.

  23. Великанова Т.В., Ершов А.П., Ким К.В., Курочкин В.М. и др. Программирующая программа для машины "Стрела" // Тез. докл. сов. по вычисл. матем. и прим. средств выч. техники. – Изд-во АН АзССР. – Баку, 1958.

  24. Ершов А.П. О программировании арифметических операторов // Докл. АН СССР. – 1958. – ч.118. – No3. –С.427-430. – . изобретен метод хеширования

  25. Ершов А.П. Программирующая программа для быстродействующей электронной счетной машины // Изд-во АН СССР. – М, 1958. – 116 с. – 1958 г. первая в мировой науке монография А.П.Ершова

  26. Ershov A.P. Programming program for the BESM computer / Pergamon Press. – London, 1959. – 158 p.изданазарубежом

  27. Янов Ю.И. О логических схемах алгоритмов // Проблемы кибернетики. – вып. 1. – М.:Физматгиз, 1958. – С.75-127. математическая модель программ – схемы Янова

  28. Ершов А.П. Об операторных алгорифмах // Докл. АН СССР. – 1958. – т. 122. – No 6. – С.67-970.математической модели программ – схемам Янова

  29. Шура-Бура М.Р. Система интерпретации ИС-2 // Сб. "Библиотека стандартных программ". – М.:Изд-во ЦБТИ, 1961

  30. Камынин C.С., Любимский Э.З. Алгоритмический машинно-ориентированный язык АЛМО // Сб. "Алгоритмы и алгоритмические языки". – Изд-во ВЦ АН СССР. – 1967. – вып.1.

  31. Поттосин И.В., Рар А.Ф., Катков В.Л. ЭПСИЛОН – система автоматизации программирования для задач символьной обработки // Тр. 1-ой Всесоюзной конф. по программированию. – Киев, 1968.

  32. Ershov A.P., Rar A.F. SYGMA, a symbolic generator and macroassembler // In "Symbol manipulation languages and technique". – North-Holland Publ. Co., 1968.

  33. Ершов А.П. Программирующая программа для БЭСМ АН СССР // Тр. конф. Пути развития советского математического машиностроения и приборостроения. ч.3. М.:ВИНИТИ, Система автоматизации программирования // Под ред. Н. П. Трифонова и М. Р. Шуры-Буры. М.: Физматгиз, с. 6.

  34. Ершов А.П. АЛЬФА – система автоматизации программирования/ Отв. ред. А.П. Ершов. – Новосибирск, 1965. – 264 с.

  35. Лавров С.С. Об экономии памяти в замкнутых операторных схемах, Ж. вычисл. матем. и матем. физ.,1:4 (1961), 687–701; U.S.S.R. Comput. Math. Math. Phys., 1:3 (1962), 810–828

  36. Ершов А.П..Научные основы доказательного программирования// Вестник АН СССР. – 1984. – No 10. – С. 9–19.

  37. Змиевская Л.Л. Чуть воспоминаний... https://www.iis.nsk.su/memories/zmievskaya

  38. Поттосин И.В. А.П. Ершов – пионер и лидер отечественного программирования https://www.iis.nsk.su/memories/pottosin

  39. Ершов А.П. Гурий Иванович Марчук: к 50-летию со дня рождения 1975 http://ershov- arc.iis.nsk.su/archive/eaindex.asp?lang=1&did=40894

  40. Корнева Л.А. История Альфа-группыhttps://www.iis.nsk.su/memories/korneva

  41. Ершов А.П. О русской транскрипции служебных слов АЛГОЛа 60. Добавление. 1982 http://ershov.iis.nsk.su/ru/node/795070

  42. Ершов А.П. Предварительные соображения о лексиконе программирования, 1985 http://rkka21.ru/ershov-lexicon.htm

  43. Ершов А.П. Язык или лексикон 1985 http://ershov.iis.nsk.su/ru/node/786643

  44. compiler.su – сайт любителей разработки своих языков программирования на базе русской речевой практики.

  45. Рар А.Ф. История Сигмы https://www.iis.nsk.su/memories/rar_sigma
  46. Поттосин И.В. Эпсилон-история https://www.iis.nsk.su/memories/pottosin_eps

  47. Степанов https://www.computer-museum.ru/books/n_mozaika/sigma_2.htm

  48. https://www.iis.nsk.su/memories/stepanov_sigma

  49. Поттосин И. В. Язык и реализации для системного программирования // Новосибирск, с. (Препринт/Сиб. Отд-ние АН СССР. ВЦ; 179) 1966

  50. Аванпроект системы разделения времени АИСТ-0: Отчет АИСТ-3/ АН СССР, Сиб. отд-ние, ВЦ. – Новосибирск, 1966. – 25 с. – (Совм. с Г.И. Кожухиным, Г.П. Макаровым).

  51. Ершов А.П. О содержании и организации работ по проекту АИСТ, 1966 О содержании и организации работ по проекту АИСТ: Отчет АИСТ-1/ АН СССР, Сиб. отд-ние, ВЦ. – Новосибирск, 1966. – 17 с.

  52. Маккарти Дж. Некоторые замечания к проекту АИСТ. Рабочая записка // Институт вычислительной математики и математической геофизики (ВЦ) СО РАН: Страницы истории / отв. ред. Б.Г. Михайленко; Росс. акад. наук, Сиб. отд-ние, Ин-т вычислительной математики и математической геофизики. – Новосибирск: Академическое изд-во «Гео», 2008. – С. 281–283

  53. Крайнева И.А. Страницы биографии Академика А.П. Ершова: создание системы разделения времени АИСТ-0 – «Информационные Ресурсы России» No1, 2007 www.aselibrary.ru/press_center/journal/irr/2007/number_1/number_1_6/number_1_6538/

  54. Поттосин И.В. Академик А. П. Ершов – пионер и лидер отечественного программирования https://www.computer-museum.ru/books/n_ershov/pottosin.htm

  55. Марчук Г.И.– А.П. Ершову Из переписки (Многопроцессорные системы: АИСТ-1) https://www.computer- museum.ru/books/n_ershov/5_ershov_marchuk_2.htm

  56. Никольников Е.И. Конструкторское бюро системного программирования – КБ СП (1968-1975) https://www.iis.nsk.su/files/articles/mozaika_nikolnikov.pdf

  57. Брукс Ф.П. Как проектируются и создаются программные комплексы. – М.: Мир, 1979.

  58. Карпов Л.Е., Фельдман В.М., Ширай А.Е.Сервисный процессор МВК Эльбрус-1 и Эльбрус-2 //Четвертая международная конференция «Развитие вычислительной техники и ее программного обеспечения в России и странах бывшего СССР: история и перспективы (SORUCOM – 2017)». Зеленоград. Москва, Россия, 3-5 октября 2017, с. 78-84

  59. Флойд Р. http://rkka21.ru/docs/turing-award/rf1978r.pdf Парадигмы программирования. Тьюринговская лекция, 1978 год.

  60. Wegner P. Concepts and paradigms of object-oriented programming. {OOPS} messenger}, 1(1): 7–87, August 1990.

  61. Альфа-6 https://www.computer-museum.ru/books/n_collection/alfa6.htmСтановление элементов промышленной технологии программирования в проекте создания оптимизирующего транслятора альфа-6 (1968-1972 годы)

  62. Васючкова Т.С. Методы измерения качества программногообеспечения.– Препринт N 339. Новосибирск, ВЦ СО АН СССР, 1981, 30 с.

  63. Ершов А.П. Внутренний язык в много языковой системе программирования как средство формализации семантики входных языков, 1974

  64. Ершов А.П. «Прокрустово ложе» для входных языков в много языковой системе программирования.,975

  65. Покровский С.Б. Внутренний язык в Бета https://www.computer-museum.ru/books/n_mozaika/beta.htm

  66. Захаров Л.А., Покровский С.Б., Степанов Г.Г., Новосибирск, 1987. 151 с

  67. Касьянов В.Н. Игорь Васильевич Поттосинvasilevich/543/

  68. 40 лет Отделу Программирования http://pd.iis.nsk.su/?_ga=2.228112219.755469028.1588939406- 728352166.1585024457, http://pd.iis.nsk.su/history

  69. Прагматические аспекты истории парадигм программирования https://www.computer- museum.ru/histsoft/program_paradigma.htm

  70. Евстигнеев В.А. Применение теории графов в программировании https://www.studmed.ru/evstigneev-va- primenenie-teorii-grafov-v-programmirovanii_d01b1d8ac7e.html

  71. Евстигнеев В.А. Наукометрические исследования в информатике https://www.computer- museum.ru/books/n_collection/investigat.htm

  72. Ершов А.П. Откуда берутся люди, способные создавать надежное программное обеспечениеhttp://ershov.iis.nsk.su/ru/node/804856, 1976

  73. Ершов А.П. О человеческом и эстетическом факторах в программировании https://www.computer- museum.ru/document/ershov2_sorucom_2011.htm

  74. Ершов А.П. Некоторые субъективные замечания к актуальным проблемам программирования// Перспективы системного и теоретического программирования. – Новосибирск, 1979. – С. 113–127.

  75. Ершов А.П. Эстетический фактор в программировании http://cshistory.nsu.ru/?int=VIEW&el=3009&templ=BOOK_INTERFACE

  76. Ершов А. П. О человеческом и эстетическом факторах в программировании (Памяти Г. И. Кожухина)

  77. Лисп-система на БЭСМ-6 https://www.computer-museum.ru/books/n_mozaika/little_lisp.htm

  78. Левин Д.Я. Сетл: Реализация и применение теоретико-множественного языка программирования https://www.iis.nsk.su/files/articles/mozaika_levin.pdf

  79. Литтл-компилятор. Замысел реализации» https://www.iis.nsk.su/files/articles/mozaika_gorodnyaya_eksperimentalnye.pdf

  80. Макро-эпсилон http://pde.iis.nsk.su/document/258

  81. Лавров С.С. Семантические системы

  82. В.А. Евстигнеев Обзор деятельности новосибирских ученых в области программирования (по материалам комиссии по системному математическому обеспечению ККВТ АН СССР) Препринт 83. https://www.iis.nsk.su/files/preprints/083.pdf

  83. Котов В.Е. Введение в теорию схем программ. / Отв. ред. А.П. Ершов. Новосибирск : Наука. Сиб. отд-ние, 1978. – 257 с.

  84. КотовВ.Е. Алгоритмы, математическое обеспечение и архитектура многопроцессорных вычислительных систем. (1982; в соавт.)

  85. ВальковскийВ.А., Котов В.Е., Марчук А.Г., Миренков Н.Н. Элементы параллельного программирования М.: Радио и связь. 240 с.

  86. Котов В.Е. Сети Петри. (1984) Москва: Издательство «Наука». 160 с.

  87. Котов В.Е. Теория схем программ.(1991, в соавт.) Котов В. Е., Сабельфельд В. К. Теория схем программ. М.: Наука. Гл. ред. физ.-мат. лит., 1991. 248 с

  88. Ершов А.П. Вклад в теорию и практику искусственного интеллекта// Наука в Сибири. 1984. 26 июля No 29. С. 6.

  89. Загорулько Ю.А., Кононенко И.С., Котов В.Е., Левин Д.Я., Телерман В.В., Черемных Н.А. Александр Семенович Нариньяни https://www.computer-museum.ru/galglory/nariniani.htm

  90. Нариньяни А.С. Асинхронные вычислительные процессы над памятью // Кибернетика. 1966. No 3

  91. Нариньяни А.С. Недоопределенность в системах представления и обработки знаний // Известия АН СССР. Техн. кибернетика. 1986. No 5

  92. Черноброд Л.В. О контроле типов значений переменных с использованием доказательства свойств программ. Программирование, 1982, 4, с. 14-24.

  93. Непомнящий В.А., Черноброд Л.В. О проверке правильности программ с помощью ЭВМ. В сб.: Проблемы программирования, Новосибирск, В.и., 1976, с. 63-80.

  94. Непомнящий В.А., Рякин О. М. Прикладные методы верификации программ. М.: Радио и связь, 1988.

  95. Библиотека и архив академика Ершова https://www.iis.nsk.su/library/lib

  96. Фуксман А.Л. Технологические аспекты создания программных систем М.: Статистика, 1979. 184 с.

  97. ЦейтинГ.С. http://ipo.spb.ru/journal/index.php?authors/243/ Является ли математика частью информатики?http://cte.eltech.ru/ojs/index.php/kio/article/view/519/511, http://ipo.spb.ru/journal/index.php?article/438/ Спб. «Компьютерные инструменты в образовании», 1999 год, No 5.

  98. Тыугу Э.Х. ПРИЗ УТОПИСТ Тыугу Э.Х. Концептуальное программирование. М.: Наука, 1984. 255 с

  99. Константинов В.И., Черемных Н.А. Мемориальная библиотека А.П. Ершова: новые возможности // Наука в Сибири. 1994. N 41. С. 2.

  100. Черемных Н.А., Курляндчик Г.В. Библиотека и архив академика Ершова https://www.computer- museum.ru/books/n_mozaika/archiv.htm

  101. Замулин А.В. https://www.iis.nsk.su/person/zamulin/index

  102. Замулин А.В. Информационные системы и базы данных // Становление Новосибирской школы

    программирования. Мозаика воспоминаний. – Новосибирск: ИСИ СО РАН, 2001. – С. 114–116.

  103. ЕршовА. П., Шура-Бура М. Р. Становление программирования в СССР // Кибернетика

  104. Erschov A. P., Shura-Bura М. R. The Early Development of Programming in the USSR // A History of Computing in the Twentieth Century. Academic Press

  105. Ершов А.П. Алгоритмы на родине Аль-Хорезми 1980. https://www.iis.nsk.su/institute/press/scientific_pilgrimage

  106. Ершов А.П. О сущности трансляции. http://ershov.iis.nsk.su/ru/node/791861

  107. Ершов А.П. Смешанные вычисления: потенциальные приложения и проблемы исследования.- Тезисы докладов и сообщений. Всесоюзная конференция "Методы математической логики в проблемах искусственного интеллекта и систематическое программирование", ч.2, Вильнюс, 1980, с. 26-55

  108. Бульонков М.А. Смешанные вычисления в Новосибирске // Андрей Петрович Ершов – ученый и человек / отв. ред. А.Г. Марчук. – Новосибирск: Изд-во СО РАН, 2006. – С. 120– – (Наука Сибири в лицах)

  109. https://www.computer-museum.ru/books/n_ershov/2_ershov_sv.htm

  110. Смешанные вычисления в Новосибирске М. А. Бульонков

  111. Ершов А.П. Смешанные вычисления// В мире науки. 1984. No 6. C. 28-42.

  112. Бульонков М. А., Ершов А. П. Как специальные конструкции трансляции могут порождаться универсальными процессами смешанных вычислений// Вычислительные системы. – Новосибирск,1986. Вып. 116: Прикладная логика. С. 47-66.

  113. Ершов А. П. О проекциях Футамуры. http://ershov.iis.nsk.su/ru/node/783683

  114. Климов А.В. «Почему анализ и преобразования программ (метавычисления) никак не идут в широкую практику программирования?» Андрей Валентинович Климов - один из разработчиков РЕФАЛаhttps://www.youtube.com/watch?v=EwBjs55FzZw

  115. Ершов А. П. Персональная ВМ – предок млекопитающих в динозавровом мире ВЦКП. 1983 http://ershov.iis.nsk.su/ru/node/787042 "Диалог-82-Микро" в Пущино.

  116. Ершов А. П. Как перестроиться программистам// Микропроцессорные средства и системы. 1987. No 5. С.2.

  117. Ершов А. П. Автоматизация работы служащих. http://ershov.iis.nsk.su/ru/node/786752

  118. Берс А.А., Поляков В.Г. Системы и средства электронной подготовки изданий. Проект САПФИРhttps://www.iis.nsk.su/memories/baehrs_polyakov_sapphir

  119. Берс А.А., Поляков В.Г. Проект РУБИН https://www.iis.nsk.su/memories/baehrs_polyakov_rubin

  120. Берс А.А., Поляков В.Г. Системный анализ производственных процессов по выпуску газеты "Правда"http://sorucom.karelia.ru/view_thesis.html?id=290&user_id=7

  121. Берс А.А. Рабочая станция Мрамор https://www.computer-museum.ru/histussr/mramor.htm

  122. Машинный фонд русскогоя зыка (Внешняя постановка вопроса), Вопр. языкознания. 1985. No 2. С. 51– 54. http://ershov.iis.nsk.su/ru/node/776177

  123. Машинный фонд русского языка: внешняя постановка. // Машинный фонд русского языка: идеи и суждения. М.: Наука, 1986.

  124. Звенигородский Г.А. Первые уроки программирования / Под редакцией А.П. Ершова. – М.: Наука, Главная редакция физико-математической литературы, 1985. 208 с. (Библиотечка «Квант». Выпуск41).

  125. Робик. https://dic.academic.ru/dic.nsf/ruwiki/144299

  126. Налимов Е.В. Язык Робик и его реализация в системе «Школьница». // Проблемы школьной информатики. Новосибирск: ВЦ СО АН СССР, 1986. С. 46-51.

  127. Язык программирования Рапира / Бараз Л.С., Боровиков Е.В., Глаголева Н.Г. и др. (Препринт / АН СССР. Сиб. отд-е. ВЦ, No 767). Новосибирск : ВЦ СО АН СССР, 1987. На англ. яз.: The Rapira programming language / Baraz L.S., Borovikov E.V., Glagoleva N.G. et al (Preprint / Siberian div. of theUSSR Acad. of sciences, Inst. of informatics systems, No 4). Novosibirsk : Inst. of informatics systems, 1990.

  128. Рапира. https://dic.academic.ru/dic.nsf/ruwiki/47350

  129. Колонка редактора. http://www.wdigest.ru/mpss_editorial.htm МПСС 1985, No1

  130. Колонка редактора. http://ershov.iis.nsk.su/ru/archive/subgroup?nid=763942&nid_1=763942

  131. Ершов А.П. Программирование – вторая грамотность http://ershov.iis.nsk.su/ru/second_literacy/article

  132. Ершов А.П., Монахов В.М., Бешенков С.А. Часть первая // Основы информатики и вычислительной техники: Пробное учебное пособие для средних учебных заведений. В 2-х частях / Под редакцией А.П. Ершова и В.М. Монахова. М.: Просвещение, 1985. 96 с.

  133. Ершов А.П. Устройство и принцип работы ЭВМ: Урок для учителя Устройство и принцип работы ЭВМ: Урок для учителя// Учительская газета. 1985. 12 мая. Человек и машина. Сб. публ. выступл. М.: Знание, 1985 http://ershov.iis.nsk.su/ru/node/802594

  134. Ершов А.П. Изучение основ информатики и вычислительной техники. Ч. 1 1985 Ч. 2., 1986

  135. Ершов А.П. Информатика 9–10: Учебно-методические материалы. Ч.1, Ч.2 1987

  136. Городняя Л.В. Откуда берутся хорошие программисты // Становление Но-восибирской школы программирования. Мозаика воспоминаний. – Новосибирск: ИСИ СО РАН, 2001. С. 117–123.

  137. ЛШЮП (ИСИ СО РАН) https://ssyp.ru/

  138. Ершов А.П. Концепция использования средств вычислительной техники в сфере образования (информатизация образования). Новосибирск, 1990. 58 с. (Препр. /АН СССР. Сиб. отд-ние. ВЦ; No888).



Об авторе: Институт систем информатики им. А.П Ершова СО РАН,
Россия, Новосибирск
gorod@iis.nsk.su
Материалы международной конференции Sorucom 2020
Помещена в музей с разрешения автора 21 августа 2021