Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

История развития программирования в России

Содержание:

ВВЕДЕНИЕ

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

Во-первых, смежные вопросы, в частности развитие вычислительного оборудования и численных методов, за тронуты очень кратко.

Во-вторых, авторы работали в основном с публикациями и в меньшей степени с архивными материалами.

В-третьих, авторы сознательно ограничили себя первыми пятнадцатью годами развития программирования, обрывая повествование 1963-им годом, когда заработали первые трансляторы с АЛГОЛА 60.

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

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

В ходе изложения авторам придется ссылаться и на собственные работы. В таких случаях авторы будут прибегать к помощи идентификаторов АЕ и ШБ соответственно, скрываясь за общим именем "авторы", когда речь будет идти о данной работе.

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

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

Авторы будут благодарны каждому, кто обратит внимание на возможные упущения или неточности.

ПРЕДЫСТОРИЯ (1946-1949 гг.)

Вторая мировая война приостановила в СССР ряд научных исследований и проектов в области создания, как тогда говорили, математической техники. В то же время в нашей стране существовала "непрерываемая традиция", идущая от П.Л. Чебышева, научного интереса и внимательного отношения к прикладной математике и методам вычислений. В годы становления советской науки эта традиция получила развитие в научной и общественной деятельности академика А.Н. Крылова. Потребности военного времени содействовали выполнению серии прикладных работ, требовавших разработки численных методов и способов автоматизации вычислений, прежде всего для управления стрельбой. Потребности радиолокации и радиосвязи создали предпосылки для освоения высокочастотной импульсной техники.

Это противоречивое положение было выразительно отражено в тематическом выпуске журнала "Успехи математических наук" (т.1, N 5, 6, М., 1946), который начал регулярно издаваться с первого послевоенного года [1]. Выпуск содержал две обзорные оригинальные статьи, подготовленные еще до войны, и две переводные статьи, одна из которых ("Дифференциальный анализатор Буша") оказала заметное влияние на специалистов. Никакого намека ни на электронную вычислительную технику, ни на концепцию автоматических вычислительных машин с программным управлением этот выпуск не содержал. Однако во вступительной статье Н.Е. Кобринского и Л.А. Люстерника был высказан ряд проницательных суждений о роли вычислительной техники. Приведем некоторые выдержки.

"... Современная вычислительная практика весьма разнообразна, и соответственно этому весьма разнообразны и технические средства, в ней применяемые.

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

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

Наконец, имеется область "кабинетных вычислений", квалифицированных и трудоемких расчетов, связанных с решением научных и сложных технических задач.

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

Актуальные потребности практики и науки привели к созданию новой отрасли техники -- конструированию и производству "счетно-решающих устройств", т. е. приборов и машин для решения математических задач.

Появление этих технических средств ставит по-новому задачи вычислительной математики.

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

Этот дальновидный взгляд на вычислительную технику сложился в стенах Математического института АН СССР, который был не только средоточием первоклассных исследований в области теоретической математики, но и был непосредственно причастен к широкому кругу проблем прикладной математики, в частности в связи с выполняемыми Академией наук государственными заданиями, связанными с созданием новой техники и требующими больших прикладных исследований и расчетов. Этой стороной деятельности МИАНа руководил академик М.В. Келдыш, в то время заместитель директора института академика И.М. Виноградова. Непосредственные вычислительные и машинные аспекты прикладной математики изучались тогда в отделе приближенных вычислений, который возглавлял член-корр. АН СССР Л.А. Люстерник. Ряд важных прикладных расчетов был поставлен и осуществлен под руководством К.А. Семендяева.

Информация о программно-управляемой автоматической цифровой вычислительной машине пришла в СССР из США. В 1947 г. М.Л. Быховский опубликовал в журнале "Успехи математических наук" короткую информационную заметку [2], в которой на основе публикаций [3]--[5] сообщил о машинах МАРК 1 и ЭНИАК с коммутированной программой. Аналогичная более поздняя статья Хартри [6] и более подробное описание машины МАРК 1 [7] появились в русском переводе в 1948 г. [8], [9]. В заметке [2] не было каких бы то ни было оценочных комментариев к материалу, а ее название скорее подчеркивало преемственность в развитии счетно-аналитических машин, нежели выработку новой концепции автоматических вычислений.

Материалы по логической структуре электронных вычислительных цифровых машин с хранимой программой [10]--[13], которые за рубежом принято считать основополагающими в то время (а в оригинальных изданиях и сейчас), были недоступны в СССР. В течение 1947-1948 гг. за рубежом появилось изрядное число публикаций "второго эшелона", содержащих большое количество научной информации. С некоторым опозданием в СССР стали доступны труды известного симпозиума 1947 г. в Гарвардском университете [14]. На основе этих материалов в 1949 г. появилась обширная статья М.Л. Быховского "Основы электронных математических машин дискретного счета" [15]. Этот деловой обзор содержал главным образом описание инженерных принципов реализации отдельных узлов ЭВМ и предвосхитил большую часть информации, содержащейся в первом монографическом описании ЭВМ "Быстродействующие вычислительные машины", подготовленном в США в 1950 г. [16] и изданном в русском переводе в 1952 г. [17].

Указанная монография вместе с небольшим разделом (глава V) книги Ф. Муррея "Теория математических машин" [18], вышедшей в русском переводе в 1949 г. [19] и обзорной статьей Г. Рутисхаузера, А. Шпайзера и Э. Штифеля [20], также переведенной на русский язык и изданной в 1952 г. [21], по-видимому, замыкают ту совокупность сведений о зарубежных работах, которые были доступны советским специалистам в это время.

Реальное начало работ в области электронной вычислительной техники в СССР относится к 1946 г., когда в Киеве академик АН УССР С.А. Лебедев начал инициативные исследования по созданию электронных вычислительных машин и программ. Большую поддержку инициативе С.А. Лебедева оказал директор Института математики АН УССР академик М.А. Лаврентьев.

С его помощью в Феофании (под Киевом) в первые послевоенные годы было восстановлено здание, в котором разместилась лаборатория вычислительной техники Института электротехники АН УССР, возглавляемая С.А. Лебедевым, ставшим директором этого института в мае 1947 года. Именно здесь в конце 1950 года заработала "первая в СССР и континентальной Европе" [22] ЭВМ, получившая название МЭСМ (Малая Электронная Счетная Машина). В ней уже были реализованы основные принципы построения ЭВМ с хранимой программой, названные впоследствии за рубежом принципами фон Неймана. МЭСМ предшествовали английская ЭДСАК (1949 г.) и американские СЕАК и БИНАК (1950 г.) машины, соответствующие указанным принципам. Однако отсутствие в то время сведений об этих разработках исключает возможность их влияния на создание машины МЭСМ.

В 1948 г. был открыт Институт точной механики и вычислительной техники АН СССР. Его возглавил известный специалист в области машин и механизмов академии Н.Г. Бруевич. Институт был создан на основе существовавших в разных организациях АН научных групп и подразделений, имевших отношение к проблеме механизации вычислений и создания математических инструментов.

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

ФОРМИРОВАНИЕ НАЧАЛЬНОГО ЗНАНИЯ (1950-1953 гг.)

Уже первые эксперименты на машине МЭСМ показали, что подготовка задачи к решению на машине является самостоятельной проблемой, требующей специального рассмотрения. Эти вопросы стали, в частности, предметом систематического изучения на семинаре по программированию, организованном в 1950 г. в ИТМиВТ под руководством Л.А. Люстерника. Работа семинара протекала параллель, но с проектированием машины БЭСМ и завершилась написанием одной из первых в мире монографий, специально посвященной вопросам программирования [23].

В качестве источников, имеющих наиболее прямое отношение к предмету исследования, в [23] указаны книга Муррея [19], монография под редакцией Стиффлера [16] и обзор Рутисхаузера, Шпайзера и Штифеля [20].

В книге Муррея речь шла в основном о старой технике, но в небольшой главе, посвященной ЭВМ, был приведен со ссылкой на [13] выразительный пример программирования циклического процесса со счетом индекса для организации заданного числа повторений и с использованием текущей разности для организации итерационного цикла.

В [16] довольно подробно рассматривались арифметические основы ЭВМ, давалось общее описание принципа программного управления и была приведена одноадресная система команд со ссылкой на [12].

Обзор [20] во многом повторял содержание работы [16], но в нем были изложены также некоторые главы еще одной основополагающей работы Голдстайна и фон Неймана [24] (понятие блок-схемы как средства для наглядного представления ветвей и циклов программы, понятие пара метра цикла и зависимости адресов от параметра); рассматривались различные системы команд (от одно- до четырехадресных систем) и впервые упоминалось об индекс-регистре (а-регистр в МАРКС III). Не менее важной была, и попытка авторов обзора систематизировать процесс программирования в целом и обратить внимание на использование самой ЭВМ для упрощения программирования.

После анализа источников (к ним еще надо было бы добавить некоторые журнальные статьи, например [25], в связи с использованием подпрограмм в машине ЭДСАК) вернемся к рассмотрению книги "Программирование для быстродействующих электронных счетных машин".

Глава I. Цифровые машины и автоматизация вычислений (21 стр.). Определение цифровых машин, системы счисления, логическая структура алгоритмов (последовательные вычисления, циклы, разветвления), счетно-аналитические машины, автоматические вычислительные машины, принцип программного управления, оперативная и внешняя памяти.

Глава II. Операции над числами в цифровых машинах (94 стр.). Изображение чисел, фиксированная и плавающая запятая, операции над числами и двоичными кодами, особенности действий над конечноразрядными числами, схемы умножения, деления и извлечения квадратного корня.

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

Глава III. Некоторые стандартные процессы при автоматических вычислениях (24 стр.). Конспективное описание схемы вычислений и правил арифметизации некоторых часто встречающихся алгоритмов (сумма произведений, перевод чисел из одной системы в другую, арифметика с двойной точностью, вычисление многочленов, последовательные суммы и разности, решение уравнения методом сужения интервала, вычисление функций с помощью рядов, непрерывных дробей и итерационных методов, логические методы контроля вычислений, включая контроль по четности и код Хэмминга.

Глава IV. Программирование решений математических задач (86 стр.). Глава начинается с повторения принципа программного управления и свойств команд, адреса, кода операции, адресности. При сравнении одно- и трехадресных кодов как наиболее предпочтительных отмечаются их принципиальная эквивалентность, большее удобство трехадресного кода и большая информационная экономичность одноадресного. Впервые формулируется известное прикидочное правило: число команд в одноадресной программе примерно вдвое больше числа команд в трехадресной программе. Дается пример простейшей программы (комплексного деления) в трехадресном и одноадресном (в символике ЭДСАКа) кодах. Подробно описываются команды условного и безусловного переходов в разных вариантах адресности команд. На примере решения квадратных и кубических уравнений составляются программы, содержащие разветвления. Подробно описываются цифровое кодирование команд и связанные с ним способы преобразования как команды в целом, так и отдельных ее частей (в трехадресном коде). Выделяются случаи инициализации команды, аддитивного изменения адреса, формирования адреса, "реставрации" команды к начальному виду. Даются система команд абстрактной трехадресной машины, обозначения символического кодирования, дисциплина распределения памяти. Авторы установили многолетнюю традицию стилистики написания машинных трехадресных программ и использования абстрактной машины для описания принципов программирования. На примерах демонстрируется управление циклом с помощью сравнения по переменной команде и по счетчику. Впервые формулируется общий принцип программирования цикла (с ненулевым числом повторений).

Специальный параграф обсуждает способы составления сложных программ из более простых. Способы вызова подпрограмм обсуждаются неподробно и содержат только два приема: формирование возврата на главную программу перед переходом к подпрограмме, находящейся на известном фиксированном месте, и использование двух (центрального и местного) управлений. Для больших задач рекомендуются разбиение задачи на содержательные подзадачи и затем составление блок-схемы, состоящей из подзадач. Выделяется систематическая (но не автоматизированная) процедура настройки куска программы помосту. Описывается прием использования разными ветвями вычислений общих кусков, который сейчас можно было бы назвать запроцедурированием. Глава завершается примером программы численного решения уравнений баллистики, а также 16 программами решения стандартных алгоритмов из предыдущей главы.

Глава V. Программы для решения некоторых математических задач (85 стр.). Глава содержит 17 содержательных программ решения следующих задач: -- преобразования алгебраических многочленов, решение системы линейных уравнений, интегрирование обыкновенных дифференциальных уравнений методом Рунге-Кутта, интегрирование уравнений внешней баллистики методом Адамса, вычисление таблицы бессолевых функций. Весьма полезным оказались подробные пояснения к программам, описывающие большое количество технических программистских приемов (представление перестановок, взаимодействие команд управления во вложенных циклах, разные способы контроля числа повторений, униформизация вычислений для увеличения степени цикличности, повышение скорости за счет расхода памяти и наоборот и т. п.).

В 1952 г. в СССР появилась также известная книга М. Уилкса, Д. Уилера и С. Гилла [26] (в русском переводе издана в 1953 г. [27]), которая существенно дополнила опыт программирования, отраженный в [23]. Книга, в частности, убедительно показала, насколько более эффективным становится использование "одетой" машины, и явилась по существу первым описанием интегрированной системы программного обеспечения, являющейся одновременно и замкнутой в смысле полноты (тесты оборудования, как сейчас говорят, экстракоды 1-го уровня, математическая библиотека, служебные программы ввода-вывода, средства отладки, средства загрузки и ассемблирования, небольшие пакеты прикладных программ), и открытой в смысле способности к росту, -- все это пронизано единым стилем работы на машине, находящейся в гармоническом соответствии со скромными возможностями оборудования.

Итак, можно констатировать, что к началу интенсивного использования первых советских ЭВМ программисты были подготовлены сравнительно неплохо.

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

В решение этой проблемы очень важный вклад внесли академики А.А. Дородницын, М.А. Лаврентьев, М.В. Келдыш и С.Л. Соболев, возглавлявшие работы, связанные с приложениями математики в различных областях техники, которые не только должным образом на правили возглавляемые ими коллективы, но и смогли убедить заинтересованные ведомства в правильности ориентации на универсальные электронные вычислительные машины-главное звено в развитии вычислительной техники.

Работа над первой большой ЭВМ под руководством С.А. Лебедева в ИТМиВТ велась интенсивно и с энтузиазмом. Проектная группа состояла главным образом из студентов-выпускников Московского энергетического института. Среди них, в частности, были В.С. Бурцев -- нынешний директор ИТМиВТ и В.А. Мельников -- впоследствии ведущий конструктор БЭСМ-6. Со стороны математиков в выработке системы команд участвовал В.М. Курочкин. В 1951 г. БЭСМ была изготовлена, а в 1952 г. началась ее опытная эксплуатация. Машина была спроектирована в расчете на оперативную память на трубках Вильямса, но, поскольку они были сначала недоступны, в качестве первого варианта памяти использовались ртутные линии задержки (до 1955 г.). Часть быстрой памяти была сделана только читающей и сконструирована в виде серии гнезд с пружинными контактами и прижимными крышками, очень напоминающими вафельницы. "Вафельница" содержала одну 45-колонную перфокарту, в каждой строке которой было по одной команде. Все оборудование, кроме трубок и электроники, было самодельным, включая ввод с перфоленты, двухдорожечный магнитофон, барабан и ртутную память. Машина по тем временам была весьма быстродействующей (см. табл. 1).

БЭСМ имела трехадресную систему команд. У нее было два счетчика команд -- центральный и местный. Возвратная передача управления и возврат осуществлялись безусловным переходом с переключением на местное управление и обратным переключением на центральное управление. Местное управление использовалось также для выполнения операций обмена.

В этот же период в конструкторском бюро Министерства приборостроения и средств автоматизации СССР, которым руководил М.А. Лесечко, началось проектирование другой ЭВМ, получившей название "Стрела" и предназначенной для серийного изготовления на Московском заводе счетно-аналитических машин. Главным конструктором машины был Ю.Я. Базилевский, а одним из его ведущих сотрудников -- Б.И. Рамеев, в дальнейшем создатель серии машин "Урал". "Стрела" не имела магнитного барабана, но для нее были специально спроектированы 45-дорожечные магнитные ленты. Машина имела весьма удобную систему команд. В частности, каждая счетная команда вырабатывала логическое значение (признак , определявшее работу команд условного перехода. Другой особенностью было наличие "групповых операций", выполняющих покомпонентные действия с векторными массивами. В состав машины входили небольшая односторонняя память для констант и специальная односторонняя память, имевшая свое отдельное управление для встроенной библиотеки подпрограмм. Машина была снабжена достаточно удобными средствами ввода-вывода.

Первая "Стрела" была установлена в Отделении прикладной математики МИАНа, где в конце 1953 года началась ее опытная, а вскоре и производственная эксплуатация.

Анализируя архитектурные особенности двух наших первых крупных ЭВМ, любопытно отметить, что оба коллектива разработчиков находились в то время в плену ложной альтернативы -- скорость или удобство. Добившиеся высокой скорости позволяли себе не уделять должного внимания удобству работы, а не сумевшие обеспечить высокую скорость оправдывали этот недостаток наличием удобства.

Из пионеров советской вычислительной техники необходимо отметить также заведующего лабораторией электросистем Энергетического института АН СССР члена-корреспондента Академии наук И.С. Брука. Он приступил к работе над ЭВМ в 1951 г. и построил небольшой макет, известный под названием М-1. После накопления первого опыта и формирования начального коллектива под его руководством в течение 1962 г. была спроектирована машина М-2. Одним из ведущих разработчиков был М.А. Карпов, который впоследствии внес большой вклад в теорию и практику конструирования арифметических устройств. М-2 положила начало серии машин среднего класса, причем одним из основных принципов ее конструирования была экономичность. В этом отношении конструкция машины М-2 была весьма удачной и создала долголетнюю традицию проектирования учениками И.С. Брука не одной серии недорогих и массовых ЭВМ. Среди учеников следует в первую очередь назвать Г.Л. Лопато, впоследствии главного конструктора серии машин "Минск".

ПЕРВЫЙ ОПЫТ И ПЕРВЫЕ НАУЧНЫЕ РЕЗУЛЬТАТЫ НА ПЕРВОЙ КОНФЕРЕНЦИИ (1954-1956 гг.)

Создание в СССР первых ЭВМ было расценено как весьма важное научно-техническое событие. С.А. Лебедев был избран в 1953 г. действительным членом АН СССР по специальности вычислительная техника, а Ю.Я. Базилевский -- удостоен звания Героя Социалистического Труда. В Академии наук и в Министерстве высшего образования был осуществлен ряд организационных мер, направленных на формирование и укрепление коллективов, связанных с производством и использованием новой вычислительной техники.

Работы по прикладной математике в МИАНе были сконцентрированы под руководством М.В. Келдыша в Отделении прикладной математики, ставшим впоследствии Институтом прикладной математики. В составе Отделения в 1953 г. был организован первый в СССР отдел программирования, который в течение первого года возглавлял А.А. Ляпунов, а с 1954 г. и по настоящее время -- ШБ.

Годом раньше в Московском государственном университете была реорганизована кафедра вычислительной математики для обучения прикладных математиков, подготовленных для работы с ЭВМ. Заведующим кафедрой стал академик С.Л. Соболев.

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

В 1955 г. был создан Вычислительный центр Академии наук СССР, предназначенный для ведения научной работы в области машинной математики и для предоставления открытого вычислительного обслуживания другим организациям Академии наук. Его директором стал академик А.А. Дородницын.

В 1952 г. началась работа в области программирования в отделе приближенных вычислений Ленинградского отделения МИАНа (ЛОМИ), который возглавлял Л.В. Канторович, уже известный своими работами по функциональному анализу и пионерскими исследованиями в области линейного программирования.

После переезда С.А. Лебедева в Москву сотрудники его лаборатории были переведены по его инициативе в Институт математики АН УССР. Директор института Б.В. Гнеденко создал вычислительную лабораторию. Через несколько лет эту лабораторию возглавил В.М. Глушков, незадолго до этого защитивший докторскую диссертацию по теоретической алгебре. Кроме математического, Глушков имел также инженерное электротехническое образование. В его проницательном представлении область вычислительной техники давала благоприятную возможность для реализации своих знаний. На базе вычислительной лаборатории в 1957 г. был создан Вычислительный центр Академии наук УССР. ставший впоследствии Институтом кибернетики АН УССР.

В 1953 г. М.А. Лаврентьев передал пост директора ИТМиВТ С.А. Лебедеву. При образовании Вычислительного центра значительная часть сотрудников-математиков была переведена из института в ВЦ.

В 1955 г. в МГУ был организован Вычислительный центр, развернувший научную и учебную работу на ЭВМ М-2. Коллектив И.С. Брука в 1956 г. выделился из состава Энергетического института АН СССР и образовал Лабораторию управляющих машин и систем АН СССР. ставшую впоследствии Институтом электронных управляющих машин (ИНЭУМ).

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

По тем масштабам это была в высшей степени представительная и обширная конференция. На ней присутствовало свыше тысячи участников и было сделано 75 докладов [29]. Конференция проходила в обстановке большого политического и нравственного подъема, вызванного историческим XX съездом КПСС. На этом съезде, в частности. при определении программы развития народного хозяйства в шестой пятилетке 1956-1959 гг. было сказано ([30], стр. 447-448):

"Всемерно развивать радиотехническую и приборостроительную промышленность. Увеличить за пятилетие изготовление счетных и счетно-аналитических машин -- в 4,5 раза Усилить работы по конструированию и производству автоматических быстродействующих машин для решения сложных математических задач и счетноматематических машин для автоматизации управления производственными процессами Широко развернуть научно-исследовательские работы по полупроводниковым приборам и расширить их практическое применение".

Этот период сопровождался преодолением догматического отношения к идеям кибернетики, единства законов управления и переработки информации и первыми экспериментами применения ЭВМ в моделировании интеллектуальной деятельности.

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

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

С.А. Лебедев -- "Быстродействующие универсальные вычислительные машины" (общая сводка первых советских ЭВМ дана в табл. 1);

Ю.Я. Базилевский -- "Специализированные машины и пути их развития";

В.Б. Ушатов -- "Моделирующие установки и тенденции их развития" ([28], Пленарные заседания, 31-43. 61-132).

С.А. Лебедев следующим образом идентифицировал основные направления развития универсальных математических машин:

1) повышение быстродействия;

2) увеличение емкости памяти;

3) повышение надежности;

4) упрощение математической и технической эксплуатации.

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

Пленарный доклад А.А. Дородницына "Решение математических и логических задач на быстродействующих электронных счетных машинах" ([28], Пленарные заседания, 44-52), посвященный главным образом решению уравнений с частными производными, содержал ряд постановок и прогнозов, связанных с разработкой и использованием ЭВМ:

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

Это была первая постановка проблемы, приведшая через восемь лет к появлению БЭСМ-6.

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

Операторный метод А.А. Ляпунова

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

А.А. Ляпунов проанализировал программирование в целом и выделил ряд его фундаментальных концепций. Процесс выполнения программы он рассмотрел как дискретную последовательность единиц действия (операторов), извлекаемых на основе правил управления из текста программы. Важной компонентой теории стала классификация операторов, введенная А.А. Ляпуновым: арифметические операторы (операторы присваивания), действующие на данные, логические операторы (как вычисление логических отношений, так и передачи управления), а также операторы модификации, действующие на другие операторы. Операторы модификации основывались на идее зависимости операторов от некоторого параметра (обычно, целочисленная переменная) и содержали в себе операторы формирования (инициализации), переадресации (модификация в соответствии с приращением параметра) и восстановления начального вида оператора. Текст программы представлялся состоящим из двух частей: схемы программы -- символьного представления операторов, указывающего передачи управления и классификацию операторов, и спецификации операторов, указывающей их конкретное содержание. Это расчленение текста программы отражало также два этапа программирования: общее планирование алгоритма, находившее свое отражение в построении схемы программы и содержательной спецификации операторов (творческая часть), и затем систематическую реализацию отдельных операторов средствами машинного языка (рутинная, формализуемая часть). Подчеркивалась также возможность систематических преобразований схемы программы, направленных на ее улучшение. Эта методология, которую А.И. Китов назвал операторным методом программирования [33], была описана А.А. Ляпуновым в первом в СССР учебном курсе программирования, прочитанным им в 1952-1953 гг. в МГУ под названием "Принципы программирования", и в конспективной форме была представлена докладом на конференции ([28], ч. III, стр. 5-8). сделанным совместно с Ю.И. Яновым.

Этот метод привел к созданию теории схем программ и к первым в СССР трансляторам, а также способствовал созданию многолетнего стиля публикаций алгоритмов, который сохранился в некоторых работах до настоящего времени [34].

Первые трансляторы

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

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

Эти трансляторы были представлены на конференции в докладах С.С. Камынина, Э.З. Любимского и АЕ ([28], ч. III. 9-29).

Крупноблочное программирование

Л.В. Канторович, обсуждая проблемы программирования с группой выпускников Ленинградского университета 1953-1954 гг., образовавших программистское ядро ЛОМИ, высказал ряд глубоких идей: обратил внимание на роль информационных связей в представлении программы, в частности изображения выражения как дерева; ввел в рассмотрение составные данные как объект программы и определил понятие дескриптора (соответствующие правила композиции составных объектов из простых получили название "геометрические операции"). Процесс выполнения программного комплекса, представляющего собой информационную сеть (схему) отдельных модулей, Л.В. Канторович рассматривал как функционирование некоторой сверхпрограммы, которая определяет выполнение модулей на основе анализа информационных и управляющих связей схемы. Некоторые положения крупноблочного программирования позднее были переоткрыты или заново осмыслены на более высоком уровне при разработке систем работы со структурными файлами и в том, что сейчас называют модульным программированием.

Технология программирования и решения задач на ЭВМ

Вопросы технологии программирования и решения задач на ЭВМ обсуждались главным образом в докладе ШБ ([28], Пленарные заседания, 53-60). Уже первые годы работы на ЭВМ показали, что "истинная производительность машины должна определяться числом фактически решенных на машине задач, временем, необходимым для реализации решения каждой задачи, и количеством людей, занятых на подготовке и проведении задач и технической эксплуатации машины".

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

К 1956 г. в ОПМ МИАНа постепенно сложились технологические принципы организации счета задач. Главной фигурой у машины стал оператор, формирующий и пропускающий на основе формализованных инструкций пакет за дач в отсутствие их авторов. Проблема "изгнания" программистов из машинного зала оказалась не простой. Стали различаться счетные и отладочные запуски, срочные и дежурные задачи. В 1955 г. появились первые программы контроля программ: интерпретирующая прокрутка с выдачей отладочной информации, "посмертные" выдачи, программы печати границ "линейных участков" программы и т. п.

В это же время в программировании сложилась по нынешним понятиям парадоксальная ситуация, когда автоматизация программирования с помощью трансляторов опередила в своем развитии другие методы, в частности методы символического кодирования и использования библиотек программ. В докладе ШБ была поставлена задача более гармоничного объединения методов и расширения понятия "автоматизация программирования".

Следует отметить, что в целом 1956 год был годом большого роста популярности вычислительного дела. В июне вышла первая в СССР книга учебного характера по ЭВМ [33]. В июне-июле 1956 года на III Всесоюзном математическом съезде программисты впервые выступили перед математической аудиторией с докладами о своих работах [35]. Это были в основном повторения докладов мартовской конференции. Кульминацией выхода вычислительной науки и практики на общественную арену была специальная сессия Академии наук СССР, состоявшаяся в октябре 1956 года [36]. На этой сессии выступили все ведущие ученые, причастные к рождению и первым годам развития ЭВМ в СССР. Это было единственное в своем роде собрание, когда в строгий стиль академических заседаний вплелись элементы зрелища: доклад о машине БЭСМ сопровождался демонстрацией огромной электрофицированной динамической схемы, поясняющей принцип программного управления, а во время доклада по машинному переводу была установлена прямая телетайпная связь с машиной для не посредственной демонстрации выдачи перевода заданного в этот же момент текста.

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

НАКОПЛЕНИЕ ОПЫТА И РАЗВИТИЕ ЗНАНИЙ (1956-1959 гг.)

Итак, практикующие программисты и студенты имели в 1956 г. в своем распоряжении пять методов программирования конкретных задач:

1) операторный метод с использованием программирующих программ [28]; 2) метод библиотечных программ [27]; 3) символическое кодирование (изложенное впервые А.И. Китовым [33] со ссылкой на работы, выполненные для ИБМ-701 [37]); 4) крупноблочное программирование по Л.В. Канторовичу [28]; 5) "ручное" программирование с 8- или 16-ричным кодированием машинных программ и с использованием блок-схем или операторных логических схем в качестве неформального подспорья.

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

С этой точки зрения было важно расширить фронт работ и, в частности, пережить опыт разработки и использования библиотеки стандартных подпрограмм. Последнее направление получило особое развитие в Вычислительном центре МГУ, где в итоге интенсивной двухлетней работы была создана развитая библиотека подпрограмм, основная часть которой была опубликована в 1958 г. в монографии [38]. Вот как авторы объяснили свои цели: " Одним из путей автоматизации программирования является путь использования библиотеки стандартных подпрограмм. Сущность этого метода заключается в том, что для наиболее часто встречающихся алгоритмов раз и навсегда тщательно составляются подпрограммы, которые затем могут быть использованы в качестве готовых частей программы при решении любой конкретной задачи, где требуется реализация соответствующих алгоритмов. Это дает существенную экономию труда программиста.

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

Полезным качеством книги было включение в текст очерка об основных понятиях и приемах программирования, собравшего воедино и объяснившего значительную часть накопившейся к тому времени программистской терминологии. Это была также первая книга, в которой повсеместно использовались ляпуновские схемы программ для описания логической структуры подпрограмм.

1958 год вообще был урожайным на публикации по программированию. В издательстве АН СССР вышло описание транслятора ЦП БЭСМ [39], которое содержало изложение операторного метода, описание входного языка и основных алгоритмов трансляции, а также подробные блок-схемы транслятора.

В этом же году вышел первый выпуск известной "красной серии", основанной А.А. Ляпуновым, под названием "Проблемы кибернетики". В этой серии были опубликованы, в частности, статьи, содержащие полное описание транслятора ПП-2 ([42]. п. 2-6),а также изложение работы А.А. Ляпунова, приведшей к операторному методу. Эта работа была выполнена А.А. Ляпуновым в 1952-1953 гг. ([42], п. 1).

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

Группа сотрудников Вычислительного центра разработала транслятор ППС для ЭВМ "Стрела-З" [40], [41], более совершенный, чем транслятор ПП БЭСМ (см. табл. 2. п. VIII). В этом трансляторе, в частности, были введены более естественные обозначения для операторов циклов и для условий в логических операторах. Имелась возможность в весьма суженных пределах задавать описания процедур-функций при условии, что телом процедуры являлось выражение или машинная программа.

Когда в 1956 г. ЭВМ "Стрела-4" появилась в Вычислительном центре МГУ. там уже сложилась методика программирования на М-2 (обсуждавшаяся авторами в начале этого раздела). Ее естественным развитием стала концепция интегрированной системы автоматизации программирования, в которой транслятор был бы лишь одной из компонент. Таким образом, кроме транслятора, разработанного под руководством Н.П. Трифонова, система содержала библиотеку стандартных подпрограмм, разработанную Е.А. Жоголевым "составляющую программу", представляющую собой комбинацию простого ассемблера с загрузчиком, и серию отладочных программ. Система автоматизации программирования была подробно описана в сборнике, вышедшем в 1961 г. [43].

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

Выходом транслятора был стандартный модуль загрузки. Входной язык транслятора во многом следовал стилю ПП-2, хотя уже не требовал строгого разделения на схему программы и на спецификацию операторов. В трансляторе был реализован в некотором объеме аппарат макроопределений, в котором тело макроса обозначило некоторую "подсхему" задачи, подставляемую предпроцессором на место сокращенного обозначения подсхемы. Таким аппаратом в трансляторе реализовывались операторы цикла, которые во входном языке трактовались как "обобщенные операторы", т. е. сводимые к базисным.

В это время ШБ заинтересовал другой способ автоматизации использования стандартных подпрограмм, который не требовал бы от программиста статического ассемблирования, так что подпрограмма вызывалась бы из библиотеки и настраивалась по месту при первом обращении к ней при выполнении программы. Это требовало со здания административной системы, находящейся в памяти ЭВМ в процессе решения задачи. Сравнительно малые объемы памяти ЭВМ требовали весьма экономного проектирования, а также решения определенных проблем резидентации библиотеки и создания некоторой тактики выбрасывания подпрограмм при переполнении рабочего поля. Такие экономичные решения удалось найти, и второй вариант интерпретирующей системы (ИС-2) стал основным способом использования подпрограмм в новой ЭВМ М-20, созданной в 1958 г. (см. ниже) [44], [45].

Элементы символического кодирования можно усмотреть уже в первых трансляторах ПП-2 и ПП БЭСМ. Текст программы на входном языке мог содержать так называемые "нестандартные операторы", представляющие собой фрагменты машинных программ, где в адресных частях могли находиться имена величин. Однако система символического кодирования, так сказать, в чистом виде появилась сравнительно поздно -- в 1957 г. для ЭВМ "Стрела" и в 1959 г. для М-20 ([44]. п. 4, [46]).

Начиная с 1955 года, сотрудниками Института математики АН УССР (Киев) В.С. Королюком и Е.Л. Ющенко был осуществлен важный цикл исследований, связанных с понятием адресного программирования. Введение в рассмотрение функции именования [47] и обратной функции разыменования позволило использовать на уровне абстрактных алгоритмов операции взятия значения по адресу, рассмотрения значения как адреса другого значения (косвенная адресация) и засылки значения по вычисленному адресу. Указанные функции были названы адресными. С их помощью точно вписываются такие аспекты управляющих действий в программах, как настройка программы на место в памяти, вычисляемый переход, индексная арифметика, переадресация и формирование адресов, например при вызове параметра подпрограммы по адресу [48], [49]. В результате получился своеобразный язык программирования с операторами присваивания, с выражениями, содержащими только скалярные величины, и условиями перехода по предикатам и значениям адресных функций. С некоторыми расширениями этот язык был положен в основу целого семейства трансляторов, разрабатывавшихся в течение ряда лет в Киеве под руководством заведующей отделом программирования сначала Вычислительного центра, а затем Института кибернетики АН УССР Е.Л. Ющенко [49]. В одной из первых версий такого транслятора, сделанного для ЭВМ "Киев" (первая крупная ЭВМ, спроектированная вслед за МЭСМ сотрудниками Вычислительного центра АН УССР в 1956-1958 гг.), впервые в качестве достоинства отмечалась однопроходная схема трансляции, а для записи выражений использовалась обратная польская запись [51].

В рамках крупноблочного программирования была создана серия экспериментальных прикладных программ, главным образом в лаборатории приближенных вычислений ЛОМИ. В этих системах получили определенное развитие принципы оперирования со структурными объектами: использование вырезок в работе с массивами ([52], п. 1), "геометрические операции" композиции массивов и теоретико-множественные операции над ними ([52], п. 2), а также были реализованы правила аналитических выкладок над некоторыми объектами анализа, в частности весьма развитая система для работы с полиномами ([52], п. 5).

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

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

В 1953 г. ШБ предложил метод прокрутки, реализованный тогда же для "Стрелы" Э.З. Любимским.

В ПП-2 В.С. Штаркман реализовал применяемый и сейчас метод экономии рабочих ячеек на линейном участке программы, основанный на возвратном просмотре команд этого участка ([42], п. 6).

В ПП-2 был также реализован метод вычисления логических выражений в виде последовательности логических проверок с передачей управления сразу, как только становится ясным значение еще недовычисленного выражения ([42], п. 3).

В ЦП БЭСМ был реализован предложенный Л.Н. Кормовым метод декомпозиции арифметических выражений в трехадресный код с учетом приоритета операций и с использованием стока (получившего название полупрограммы). Декомпозированное выражение представлялось в виде списочной структуры, когда в позиции адреса промежуточного результата ставилась ссылка на команду, вычисляющую этот результат [39]).

В ЦП БЭСМ была реализована универсальная система построения операторов цикла с рядом оптимизаций (контроль числа повторений по переменной команде, совмещение восстановления по внутреннему параметру с переадресацией по внешнему и т. д.) [39].

При программировании циклов в ПП БЭСМ применялся метод, получивший впоследствии название метода решающих таблиц. Имелось 12 способов реализации зависимости переменного адреса от параметра, -- выбор их проводился по таблице решений, входом в которую были значения четырех двоичных признаков [39], [49], [50].

В ПП-2 осуществлялась экономия совпадающих выражений в пределах выражения, а в ЦП БЭСМ-в пределах линейного участка.

В трансляторе МГУ был реализован алгоритм экономии совпадающих выражений в пределах линейного участка с учетом альтернативных ветвей в условных выражениях (допускавшихся в этом трансляторе), ассоциативности операций и перемены знака выражений [43].

В трансляторе ЛИС был реализован частичный синтаксический контроль с использованием матрицы попарной сочетаемости элементарных символов входной программы [40].

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

Охарактеризуем результаты, относящиеся к проблемам представления, поиска и занесения информации.

ШБ в 1952 г. предложил универсальный способ манипулирования с множествами, являющимися подмножествами некоторого генерального занумерованного множества . Любое такое множество изображается двоичным вектором , где , а остальные равны нулю. Такой вектор получил название логической шкалы. Пересчет и теоретикомножественные операции над множествами в таком представлении удобно сводились к машинным операциям сдвига нормализации и поразрядным логическим операциям [33].

В ЦП БЭСМ АЕ выдвинул в качестве общего правила принцип "адресной кодировки" различных объектов, с которыми приходится иметь дело при трансляции. При такой кодировке всюду, где это имеет смысл, объект кодируется адресом ячейки, содержащей информацию об этом объекте. Такая кодировка существенно сокращает время поиска информации и хорошо соответствует структуре оперативной памяти с произвольным доступом ([28], п. 3).

Мы уже упоминали о введенной Л.В. Канторовичем концепции дескриптора (справки) как объекта фиксированного формата, концентрирующего в себе описание способов доступа к компонентам динамического структурного объекта (величины) ([28], п. 4).

В 1957 г. АЕ независимо, хотя и позже сотрудников ИБМ, придумал функцию расстановки как способ беспереборного поиска информации по ключу, исследовал экспериментально ее статистические свойства и применил для алгоритма экономии команд, работающего за линейное время [53].

В 1957 г. Л.Н. Королев в рамках экспериментов по машинному переводу, выполнявшихся в ИТМиВТ, разработал метод ускорения ассоциативного поиска в файлах словарного типа, а также способы сжатия ключевых слов без потери однозначности [54], [55].

В конце 50-х годов группа московских математиков занялась вопросом программирования шахматной игры. Через 16 лет эти исследования завершились выигрышем 1 Всемирного чемпионата шахматных программ, происходившего в Стокгольме в 1974 г. во время Конгресса ИФИП. Одной из важных компонент последовавшего успеха были глубокое изучение вопросов организации информации в памяти ЭВМ и разработка эвристик поиска, требующего перебора. Г.М. Адельсон-Вольский и Е.М. Ландис изобрели двоичное дерево поиска (дихотомическая справочная) [56], а А.Л. Брудно независимо от Дж. Маккарти придумал -эвристику для сокращения перебора на дереве игры [57].

В обсуждаемый период времени в Советском Союзе были выполнены работы, развитие которых привело к созданию теории схем программ [31], [32].

В 1958 г. состоялись первые личные контакты советских программистов с американскими и английскими коллегами. В июне 1958 г. по приглашению проф. Дж.В. Карра III в США для участия в летней школе Мичиганского университета прибыла делегация из СССР, возглавляемая академиком А.А. Дородницыным. Л.Н. Королев, бывший членом делегации, выступил с лекцией, в которой дал краткий обзор советских работ по трансляторам [61].

В ноябре 1958 года АЕ в составе советской делегации по автоматизации выступил на известной конференции по механизации процессов мышления в НФЛ в Теддингтоне. Там он встретился с Джоном Бэкусом и Грэйс М. Хоппер. Темой доклада АЕ были обзор трансляторов, разработанных в Вычислительном центре АН СССР 1621, а так же изложение некоторых результатов по теоретическому программированию. Сокращенное изложение доклада позднее появилось в журнале "Дейтамейшин" [63].

В августе 1958 года в Советский Союз с ответным визитом прибыла американская делегация из четырех человек, возглавляемая проф. Дж.В. Карром. Проф. Карр выступил с докладом о новой американской машине СТРЕТЧ, а проф. Алан Перлис привез "свежеиспеченное" предварительное сообщение о продукции совместного Германа американского комитета: проекте алгоритмического языка АЛГОЛ [64], получившего позднее название АЛГОЛ 58.

В результате этих контактов советские программисты познакомились с серией первых американских систем программирования, описание которых было издано в русском переводе в 1961 г. [65].

Что же касается АЛГОЛА 58, то ему было суждено сыграть в развитии программирования в СССР весьма важную роль. Он явился своего рода центром кристаллизации новой ситуации в программировании, которая созревала в Советском Союзе в преддверии второго поколения ЭВМ.

НОВЫЕ РУБЕЖИ (1959-1963 гг.)

В течение шестой пятилетки в пределах доступных ресурсов проходила интенсивная работа по конструированию ЭВМ. В дополнение к первым ЭВМ (табл. 1) появилось еще по крайней мере восемь типов ЭВМ, не считая воспроизведений по документации (см. табл. 2). За исключением ЭВМ "Урал-2" и М-20, роль остальных разработок была промежуточной. Одни были индивидуальными разработками типа "сделай сам" (ГИФТИ, ЦЭМ-1), другие -- промежуточным этапом в поисках основного направления разработок ("Киев"), третьи носили экспериментальный характер ("Сетуй"). В основном же, если не считать попутного освоения ферритовой памяти, эти модели стали своего рода ламповыми прототипами поколения полупроводниковых машин.

В ноябре 1959 года в МГУ состоялось Всесоюзное совещание по вычислительной математике и вычислительной технике. Несмотря на скромное название, это было грандиозное научное собрание, на котором присутствовало почти 2000 участников и на четырех секциях [44] было прочитано 217 докладов. К сожалению, организаторам не удалось собрать доклады и издать труды совещания.

На пленарном заседании ШБ и АЕ было поручено выступить с обзорным докладом "Современное состояние автоматизации программирования". Доклад был сделан, однако справедливости ради следует признать, что единого взгляда на проблематику в этот момент выработать не удалось.

К концу 50-х годов у каждого из авторов сложилась своего рода программа деятельности на будущее. Их взгляды нашли свое частичное выражение в ряде работ (в том числе и в представленных на этом совещании [45], [66]). Дело, однако, не столько в самих работах, сколько в контексте, определявшем подход авторов.
ШБ довелось принять участие в проектировании логической структуры ЭВМ М-20. Нужно отметить, что это была одна из немногих моделей ЭВМ, при создании которой объединились проектанты, конструкторы и математики, представленные ИТМиВТ, конструкторским бюро, создавшим машину "Стрела", и МИАНом. Эта солидная основа возлагала большую ответственность на разработчиков, поскольку машине (точнее, ее архитектуре) предстояло воплотиться в нескольких крупных сериях (М-20, БЭСМ-ЗМ, БЭСМ-4, М-220, М-220М. М-222). В частности, масштабы использования средств программирования возрастали не измеримо и сложившиеся прецеденты накопления натурального программного хозяйства, еще кое-как приемлемые для уникальных научных вычислительных центров, уже совершенно не годились для будущей машины. По степенно складывалась концепция "математического обеспечения" -- интегрированной и удобной в работе системы различных средств программирования (библиотеки, трансляторы, средства отладки), сопряженной с определенной дисциплиной прохождения задач на машине. Для ШБ важными предпосылками для формирования такой философии были экспериментальные системные, проекты в Вычислительном центре МГУ [38], [43], а также повседневный опыт организации производственных вычислений в МИАНе, требовавших большой четкости и высокой надежности работы как оборудования, так и программ.

На пути к полному пониманию проблемы математического обеспечения ЭВМ, не говоря уже о ее решении в сколько-нибудь полном объеме, было много препятствий как научно-технического, так и организационного характера, в частности слабая разработанность концепции программного продукта. Опыт работы с машинами "Стрела" отчетливо показал, что дивергенция средств программирования в целом неизбежна, если не будет единой и нерушимой основы, сооружаемой непосредственно на "голой" машине. Для М-20 в то время такой основой была библиотека стандартных подпрограмм. Идея превращения библиотеки в переносимый и общий программный продукт стала для ШБ главной задачей, на решении которой со временем сформировались более общие взгляды на программное обеспечение. ИС-2 стала своего рода мини-ОС, обеспечивающей "в последней инстанции" определенную однородность строения исполняемых программ.

Что же касается второго соавтора пленарного доклада, то следует отметить, что АЕ интересовали в то время совершенно другие проблемы. Продолжая работать над трансляторами и их входными языками [65], он стремился увлечь своих новых сотрудников довольно амбициозным проектом "Сибирского языка программирования" [66].

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

Как уже упоминалось, первое знакомство с проектом западногерманских и американских специалистов состоялось в августе 1958 года, когда А. Перлис привез предварительную версию публикации [64] в СССР. Первыми ее читателями были сотрудники Вычислительного центра АН СССР, работавшие в то время над транслятором ЛИС [41], и начальная группа сотрудников будущего Вычислительного центра Сибирского отделения АН СССР. Общая схема языка была положена в основу проекта "Сибирского языка" -- системы программирования для М-20. В то же время стала совершенно очевидной общенаучная ценность документа [64], что требовало его широкого распространения. Не дожидаясь публикации сборника переводов [65], описание АЛГОЛА в переводе АЕ было издано Вычислительным центром и распространено на ноябрьском совещании 1959 г. [67].

Тем временем усилия международного коллектива ученых завершились выработкой законченной спецификации нового алгоритмического языка. Редактор "Сообщения об алгоритмическом языке АЛГОЛ 60" [68] Потер Наур поддерживал контакт с советскими коллегами, что позволило уже в марте 1960 года подготовить для публикации перевод сообщения, выполненный Г.И. Кожухиным. Этот перевод был опубликован в мае 1960 года в издательстве Вычислительного центра АН СССР, а через год -- в новом "Журнале вычислительной математики и математической физики" [69].

Ситуация весной 1960 года оказалась весьма благоприятной для принятия АЛГОЛА 60 в качестве единого языка программирования научных и инженерных применений ЭВМ. Авторы уже говорили об общих предпосылках к унификации языка. АЛГОЛ 60 не только обладал очевидными достоинствами, выдвигая в то же время интересную научную проблематику, но и, будучи международным "комитетским" языком, ставил в равную позицию любую индивидуальную оценку языка, отодвигая тем самым на второй план субъективные или "вкусовые" точки зрения. Другим благоприятным моментом было отсутствие инерции, поскольку количество "Стрел" и БЭСМ не шло ни в какое сравнение с потоком выпускаемых машин типа М-20.

В июне 1960 года в Вычислительном центре АН СССР состоялось координационное совещание по вопросам реализации АЛГОЛА 60. На фоне общей и во многом разнонаправленной активности выделились три проекта реализации языка для М-20, руководимые С.С. Лавровым, ШБ и АЕ и получившие соответственно названия ТА-1, ТА-2 и Альфа. Начавшись как три независимые и подчас конкурирующие разработки, эти проекты в процессе своего развития приобрели взаимодополняющие свойства, решив в целом удовлетворительно проблему снабжения М-20 трансляторами с АЛГОЛА 60.

ШБ попытался решить проблему унификации конкретного представления с тем, чтобы достичь совместимости трансляторов по входу. К сожалению, технические различия во взглядах возобладали и в полном объеме решить проблему не удалось. Серьезным препятствием на этом пути стало отсутствие у М-20 стандартного буквенно-цифрового оборудования для ввода и вывода, что побудило разработчиков и пользователей временно решать эту проблему каждый по-своему. Кроме того, разгон, взятый АЕ в разработке "Сибирского языка", оказался слишком велик, чтобы остаться в рамках АЛГОЛА 60. Проект был адаптирован таким образом, чтобы стать расширением АЛГОЛА 60, и в таковом качестве он получил название "Входного языка" [70], а в его конкретном представлении -- Альфа-языка. Наиболее существенным расширением было введение комплексных и многомерных величин в качестве аргументов и результатов основных операций, а также операций формирования и членения таких величин.

В то же время все три транслятора базировались на системе ИС-2 для обращений к стандартным подпрограммам.

22-24 декабря 1960 года в МГУ состоялась рабочая конференция "Построение программирующих программ на основе языка АЛГОЛ". К этому времени у разработчиков уже сложились общие подходы к реализации языка и выбору схем трансляции. В ТА-1, благодаря отказу от возможной рекурсивности процедур и ряду других ограничений, была выбрана компактная и быстрая схема трансляции без оптимизации. Главной задачей ТА-2 стала реализация практически полного языка без существенной потери в качестве реализации. В разработке системы Альфа было поставлено в качестве главной цели обеспечение высокого качества рабочих программ с сохранением приемлемой скорости трансляции ([79], стр. 264). В докладе разработчиков системы Альфа был создан, можно сказать, классический прецедент просчета в определении плановых показателей больших программных работ с универсальным коэффициентом недооценки 2-3, подтвержденным впоследствии многими проектами: авторы отводили разработке системы 15 человеко-лет для построения 15000 команд, затратив на самом деле свыше 30 человеко-лет и соорудив систему в 45000 команд ([79], стр. 64).

В дальнейшем на технические решения разработчиков оказали существенное влияние материалы проходившей почти одновременно в США конференции по методам трансляции с АЛГОЛА 60, многие доклады которой были опубликованы в одном из самых известных среди программистов выпусков журнала Эй-Си-Эм Коммьюникейшенз [71]. Общественное признание АЛГОЛА 60 нашло свое выражение в обзорном докладе ШБ и АЕ "Машинные языки и автоматическое программирование", с которым они выступили на пленарном заседании IV Всесоюзного математического съезда, состоявшемся в Ленинграде в июле 1961 года [72].

Параллельно работам по АЛГОЛУ 60 развивались события, приведшие к организации ассоциации пользователей ЭВМ М-20. Уже на июньское совещание по АЛГОЛУ 60 были приглашены представители организаций, использующих М-20, чтобы решать вопросы реализации с учетом общественного мнения пользователей. На декабрьской конференции 1960 года по реализации АЛГОЛА 60 среди участников была распространена информация о предстоящем учредительном собрании членов ассоциации, которое состоялось в начале 1961 года. ШБ был избран председателем совета ассоциации.

В июле 1961 года ассоциация решением Президиума Академии наук СССР получила статус юридического лица и официальное название "Комиссия по эксплуатации вычислительных машин М-20".

Деятельность Комиссии была важна не только созданием прецедента, за которым последовало создание аналогичных ассоциаций для БЭСМ-2, серии "Урал", а чуть позже -- для серии "Минск", но и ускорением разработки концепции математического обеспечения -- термина, вошедшего в употребление в 1963 г. Несколько забегая вперед, заметим, что библиотека программ ИС-2, трансляторы ТА-1 и ТА-2 стали первыми образцами программного продукта, которые поставлялись вместе с оборудованием заводом-изготовителем, образуя интегрированную систему программирования.

Тем временем приближалась к концу разработка трансляторов с АЛГОЛА. Отчетные публикации появились для ТА-1 и ТА-2 в начале 1964 года [73], [74], для системы Альфа -- годом позже [75], [76].

Охарактеризуем кратко технические результаты по методам трансляции, полученные при выполнении этих работ.

В трансляторе ТА-1 была реализована разработанная Г.М. Заикиной и С.С. Лавровым общая схема программирования выражений с помощью стека, использующая трактовку знака операций как обобщенных парных ограничителей и разделителей [73].

В трансляторе ТА-2, как уже отмечалось, был реализован практически полный АЛГОЛ 60, впервые был систематически применен метод таблично-управляемой генерации машинных конструкций операторов языка, реализован новый алгоритм реализации рекурсивных процедур, не требующий размножения "санков" [77]; в пределах, допустимых оборудованием М-20, было реализовано поле "математической памяти" со сплошной адресацией, включая как оперативную, так и внешнюю памяти [78].

В трансляторе Альфа была систематически применена функция расстановки для ускорения работы транслятора ([79], стр. 35), в частности, для экономии совпадающих выражений ([79], стр. 187) применена многовариантная система программирования процедур ([79], стр. 92) и циклов ([79], стр. 153), основанная на анализе структуры программы; реализована глобальная экономия памяти ([79], стр. 201), основанная на теории, разработанной С.С. Лавровым [95] и АЕ [96], а также осуществлен ряд других оптимизационных преобразований на уровне промежуточного языка (в частности, объединение циклов с одинаковыми заголовками ([79], стр. 112) и чистка циклов ([79], стр. 153).

Научные итоги разработки трансляторов были подведены на 11 Конференции социалистических стран, состоявшейся в Киеве летом 1963 года, где, в частности, демонстрировалась работа транслятора ТА-2, а также на конференции ассоциации пользователей М-20, состоявшейся в Новосибирске в январе 1964 года. Последняя запомнилась участникам горячими дискуссиями и трескучими мороза ниже 40њC. На конференции в Киеве были заложены основы распространения координации работ по программированию на уровень международного сотрудничества. В дальнейшем была создана рабочая группа ГАМС, выработавшая проект международного стандарта на подмножество АЛГОЛА 60, известное под названием АЛГАМС [80].

В 1963 г. в Вычислительном центре Сибирского отделения АН СССР состоялись первые эксперименты, выполненные С.Л. Суржиковым, по автоматизации пакетной обработки программ с формированием пакета на перфокартах. Для этих целей была несколько модифицирована ЭВМ М-20 путем добавления системы прерывания и небольшого процессора ввода-вывода. Это был один из немногих прототипов однопрограммной операционной системы для пакетной обработки, реализованной на ЭВМ первого поколения. Впоследствии эта работа легла в основу одной из модернизаций М-20, приведшей к модели М-222 [81].

Появление ЭВМ второго поколения ("Минск-2", "Раздан-2". БЭСМ-3, М-220, БЭСМ-6. "Днепр" и др.) в целом опередило созревание концепции математического обеспечения и идентификацию системного программирования. Предпосылки к исправлению положения сложились, однако, именно в период 1959-1963 гг. Начиная с 1964 года разработка математического обеспечения стала элементом государственной технической политики. Государственный комитет по науке и технике стал одновременно и координатором работ по математическому обеспечению существующих машин, и генеральным заказчиком промышленности на математическое обеспечение вновь создаваемых ЭВМ. Ассоциации пользователей ЭВМ активно представляли научно-техническое общественное мнение и играли существенную роль в распространении новых программ. Апробация новых систем программирования, а впоследствии и операционных систем проводилась междуведомственной комиссией по математическому обеспечению под председательством академика А.А. Дородницына и целевыми комиссиями, осуществляющими приемку новых компонент математического обеспечения.

Деятельность рабочей группы ГАМС и некоторых других рабочих групп создала прецеденты международного научно-технического сотрудничества, нашедшего впоследствии свое развитие в работах по ЕС ЭВМ ("Ряд").

Интенсивная работа над трансляторами с АЛГОЛА привела к исчезновению профессии вспомогательного программиста-кодировщика и замене ее профессиональными системными программистами. Снабдив пользователей средствами автоматизации программирования, системные программисты оказались в роли сапожников, которые ходят без сапог. Все первые трансляторы писались в восьмеричном машинном коде с минимальными средствами автоматизации. Это привело к появлению первых языков системного программирования [82], [83] и первой системы построения трансляторов, основанной на промежуточном универсальном машинно-ориентированном языке АЛМО [84]. В 1964 г. началось проектирование первых мультипрограммных операционных систем для пакетной обработки с использованием загрузчиков и ассемблеров, работающих в автоматическом режиме с помощью языков управления заданиями. Большую роль в формировании современного взгляда на математическое обеспечение и архитектуру ЭВМ сыграл Конгресс ИФИП 1965 года, когда концепции совместимых серий машин, разделения времени, мини-ЭВМ стали объектом делового интереса советских специалистов. Некоторое представление о спектре советских работ по системному программированию в 60-е годы дает тематическое разбиение 99 докладов, представленных на 1 Всесоюзной конференции по программированию, состоявшейся в Киеве в октябре 1968 года [85]:

общие обзоры -- 3, процедурные языки и трансляторы -- 14, коммерческие языки и трансляторы -- 9, операционные системы -- 14, системы разделения времени -- 2, архитектура систем -- 12, технология программирования -- 12, прикладные программы -- 11, теоретическое программирование -- 22.

ОБРАЗОВАНИЕ И УЧЕНЫЕ СТЕПЕНИ ПО ПРОГРАММИРОВАНИЮ

Первый учебный курс программирования в СССР был прочитан А.А. Ляпуновым в 1952/53 учебном году на механико-математическом факультете МГУ и назывался "Принципы программирования". Структура курса складывалась, можно сказать, на глазах у студентов. Первая половина весьма тесно следовала книге "Программированием для быстродействующих электронных счетных машин" [23]. В перерыве между первым и вторым семестрами у лектора начали складываться основные подходы к "операторному методу". Вся вторая половина курса была результатом совместной работы профессора и студентов по созданию и уточнению символики операторов, используемых при составлении схем программ. Курс читался и воспринимался с большим энтузиазмом, и неслучайно почти половина слушателей математиков-вычислителей стала после выпуска профессиональными программистами.

В 1955 г. чтение курса программирования в МГУ продолжил ШБ. Через пару лет состав курса стабилизировался.

В современных терминах его структура выглядит следующим образом: архитектура ЭВМ; арифметические основы, ознакомление с системой команд; программирование линейных последовательностей команд; программирование ветвлений; программирование циклов; синтез программы в рамках операторного метода; технология программирования (стилистика, комментарии, блок-схемы, операторные схемы, отладка); компоненты математического обеспечения (библиотеки, трансляторы, отладочные программы).

В качестве учебной ЭВМ использовалась или "Стрела", или абстрактная трехадресная ЭВМ.
Первой книгой об ЭВМ, рассчитанной на массового читателя, была уже упоминавшаяся книга А.И. Китова "Электронные цифровые машины", вышедшая в середине 1956 года [33]. Коллеги-профессионалы иногда критиковали эту книгу за неточности или поверхностное изложение. Однако, перечитав ее почти через 20 лет, авторы должны подтвердить, что это было добросовестное, а главное, весьма оперативное изложение доступных в то время сведений об ЭВМ. Достоинством книги была убедительная и увлекающая свежего читателя демонстрация разнообразной новизны, вносимой ЭВМ в практику человеческой деятельности.

Развитием этой книги, а также конспекта лекций, выпущенного в 1056 г. для слушателей Артиллерийской инженерной академии [86], стала книга А.И. Китова и Н.А. Криницкого "Электронные цифровые машины и программирование" [87]. Это была первая книга, официально рекомендованная Министерством высшего образования в качестве учебного пособия, весьма солидного объема (572 стр.), изданная большим тиражом (25 тыс. экземпляров). Весьма богатая содержанием, книга отличалась некоторой пестротой стиля -- от популярного изложения основ до руководств к пользованию транслятором. Методика изложения программирования следовала сложившейся схеме (см. выше), но содержала в дополнение к ней две главы с подробным изложением теории схем программ (главным образом, по Ю.И. Янову) и правил программирования для одной из разновидностей трансляторов (ПП-С) для "Стрелы", сделанного в стиле ПП-2. Одним из любопытных обобщений была возможность использовать операторы присваивания в качестве аргументов отношений в логических условиях, например, допускалась запись ([87], стр. 502):

\begin{displaymath}1. x= t > 0 7002, 4005,\end{displaymath}
\begin{displaymath}2. x^2 + y^2 = r < 5 \land x - z > 3 12, 4015,\end{displaymath}
которая в современной нотации означает
\begin{displaymath}{\bf if} (t:=x) > 0 {\bf then go to} L15 {\bf else if}

(r:=x \uparrow 2+y \uparrow 2) < \end{displaymath}

\begin{displaymath}< 5 \land x-z > 3 {\bf then go to} L12 {\bf else go to}

L15 {\bf fi fi}\end{displaymath}

Первым учебником по программированию была книга киевских авторов Б.В. Гнеденко, В.С. Королюка и Е.Л. Ющенко "Элементы программирования" [88] (вышла в 1961 г., была переиздана в 1964 г. и переведена на ряд иностранных языков (1964 г. -- в ГДР и Венгрии, 1969 г. -- во Франции)). Авторы использовали для изложения условную ЭВМ и дидактику курса А.А. Ляпунова. Отдельная глава была посвящена адресному программированию.

Первой попыткой создать солидный университетский курс программирования, "построенный на современных научных и методических принципах" ([89], стр. 2). была книга Е.А. Жоголева и Н.П. Трифонова "Курс программирования" [89], основанная на опыте чтения лекций по программированию в МГУ. Это был также первый курс, базирующийся на АЛГОЛЕ 60. Попытка оказалась в целом весьма удачной, книга была основным вузовским учебником по программированию вплоть до появления машин третьего поколения и издавалась несколько раз тиражом, приближающимся к 300 тыс. экземпляров. Модернизированная версия этого учебника еще и сейчас широко используется как материал для общего вводного курса программирования.

Первая известная авторам диссертация, связанная с использованием ЭВМ, -- кандидатская диссертация И.С. Мухина (который в течение многих лет был заместителем директора ИТМиВТ, защищенная в 1953 г. и посвященная расчетам равноустойчивых грунтовых откосов [90]. Приведенные расчеты, выполненные на БЭСМ в 1952 г., требовали решения системы гиперболических уравнений на плоскости. Эта работа открыла поток самых разнообразных прикладных диссертаций, демонстрировавших мощь ЭВМ и предоставляемые ими возможности. С самим программированием дело обстояло гораздо сложнее, -- прошли годы, прежде чем оно преодолело комплекс неполноценности, а окружающие усмотрели в нем научное содержание.

Кажется, первой попыткой академической трактовки собственно программистских проблем была глава докторской диссертации ШБ, защищенной в 1953 г. и посвященной в целом ошибкам округления. В этой главе описывалась некоторая систематическая процедура организации двойного счета на ЭВМ для обеспечения надежности вычислений. Несмотря на практичность схемы и актуальность проблемы, эту часть диссертации многие игнорировали, а некоторые оспаривали.
В 1954 г. в своей дипломной работе, посвященной обращению матриц, АЕ изложил некоторую общую схему программирования и описал алгоритм настройки по месту перемещаемой программы.

Постепенно начала набирать силу более здравая точка зрения. В 1957 г. на ученом совете МИАНа во время защиты первой диссертации собственно по программированию (Э.З. Любимский. "Об автоматизации программирования и методе программирующих программ" [60]) состоялась оживленная "мета"-дискуссия. Диссертант, посвятив основное изложение описанию транслятора ПП-2, добавил теоретическую главу, посвященную уже упоминавшемуся выше "параметрическому" виду записи для решения на ЭВМ. А.С. Кронрод критиковал диссертанта за "оппортунистический уклон" и настаивал на праве представления к защите сложных системных программ, полагая достаточным свидетельством творческих способностей автора существование и полезную применимость программного продукта самого по себе.

В 1957 г. состоялась также защита кандидатской диссертации Ю.И. Янова [91]. Эта работа, ставшая классической в теоретическом программировании, также не получила единодушной поддержки, которой она заслуживала.

В 1958-1959 гг. состоялись две защиты кандидатских диссертаций по вопросам программирования, сделанные на материале первых экспериментов по машинному переводу: О.С. Кулагиной (о своего рода специализированном языке программирования задач машинного перевода [92]) и Л.Н. Королева (об оптимизации организации и работы со словарем [93]).
Л.Н. Королев-программист с самого начала своей деятельности -- в 1965 г. стал первым профессором программистом. Первая докторская диссертация по программированию была защищена в Киеве Е.Л. Ющенко в 1965 г. на материале разработки серии трансляторов на основе адресного языка [49], [50], [51].

Сначала все эти диссертации причислялись к существовавшим в то время родственным специальностям: вычислительной математике, счетно-решающим устройствам и т. д. В середине 60-х годов под влиянием серии работ по теоретическому программированию была образована новая специальность -- математическая логика и программирование. Употребление слова "программирование" в виде явной конституэнты привело к представлению на ученые советы потока работ по системному программированию, весьма далеких от математической логики. Совсем недавно, в 1971 г., программисты отмежевались от логиков, образовав собственную специальность -- математическое обеспечение вычислительных комплексов и автоматизированных систем управления.
Авторы хотели бы закончить этот раздел упоминанием о двух постоянных московских общегородских семинарах, сыгравших немаловажную роль в становлении программирования в СССР.
В 1955 г. в Московском университете при кафедре вычислительной математики работал семинар по смежным вопросам кибернетики и физиологии, который с 1956 г. стал называться семинаром по кибернетике. АЕ выступил первым докладчиком на этом семинаре с рефератом статьи о моделировании процесса выработки условных рефлексов на машине ЭДСАК [94]. Семинар носил интердисциплинарный характер и уделял, в частности, немалое внимание неарифметическим применениям ЭВМ. Участие в его работе позволяло программистам вырабатывать более широкий взгляд как на применение ЭВМ, так и на их место в этом процессе. Этот семинар в несколько ином стиле, работает в МГУ по-прежнему под руководством членов-корреспондентов АН СССР С.В. Яблонского и 0.Б. Лупанова.
С 1956 г. в этих же стенах начал работу, которая продолжается и поныне, научный семинар по программированию под руководством Н.П. Трифонова и ШБ. Предназначенный вначале для сотрудников кафедры вычислительной математики и вычислительного центра МГУ, он постепенно приобрел общегородской характер, собирая иногда на своих заседаниях по нескольку сот человек. Представительный характер его аудитории обеспечивал быструю и эффективную передачу информации в "горячие периоды" появления новых идей или направлений в программировании. К таким моментам активных и плодотворных дискуссий можно отнести период разработки системы программирования для университетской "Стрелы" (1957-1958 гг.), период освоения АЛГОЛа (1960-1961 гг.), период работы с БЭСМ-6, а также период изучения и выработки концепций операционных систем.

ЗАКЛЮЧЕНИЕ

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

Ряд объективных обстоятельств способствовало тому, что до середины 60-х годов программирование в СССР развивалось до некоторой степени автономно. К этим обстоятельствам относятся более позднее начало работ по электронной вычислительной технике (примерный сдвиг -- пять лет); меньшее количество доступных ресурсов, с чем связан те столь широкий, как в США или в Англии, размах работ; 2практическое отсутствие импорта вычислительных машин и технологии; языковый барьер и сравнительно менее интенсивные личные контакты.

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

При таком положении возникает также в ретроспективной оценке вопрос о степени независимости развития и о вкладе в мировую науку.

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

Базисные программистские термин

* машинная математика [1] 1946

* электронная счетная машина [8] 1948

* память [8] 1948

* команда [15] 1949

* арифметическое устройство [19] 1949

* запоминающее устройство [19] 1949

* программное управление [19] 1949

* регистр [19] 1949

* цикл [19] 1949

* параметр цикла [19] 1949

* устройство управления [17] 1952

* внутренняя память [17] 1952* программа [17] 1952

*ввод [17] 1952

* вывод [17] 1952

* сумматор [17] 1952

* код операции [17] 1952

* адрес [17] 1952

* адресная часть [17] 1952

* условный переход [17] 1952

* безусловный переход [17] 1952

* плавающая запятая [17] 1952

* фиксированная запятая [17] 1952

* быстродействующая вычислительная машина [17] 1952

* электронная вычислительная машина [17] 1952

* ячейка (памяти) [17] 1952

* арифметическая операция [17] 1952

* логическая операция [17] 1952

* программирование [21] 1952

* масштабный множитель [21] 1952

* индекс-регистр [21] 1952

* подпрограмма [23] 1952

* главная программа [23] 1952

* ветвление [23] 1952

* блок-схема [23] 1952

рабочая ячейка [23] 1952

формирование команды [23] 1952

стандартная подпрограмма [23] 1952

код (слово) [23] 1952

* замкнутая подпрограмма [27] 1953

* открытая подпрограмма [27] 1953

* параметры (подпрограммы) [27] 1953

* возврат [27] 1953

* библиотека подпрограммы [27] 1953

* библиотечная программа [27] 1953

* компилятор [28](Панов) 1956

* интерпретатор [28] (Панов) 1956

программист [28] (ШБ) 1956

программная документация [28] (ШБ) 1956

схема программы [28](28.1) 1956

логическая схема [28](28.1) 1956

схема счета [28](28.1) 1956

оператор [28](28.1) 1956

оператор переадресации [28](28.1) 1956

оператор восстановления [28](28.1) 1956

оператор формирования [28](28.1) 1956

автоматизация программирования [28](28.2) 1956

программирующая программа (транслятор) [28](28.2) 1956

арифметический оператор (оператор присваивания) [28](28.2) 1956

логический оператор [28](28.2) 1956

экономия рабочих ячеек [28](28.2) 1956

отладка [28](28.2) 1956

стандартная подсхема (макроопределение) [28](28.2) 1956

оператор цикла [28](28.3) 1956

переменная команда [28](28.3) 1956

массив [28](28.3) 1956

относительный адрес [28](28.3) 1956

распределение памяти [28](28.3) 1956

справка (дескриптор) [28](28.4) 1956

прораб (монитор) [28](28.4) 1956

внешние устройства [33] 1956

система команд [33] 1956

логическая шкала [33] 1956

* символическое кодирование [33] 1956

* символический адрес [33] 1956

* действительный (абсолютный) адрес [33] 1956

крупноблочное (модульное) программирование [35] 1956

полупрограмма (стек) [39] 1958

экономия команд [39] 1958

(глобальный) анализ программы [39] 1958

адрес некоторого ранга (косвенный адрес) [47] 1958

граф-схема [58] 1959

настройка по месту [44] 1959

* алгоритмический язык [67] 1959

* пользователь [67] 1959

* эталонный язык [67] 1959

* конкретное представление [67] 1959

* язык публикаций [67] 1959

* ограничитель [67] 1959

* разделитель [67] 1959

* идентификатор [67] 1959

* описание [67] 1959

* переключатель [67] 1959

* тип [67] 1959

* выражение [67] 1959

* процедура [67] 1959

* метка [67] 1959

* формальный, фактический параметр [67] 1959

* металингвистическая формула [69] 196О

* строка [69] 1960

* локальные, глобальные величины [69] 1960

* условный оператор [69] 1960

* вызов процедуры [69] 196О

* размерность массива [69] 1960

переменная с индексами [69] 1960

гранитные пары [69] 1960

рекурсивная процедура [69] 1960

* псевдокоманда [32] 1961

стандартный массив/модуль загрузки [43] 1961

составляющая программа/ассемблер [43] 1961

внешний адрес [43] 1961

внутренний адрес [43] 1961

таблица внешних адресов [43] 1961

прокрутка [43] 1961

* операторы ввода-вывода [65] 1961

* переполнение [65] 1961

* формат (вывода) [65] 1961

* рабочая машина [65] 1961

* выход (из блока) [65] 1961

* перемещаемая программа [65] 1961

граф несовместимости [95] 1961

экономия памяти [95] 1961

маршрут [95] 1961

граф переходов [95] 1961

справочная (структура файла) [56] 1962

дихотомическая справочная (дерево поиска) [56] 1962

математическое обеспечение 1963 3

внутренний язык [75] 1965

мультикоманда [75] 1965

функция расстановки [75] 1965

общий список (куча) [75] 1965

чистка циклов [75] 1965

регулярный цикл [75] 1965

* динамический массив [75] 1965

Из 135 вошедших в список терминов 79 оказались заимствованными, а 56 -- оригинальными.

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

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

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

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

Как ни парадоксально, одной из причин более сильной машинной зависимости была трехадресная система команд. При такой системе трехадресная команда часто представляет собой логически законченное действие, "пролезающее" во входной язык.

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

Возвращаясь к устройствам ввода-вывода, можно отметить еще одну погрешность в одном из начальных решений: желание уплотнить формат перфокарты привело к построчной кодировке машинных слов на карте и к подаче карты в читающее устройство широкой стороной вперед. Это не только затруднило внедрение буквенно-цифровых кодов, но и не давало возможности получить высокую скорость ввода. Упущение было ликвидировано только во второй половине 60-х годов.

Другим фактором, сузившим фронт работ по программированию, было преобладание научных применений ЭВМ в рассматриваемый период времени. В практике применения ЭВМ отсутствовало понятие массового пользователя. Труд программистов, как ни парадоксально это звучит, еще не был так дефицитен. Не случайно А.И. Китов в своей книге, относящейся к 1956 г., указывает, что для подготовки задач для одной ЭВМ требуется 50 -- 150 математиков ([33] стр. 26).

В основном программисты в СССР были математики с университетским образованием. При всех положительных сторонах этого обстоятельства следует, однако, отметить, что потребовалось длительное время, пока была осознана и реализована необходимость сбалансировать эту сторону образования воспитанием способности к инженерному стилю работы, столь необходимому в системном программировании.

Еще одной причиной и одновременно следствием недостаточно широкого размаха работ по программированию был тот факт, что ведущие программисты были слишком заняты. В течение добрых 15 лет одни и те же люди и организовывали производственный счет в вычислительных центрах, и разрабатывали математическое обеспечение, и учили студентов, и вели научную работу. Гармонично объединить эти функции удавалось не всегда и не всем. Почти все успешные экспериментальные системы кое-как переделывались в программный продукт, и это "кое-как" иногда мешало эксперименту и не давало должного эффекта.

Авторы тем не менее надеются, что эта чистосердечная критика не помешает требовательному читателю сформировать позитивное мнение о поступательном и в целом плодотворном периоде становления программирования в СССР. Сейчас, на пороге 25-летия с того момента, как неоновые индикаторы на пульте ЭВМ начали в Советском Союзе свой безостановочный бег, "семь дней в неделю, 24 часа в сутки", стократно умноженное новое поколение молодых людей заново переживает острый момент, когда составленная ими программа одухотворяет машину, передавая ей частицу их интеллекта. Этому поколению авторы посвящают свое исследование.

Таблицы

Т а б л и ц а 1. Первые советские ЭВМ

Название

МЭСМ

БЭСМ

М-2

"Стрела"

"Урал"

М-3

Руководитель проекта

Характеристика ЭВМ

С.А.Лебедев

C.A.Лебедев

И.С.Брук

Ю.Я.Ба-

Б.И.Рамеев

И.С.Брук

зилевский

Год выпуска головного экземпляра

l951

1952

1952

1953

l955

l956

Серийная продукция (год)

-

1956 (БЭСМ-2)

-

1953

1956

1957

Адресность

3

3

3

3

1

2

Время тактирующего импуль-

са (мксек)

-

2,5

12,5

-

-

6

Время основного такта

(мк сек)

-

77

220

220

10000

60+30000

Средняя скорость (оп/сек)

100

8000

2000

2000

100

30

Цикл отражения к памяти

(мксек)

-

12

25

30

10000

10000

Тип оперативной памяти

триггерные

ячейки

элт

элт

элт

барабан

барабан

Емкость оперативной памяти

31 число

(слов)

63 команды

1024

512

1024

1023

2048

Память констант

100

376

496

Разрядность слова (бит)

21

39

34

43

35

30

Арифметика (запятая)

фикс

плав

фикс плав

плав

фикс

фикс

Количество ламп

3800

4000

1879

8000

870

805

Барабан (слов)

2500

5120

512

-

1023

2048

Лента (слов)

-

$\times$ ЗОК

50К

$\times$ 100K

40К

-

Ввод

ручной

п/л

п/л

п/к

п/л

п/л

Вывод

табуляторная

табуляторная

табуляторная

табуляторная

печать

печать

т/т

п/к

печать

печать

Источник

[28],

[28]

[28],[99]

[28]

[28]

[28],[100]

Т а б л и ц а 2. Вторая очередь ЭВМ первого поколения

Название

ГИФТИ

Киев

ЦЭМ-1

"Сетунь"

"Урал-2"

"Минск"

"Раздан"

М-20

Год выпуска

1957

1959

1958

1959

1959

1959

1959

1959

Город

Горький

Киев

Москва

Москва

Пенза

Минск

Ереван

Москва

Адресность

1(3)

3

2

1

1

2

2

3

Арифметика

фикс

фикс

фикс

плав

плав

фикс

плав

плав

Длина слова

32

41

31

18 $^*$

40

31

36

45

Длина команды

32

41

31

9

20

31

36

45

Оперативная память:

тип

бар.

ферр.

ртут.

ферр.

ферр.

ферр.

ферр.

ферр.

емкость

1800/32

1024 5 $\uparrow$2

496

81

2048

1024

2048

4096

(ДЗУ)

Цикл обращения

(мксек)

5000/80

10/4

600

90

30

20

20

6

Индекс-регистры

4

1

-

-

-

-

-

1

Скорость (on/ceк)

100

10000

350

4500

5000

2500

5000

20000

Барабан

-

З $\times$ ЗК

$\times$ 8K

-

З $\times$ 4К

Лента

-

-

-

-

IOOK

-

120К

$\times$ 75К

Ввод

п/л

п/л

п/л

п/л

п/л

п/л

п/л

п/к

Вывод

п/л

п/л

п/л

п/л

п/л

п/л

п/л

п/к

т/т

цп

т/т

т/т

цп

т/т

цп

цп

Число ламп

-

2300

1700

40

2100

1200

-

3500

Источники

[28], ч. 1 [101]

[51]

[102]

[103]

[103]

[104]

[105]

[105]

$^*$ Троичные разряды

СПИСОК ЛИТЕРАТУРЫ

1. Цикл статей по математической технике, журн. "Успехи математических наук", вып. 1, ò 5, 6, М., 1946, 3-174:

1) Кобринский Н.Е, Люстерник Л.А., Математическая техника (Введение в цикл); 2) Янжул И.Н., Счетные автоматы и их применение к астрономическим вычислениям; 3) Прошко В.Я., Приборы для определения корней систем линейных уравнений; 4) Буш В., Колдвелл С., Новый дифференциальный анализатор (перевод М.Л. Быховского); 5) Bush V., Eng. D. Sci. D., Caldvell S.H., Sc. D., A New Type of Differential Analyzer, "Journal of the Franklin Institute" 240, No. 4, October 1945 (ref. in [1]); 6) Борн М., Фюртс Р., Принчл Р.В., Фотоэлектрический прибор для функционального преобразования Фурье (перевод М.Л. Быховского); 7) A Photo-Electric Fourier Transformer, "Nature", December 22, 1945, 756-757 (ref. in [1]).

2. Быховский М.Л., Новые американские счетно-аналитические машины, журн. "Успехи математических наук", вып. 2, ò 2, М., 1947. 131-134.

3. Popular Scince, October 1944, p. 86 (ref. in [2]).

4. Popular Science, April 1946, p. 83 .(ref. in [2]).

5. Hartrey D.R., The ENIAC, An Electronic Calculating Machine, "Nature", 157, No. 3990, p. 527 (ref. in [2]).

6. Hartrey D.R., F.R.S., The ENIAC, an Electronic Computing Machine, "Nature", 158, No. 4015 (Saturday), October 12, 1946 (ref, in [8]).

7. H. Aiken Howard, M.Hopper Grace, The Automatic Sequence Controlled Calculator, "Electrical Engineering" No. 8-10, 1946 (ref. in [9]).

8. Хартрей Д.Р., "Эниак" -- электронная счетная машина, журн. "Успехи математических наук", вып. 3, ò 5, М., 1948, 146-158.

9. Айкен Х.Х., Хоппер Г.М., Автоматически управляемая вычислительная машина, журн."Успехи математических наук", вып. 3, ò 4, М., 1948, 119-142.

10. Theoty and Techniques for Design of Electronic Digital Computers (Lectures given at the Moore School, July 8 to August 31, 1946), University of Pensylvania, Moore School of Electrical Engineering, Philadelphia, 1946, v. 1-4, 600 p. (ref. in [20]).

11. Burks A.W., Goldstine H.H., Neulmann J., Preliminary Discussion of the Logica-Design of an Electronic Computing Instrument, Institute for Advanced Study, Princeton, N.J., July 1946 (ref. in [17]).

12. Burks A.W., Goldstine H.H., Neumann J., Report on the Mathematical and Logical Aspects of an Electronic Computing Instrument, Part I, Ed. 2, Princeton, N.J., 1947 (ref. in [17]).

13. Burks A.W., Goldstine H.H., von Neumann J., Preliminary Discussion of the Logical Design of an Electronic Computing Instrument. 2nd Edition. Princeton, N.J. The Institute for Advenced Study, 1947 (ref. in [19]).

14. Proceedings of а Symposium on Large-Scale Digital Computing Machinery (held in Harward Computational Laboratory in 1947), The Annals of the Computational Laboratory of Harward University, v. 16, Cambridge, Mass., 1948, 302 р.

15. Быховский М.Л., Основы электронных математических машин дискретного счета, журн. "Успехи математических наук", вып. 4, ò 3, М., 1949, 69-124.

16. Stiffler W.W., Ed., High-Speed Computing Devices, by the Staff of Engineering Research Associates, Inc., Supervised by Tompkins C.B., Wakelin J.N., First Edition, 1950 (ref. in [7]).

17. Быстродействующие вычислительные машины, Перевод с английского под ред. Панова Д.Ю., ИЛ, М., 1952, 431 стр.

18. Murray Francis J., The Theory of Mathematical Machines, Revised sdition, 1948 (ref. in [19]).

19. Муррей Ф., Теория математических машин, Перевод с английского Садовского Л.Е., ИЛ, М., 1949, 328 стр.

20. Rutishauser Н., Speiser A. und Stiefel E., Programmgesteuerte digitale Rechengerate (elektronische Rechenmaschinen), "Zeitschrift fur angewandte Mathematik und Physik (ZAMP)": 1. Teil, v. 1, ò 5 (15.9.1950), 277-297; II. Teil, v. 1, ò 6 (15.II.1950), 339-362; III. Teil, v. II, ò 1 (15 .1.1951), 1-25; Schlup, v. 11, ò 2 (15.3. 1951), 63-91.

21. Рутисхаузер Г., Шпайзер А., Штифель Э., Электронные цифровые счетные машины с программным управлением, сб: "Вопросы ракетной техники" (сокращенные переводы иностранной периодической литературы), М., вып. 2, 1952, 134-163; вып. 3, 132-151; вып. 4, 140-151; вып. 5, 161-174.

22. МЭСМ, "Энциклопедия кибернетики", т. 2, изд-во "Наукова думка", К., 1974, 36 стр.

23. Люстерник Л.А., Абрамов А.А., Шестаков В.И., Шура-Бура М.Р., Решение математических задач на автоматических цифровых машинах, в кн. "Программирование для быстродействующих электронных счетных машин", Изд-во АН СССР, М., 1952, 327 стр.

24. Goldstine H.H., von Neumann J., Ed. 2, Princeton, N. J., The Institute for Advanced Study, 1947 (ref. in [19]).

Planning and Coding for an Electronic Computing Instrument, v. 1 (69 p.), v. 2 (68 p.), v. 3 (23 p.), Institute for Advanced Study, Princeton, N.J., 1947 -- 194 (ref. in [20]).

25. Wilkes M.V., Programme Design for High-Speed Automatic Calcylating Machine, "Journ. Sci. Instr.", 26, 1949, 217-220 (ref. in [20]).

26. Wilkes Maurice V., Wheeler David J., Gill Stanley, The Preparation of Programs for an Electronic Digital Computer, Cambridge, Mass., 1951 (ref. in [27]).

27. Уилкс М., Уилер Д., Гилл С., Составление программ для электронных счетных машин (Перевод с английского Жидкова Н.П.), ИЛ, М., 1953, 208 стр.

28. Конференция "Пути развития советского математического машиностроения и приборостроения". Пленарные заседания (132 стр.). Секция универсальных цифровых машин, ч. 1 (230 стр.), ч. II (259 стр.), ч. 111 (180 стр.), Москва, 12-17 марта 1956 года. Напечатано ВИНИТИ по решению оргкомитета конференции: 1) Ляпунов А.А., Янов Ю.И., 0 логических схемах программ, ч. III, 5-8; 2) Камынин С.С., Любимский Э.З., Автоматизация программирования, 9-17; 3) Ершов А.П., Программирующая программа для БЭСМ, АН СССР, 18-29; 4) Канторович Л.В., Петрова Л.Т., Яковлева М.А., Об одной системе программирования, 30-36.

29. Конференция "Пути развития советского математического машиностроения и приборостроения" (Программа), Москва, 12-17 марта 1956 года, 8 стр.

30. ХХ съезд Коммунистической партии Советского Союза, Стенографический отчет, т. II, Политиздат, М., 1956.

31. Ершов А.П., Ляпунов А.А., О формализации понятия программы, журн. "Кибернетика", ò 5, К., 1967, 40-57.

32. Ершов А.П., Современное состояние теории схем программ, сб. "Проблемы кибернетики", вып 27, изд-во "Наука", М., 1973.

33. Китов А.И., Электронные цифровые машины, изд-во "Советское радио", М., 1956, 276 стр.

34. Погорелый С.Д., Пшеничный Л.И., Организация управления обменом в мини-ЭВМ, журн. "Программирование", ò 1, M., 1976, 48-52.

35. Труды III Всесоюзного математического съезда. Москва, июнь-июль 1956 года, т. II, Краткое содержание обзорных и секционных докладов, АН СССР, М., 1956.

36. Сессия Академии наук СССР по научным проблемам автоматизации производства, 1956, Пленарные заседания, АН СССР, М., 1957.

37. Rochester N., Symbolic Programming, "IRE Transactions", EC-2, ò 1, 1953, 10-15 (ref. in [33]).

38. Жоголев Е.А., Росляков Г.С., Трифонов Н.П., Шура-Бура М.Р., Система стандартных подпрограмм (под. ред. Шуры-Буры М.Р.), ГИФМЛ, М., 1958, 231 стр.

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

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

41. Ершов А.П., Ким К.В., Программирующая программа для вычислительной машины "Стрела-3" (ППС), изд. ВЦ АН СССР, М., l961, 63 стр.

42. Сборник "Проблемы кибернетики" (под. ред. Ляпунова А.А.), вып. 1, ГИФМЛ, М., 1958, 46-74, 135-189: 1) Ляпунов А.А., О логических схемах программ; 2) Камынин С.С., Любимский Э.З., Шура-Бура М.Р., Об автоматизации программирования при помощи программирующей программы; 3) Луховицкая Э.С., Блок обработки логических условий в ПП-2; 4) Любимский Э.З., Арифметический блок в ПП-2; 5) Камынин С.С., Блок переадресации в ПП-2; 6) Штаркман В.С., Блок экономии рабочих ячеек в ПП-2.

43. Сборник "Система автоматизации программирования" (под ред. Трифонова Н.П. и Шуры-Буры М.Р.), ГИФМЛ, М., 1961, 187 стр.: Раздел I. Система программирования с использованием библиотеки подпрограмм, 15-70. Раздел II. Программирующая программа, 71-148. Раздел III. Автоматизация отладки программ и контроля вычислений, 149-187.

44. Всесоюзное совещание по вычислительной математике и вычислительной технике (Программа), Москва, 16-21 ноября 1959 года, Изд-во МГУ, 1959: 1) Шура-Бура М.Р., Интерпретирующая система на ЭВМ; 2) Камынин С.С., Система стандартных подпрограмм для метода ИС-2; 3) Собельман В.И.,

Вспомогательные программы ИС-2; 4) Мартынюк В.В., Программа автоматического присвоения адресов.

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

46. Мартынюк В.В., О методе символических адресов, сб. "Проблемы кибернетики", вып. 6, ГИФМЛ, М., 1961, 45-58.

47. Королюк В.С., Об одном способе программирования, Доклады АН УССР, ò 12, М., 1958, 1292-1295 (укр.)

48. Королюк В.С., О понятии адресного алгоритма, сб. "Проблемы кибернетики", вып. 4, ГИФМЛ, М., 1960, 95-100.

49. Ющенко Е.Л., Адресное программирование, ГИТЛ УССР, К., 1963, 288 стр.

50. Вгооkег К.А., The Autocod Programs Developed for the Manchester University Computers, Reprinted from the "Computer Journal", 1958, 8 р.

51. Глушков В.М., Ющенко Е.Л., Погребинский С.Б. и др., Вычислительная машина "Киев", ГИТЛ УССР, К., 1962, 183 стр.

52. Труды Математического института им. В.А. Стеклова, LXVI, Работы по автоматическому программированию, численным методам и функциональному анализу, Изд-во АН СССР, М. -- Л., 1962, 4-112: 1) Яковлева М.А., Крупноблочная система программирования; 2) Петрова Л.Т., Платунова И.А., Реализация на машине вычислений в исходном классе списков; 3) Первозванская Т.Н., Проведение аналитических выкладок на ЭВМ при решении некоторых типов дифференциальных уравнений; 4) Шахбазян К.В., Исчисление программ функциональных операций; 5) Смирнова Т.Н., Полиномиальный прораб и проведение аналитических выкладок на ЭВМ.

53. Ершов А.П., О программировании арифметических операторов, Доклады АН СССР, 118, ò 3, М., 1958, 427-430.

54. Королев Л.Н., Кодирование и свертывание кодов, Доклады АН СССР, 113, ò 4, М., 746-747.

55. Королев Л.Н., Методы выборки нужного слова из словаря, сб. "Вычислительная техника", Изд-во AH СССР, М., 1958, 116-118.

56. Адельсон-Вельский Г.М., Ландис Е.М., Один алгоритм организации информации, Доклады АН СССР, 146, ò 2, М., 1962, 263-266.

57. Брудно А.Л., Грани и оценки для сокращения перебора вариантов. сб. "Проблемы кибернетики", вып. 10, ГИФМЛ, М., 1963, 141-150.

58. Калужнин Л.А., Об алгоритмизации математических задач, сб. "Проблемы кибернетики", вып. 2, ГИФМЛ, М., 1959, 51-68.

59. Ершов А.П., Операторные алгоритмы, ч. 1 (Основные понятия), сб. "Проблемы кибернетики", вып. 3, ГИФМЛ, М., 1960, 5-48; ч. II (Описание основных конструкций программирования), сб. "Проблемы кибернетики", вып. 8, ГИФМЛ, М., 1962, 211-233.

60. Любимский Э.З., Об автоматизации программирования и методе программирующих программ, Автореферат диссертации, МИАН СССР, М., 1958.

61. Когоlеv L.N., Some Methods of Automatic Coding for BESM and STRELA Computers, "Computer Programming and Artificial Intelligence", Lectures given at the University of Michigan Summer 1958 (Edited by John W. Сагг III), College of Engineering, 489-510.

62. Ershov A.P., Works of the Computing Center of the ASCII of the USSR in the Feild of Automatic Programming, Proceedings of the Symposium on The Mechanization of Thought Processes held at the NPL, Teddington, November 24-27, 1958.

63. Ershov A.P., Automatic Programming in the Soviet Union, "Datamation", 5, ò 4, 1959, 14-20.

64. Report on the Algorithmic Language ALGOL (Edited by Perlis A.J. and Samelson K.), "Communications of the ACM", 1, ò 12, 1958.

65. Автоматизация программирования (Сборник переводов под ред. Ершова А.П.), ГИФМЛ, М., 1961, 368 стр.: ФОРТРАН ЮНИКОД СОАН 2 ИТ ФОРТРАНЗИТ АЛГОЛ.

66. Ершов А.П., Какой должна быть следующая программа? Всесоюзное совещание по вычислительной математике и вычислительной технике (Программа), Москва, 16-21 ноября 1959 года (опубликовано в [79]).

67. Сообщение об алгоритмическом языке АЛГОЛ (пол ред. Перлиса А. Дж., Замельзона К., перевод Ершова А.П.), ВЦ АН СССР, М., 1959, 35 стр.

68. Backus J.W., Bauer F.L., Green J., Katz С., Mc Carthy J., Naur P., Perlis A.J., Rutishauser H., Samelson K., Vauquois B., Wegstein J.H., Van Wijnngaarden А., Woodger М., Report on the Algorithmic Language ALGOL 60 (Edited by Peter Naur), "ALGOL Bulletin Supplement", ò 2, 1, March 1960, Regnecentralen, Valby, Denmark.

69. Бэкус Дж.В., Бауэр Ф.Л., Грин Дж., Кэтц С., Маккарти Дж., Наур П., Перлис Э.Дж., Рутисхаузер Х., Замельзон К., Вокуа Б., Уэгстейн Дж., Ван-Вейнгаарден А., Вуджер М., Сообщение об алгоритмическом языке АЛГОЛ 60 (под ред. Петера Наура, перевод Кожухина Г.И. под ред. Ершова А.П., ВЦ АН СССР, М., 1960); "Журнал вычислительной математики и математической физики", 1, ò 2, М., 1961, 308-342.

70. Ершов А.П., Кожухин Г. И., Волошин Ю. М., Входной язык системы автоматического программирования (предварительное сообщение), ВЦ АН СССР, М., 1961, 175 стр.

71. "Communications of the Association for Computing Machinery", 4, ò 1, January 1961.

72. Шура-Бура М.Р., Ершов А.П., Машинные языки и автоматическое программирование, Труды IV Всесоюзного математического съезда, Ленинград, 3-12 июля 1961 года, т. 1. Пленарные доклады, Изд-во АН СССР, Л., 1963, 243-250.

73. Попов В.Н., Степанов В.А., Стишева А.Г., Травникова Н. А., Программирующая программа, "Журнал вычислительной математики и математической физики", 4, ò 1, М., 1964, 78-95.

74. Шура-Бура М.Р., Любимский Э.З., Транслятор АЛГОЛ 60, "Журнал вычислительной математики и математической физики", 4, ò 1, М., 1964, 96-112.

75. Бабецкий Г.И., Бежанова М.М., Волошин Ю.М., Ершов А.П., 3агацкий Б.А., Змиевская Л.Л., Кожухин Г.И., Кожухина С.К., Мишкович Р.Д., Михалевич Ю.И., Поттосин И.В., Трохан Л.К., Система автоматизации программирования АЛЬФА, "Журнал вычислительной математики и математической физики", 5, ò 2, М., 1965, 317-325.

76. Ершов А.П., Кожухин Г.И., Волошин Ю.М., Входной язык для систем автоматического программирования, СО АН СССР, Новосибирск, 1964.

77. Собельман В.И., Шура-Бура М.Р., Реализация рекурсивных процедур в языке АЛГОЛ 60, "Журнал вычислительной математики и математической физики", 2, ò 2, М., 1962, 303-316.

78. Шура-Бура М.Р., Мартынюк В.В., Об эффективной организации динамического использования памяти, "Журнал вычислительной математики и математической физики", 4, ò 5, М., 1962, 963-967.

79. Бабецкий Г.И. и др. (см. [75]), АЛЬФА -- система автоматизации программирования (под ред. Ершова А.П.) изд-во "Наука", СО, Новосибирск, 1967, 308 стр.

80. Описание языка АЛГАМС, сб. "Алгоритмы и алгоритмические языки", вып. 3, изд. ВЦ АН СССР, М., 1968, 3-56.

81. Суржиков С.П., Автоматизация пользования машиной среднего класса типа М-20, Автореферат -- 2, I Всесоюзная конференция по программированию, Киев, октябрь 1968 года, Институт кибернетики АН УССР, К., 1968.

82. Катков В.Л., Морозов В.П., Поттосин И.В., Рар А.Ф., Семенова Л.Я., Хоперсков А.Е., ЭПСИЛОН -- система автоматизации программирования задач символьной обработки, изд-во "Наука", СО, Новосибирск, 1972.

83. Катков В.Л., Рар А.Ф., Программирование на языке ЭПСИЛОН, изд-во "Наука", СО, Новосибирск, 1972.

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

85. Ершов А.П., Программирование-68 (Вступительный доклад на I Всесоюзной конференции по программированию), Киев, октябрь 1968 года, Труды семинара "Автоматизация программирования", AH УССР, К., 3-26.

86. Китов А.И., Криницкий Н.А., Комолов П. Н., Элементы программирования, Изд-во Артиллерийской инженерной академии им. Ф.Э. Дзержинского, М., 1956.

87. Китов А.И., Криницкий Н.А., Электронные цифровые машины и программирование, ГИФМЛ, М., 1959, 572 стр.

88. Гнеденко Б.В., Королюк В.С., Ющенко Е.Л., Элементы программирования, ГИФМЛ, М., 1961, 348 стр.

89. Жоголев Е.А., Трифонов Н.П., Курс программирования, изд-во "Наука", М., 1964, 388 стр.

90. Мухин И.С., Страговин А.М., Форма контуров равноустойчивых откосов, "Инженерный сборник", ò 23, М., 1956, 121-131.

91. Янов Ю.И., О равносильности и преобразованиях схем программ, Автореферат диссертации, МИАН СССР, М., 1957.

92. Кулагина О.С., Некоторые теоретические вопросы машинного перевода, Автореферат диссертации, МИАН СССР, М., 1958.

93. Королев Л.Н., Некоторые вопросы теории машинного словаря, Автореферат диссертации, ИТМиВТ АН СССР, М., 1959.

94. Семинары по кибернетике в Московском университете, сб. "Проблемы кибернетики", вып. 1, ГИФМЛ, М., 1958, стр. 263.

95. Лавров С.С., Об экономии памяти в замкнутых операторных схемах, "Журнал вычислительной математики и математической физики", 1, ò 4, М., 1961, 687-701.

96. Ершов А.П., Сведения задачи распределения памяти при составлении программ к задаче раскраски вершин графов, Доклады АН СССР, 142, ò 4. М., 1962, 785-787.

97. ЦСУ СССР. СССР в цифрах в 1975 году, изд-во "Статистика", М., 1976.

98. Ершов А.П., Основные принципы построения программирующей программы Института математики СО АН СССР, "Сибирский математический журнал", 2, ò 6, Новосибирск, 1961, 835-852.

99. Быстродействующая вычислительная машина М-2 (под ред. Брука И.С.), ГИТТЛ, М., 1957, 228 стр.

100.Белынский В.В., Долкарт В.М., Каган Б.М., Лопато Г.П., Матюхин Н.Я., Малогабаритная электронная вычислительная машина M-3, Филиал ВИНИТИ, М., 1957, 87 стр.

101. Гильман Л.Л., О некоторых приемах программирования в коде ЭВМ ГИФТИ, сб. "Проблемы кибернетики", вып. 3, ГИФМЛ, М., 1960, 139-148.

102. Михайлов Г.А., Шитиков Б.Н., Явлинский Н.А., Цифровая электронная счетная машина ЦЭМ-1, сб. "Проблемы кибернетики", вып. 1, ГИФМЛ, М., 1958, 190-202.

103. Криницкий Н.А., Миронов Г.А., Фролов Т.Д., Программирование (под ред. Шуры-Буры М.Р.), ГИФМЛ, М., 1963, 383 стр.

104. Илзиня И.Г., Программирование для двухадресных цифровых вычислительных машин, Изд-во АН ЛатССР, Рига, 1962.

105. Криницкий Н.А., Миронов Г.А., Фролов Т.Д., Программирование, изд-во "Наука", М., 1966.