А.П. Ершов, М.Р. Шура-Бура. Становление программирования в СССР (переход ко второму поколению языков и машин)
Препринт №13 ВЦ СО АН СССР
Новосибирск 1976
Р е з ю м е
Данная работа завершает исследование становления программирования в СССР, содержащееся в препринте этих же авторов "Становление программирования в СССР (начальное развитие)" ВЦ СО АН СССР, 1976 г.
Авторы подчеркивают роль Алгола 60 в интернационализации научных исследований в области программирования и придании им общезначимого характера. В заключение авторы дают критический анализ предмета, обсуждая причины ряда пробелов в развитии программирования в СССР.
В конце приводится библиография источников, использованных в обеих частях исследования.
Исследование подготовлено для трудов международной научной конференции по истории вычислительного дела, состоявшейся в Лос-Аламосе (США) с 10 по 15 июня 1976 года.
1. Новые рубежи (1959-1963)
В течение 6-й пятилетки в пределах доступных ресурсов проходила интенсивная работа по конструированию ЭВМ. В дополнение к первым ЭВМ (Таблица 1) появилось еще, по крайней мере, 8 типов ЭВМ, даже не считая воспроизведений по документации (см. Таблицу 3). За исключением Урала 2 и М-20, роль остальных разработок была промежуточной. Одни были индивидуальными разработками типа "сделай сам" (ГИФТИ, ЦЭМ-1), другие были промежуточным этапом в поисках основного направления разработок (Киев), третьи - экспериментального характера (Сетунь). В основном же, если не считать попутного освоения ферритовой памяти, эти модели стали своего рода ламповыми прототипами приближающегося поколения полупроводниковых машин.
В ноябре 1959 г. в Москве, в МГУ состоялось "Всесоюзное совещание по вычислительной математике и вычислительной технике". Несмотря на скромное название, это было грандиозное научное собрание с почти 2000 участников и 217 докладами, прочитанными на четырех секциях [44]. К сожалению, организаторам не удалось собрать доклады и издать труды совещания.
На пленарном заседании ШБ и АЕ было поручено выступить с обзорным докладом "Современное состояние автоматизации программирования". Доклад был сделан, однако справедливости ради следует признать, что единого взгляда на проблематику в этот момент выработать не удалось.
К концу 50-х годов у каждого из авторов сложилась своего рода программа деятельности на будущее. Эти взгляды нашли свое частичное выражение в ряде работ, в том числе и среди представленных этому совещанию [45,78]. Дело, однако, не столько в самих работах, сколько в контексте, определявшем подход авторов.
ШБ довелось принять участие в проектировании логической структуры ЭВМ М-20. Надо сказать, что это была одна из немногих моделей ЭВМ, при создании которой объединились проектанты, конструкторы и математики, представленные ИТМ и ВТ, конструкторским бюро, создавшим машину "Стрела", и МИАНом. Эта солидная основа возлагала большую ответственность на разработчиков, поскольку машине, а более точно ее архитектуре, предстояло воплотиться в нескольких крупных сериях (М-20, БЭСМ-3, БЭСМ-3М, БЭСМ-4, М-220, М-220М, М-222). В частности, масштабы использования средств программирования возрастали неизмеримо, и сложившиеся прецеденты накопления натурального программного хозяйства, еще как-то приемлемые для уникальных научных вычислительных центров, уже совершенно не годились для будущей машины. Постепенно складывалась концепция математического обеспечения - интегрированной и удобной в работе системы различных средств программирования (библиотеки, трансляторы, средства отладки), сопряженной с определенной дисциплиной прохождения задач на машине. Для ШБ важными предпосылками для формирования философии были экспериментальные системные проекты в Вычислительном центре МГУ ([38], [43]), а также повседневный опыт организации производственных вычислений в МИАН, требовавших большой четкости и высокой надежности работы как оборудования, так и программ.
На пути к полному пониманию проблемы математического обеспечения ЭВМ, не говоря уже о ее решении в сколько-нибудь полном объеме, было много препятствий и научно-технического и организационного характера и, в частности, одно из них - слабая разработанность концепции программного модуля. Опыт работы с машинами "Стрела" отчетливо показал, что дивергенция средств программирования в целом неизбежна, если не будет единой и нерушимой основы, сооружаемой непосредственно на "голой машине". Для М-20 в то время такой вещью была библиотека стандартных подпрограмм. Идея превращения библиотеки в переносимый и общий программный продукт стала для ШБ в это время главной задачей, на решении которой со временем сформировались более общие взгляды на программное обеспечение. ИС-2 стала своего рода мини-ОС, обеспечивающей "в последней инстанции" определенную однородность строения исполняемых программ.
Возвращаясь ко 2-му соавтору пленарного доклада, следует отметить, что АЕ интересовали в то время совершенно другие проблемы. Продолжая работать над трансляторами и их входными языками, он находился в состоянии "научной возгонки", переходя от одной версии к другой в поисках новых идей или углубления во внутреннюю проблематику языков и трансляторов. Сколачивая коллектив системных программистов в организуемом в то время Сибирском отделении АН СССР и переваривая информацию, полученную во время перевода новых (главным образом, американских) работ по автоматизации программирования [72], он стремился увлечь своих новых сотрудников довольно-таки амбициозным проектом "Сибирского языка программирования" [78].
Нетрудно понять, что эти два взгляда, хотя и объективно обусловленные, лежали, так сказать, в разных плоскостях, что, кстати, и проявилось во время дискуссий на Совещании. Необходимо было найти некоторый объект конструирования и научной работы, который, одновременно, решал бы задачу унификации математического обеспечения, мог бы быть эффективным средством программирования и выдвигал бы новую научную проблематику. Таким объектом стал Алгол 60.
Как мы уже упоминали, первое знакомство с проектом западногерманских и американских специалистов состоялось в августе 1958 года, когда А. Перлис привез предварительную версию публикации [71] в СССР. Первыми ее читателями были сотрудники Вычислительного центра АН СССР, работавшие в то время над транслятором ППС [41], и начальная группа сотрудников будущего Вычислительного центра Сибирского отделения АН СССР. Общая схема языка была положена в основу проекта "Сибирского языка" системы программирования для М-20. В то же время стала совершенно очевидной общенаучная ценность этого документа, которая требовала его широкого распространения. Не дожидаясь публикации сборника переводов [72], описание Алгола в переводе АЕ было издано Вычислительным центром и распространено на ноябрьском совещании 1959 года [80].
Тем временем усилия международного коллектива ученых завершились выработкой законченной спецификации нового алгоритмического языка. Редактор "Сообщения об алгоритмическом языке Алгол 60" [81] Петер Наур поддержал контакт с советскими коллегами, что позволило уже в марте 1960 года подготовить для публикации перевод "Сообщения", выполненный Г.И. Кожухиным. Этот перевод был опубликован в мае 1960 г. в издательстве Вычислительного центра АН СССР, а через год - в новом "Журнале вычислительной математики и математической физики" [82].
Ситуация весной 1960 года оказалась весьма благоприятной для Алгола 60 в качестве единого языка программирования научных и инженерных применений ЭВМ. Авторы уже говорили об общих предпосылках к унификации языка. Алгол 60 не только обладал очевидными достоинствами, выдвигая в то же время интересную научную проблему, но и, будучи международным "комитетским" языком, ставил в равную позицию любую индивидуальную оценку языка, отодвигая тем самым на второй план субъективные или "вкусовые" точки зрения. Другим благоприятным моментом было отсутствие инерции, поскольку количество "Стрел" и БЭСМ не шло ни в какое сравнение с потоком выпускаемых машин типа М-20.
В июне 1960 г. в Вычислительном центре АН СССР состоялось координационное совещание по вопросам реализации Алгола 60.На фоне общей и во многом разнонаправленной активности выделились три проекта реализации языка для М-20, руководимые С.С. Лавровым, ШБ и АЕ, получившие, соответственно, названия ТА-1, ТА-2 и Альфа. Начавшись как три независимые и подчас конкурирующие разработки, они в процессе их развития приобрели взаимодополняющие свойства, решив в целом удовлетворительно проблему снабжения М-20 трансляторами с Алгола 60.
ШБ попытался решить проблему унификации конкретного представления, с тем чтобы достичь совместимости трансляторов по входу. К сожалению, технические различия во взглядах возобладали, и в полном объеме решить проблему не удалось. Серьезным препятствием на этом пути стало отсутствие в то время у М-20 стандартного буквенно-цифрового оборудования для ввода и вывода, что побудило разработчиков и пользователей временно решать эту проблему каждый по-своему. Кроме того, разгон, взятый АЕ в разработке "Сибирского языка", оказался слишком велик, чтобы остаться в рамках Алгола 60. Проект был адаптирован таким образом, чтобы стать расширением Алгола 60, и в таковом качестве он получил название "Входного языка" [83], а в его конкретным представлении - Альфа-языка. Наиболее существенным расширением было введение комплексных и многомерных величин в качестве аргументов и результатов основных операций, а также операций формирования и членения таких величин.
В то же время все три транслятора базировались на системе ИС-2 для обращения к стандартным подпрограммам.
22-24 декабря 1960 г. в МГУ состоялась рабочая конференция "Построение программирующих программ на основе языка АЛГОЛ". К этому времени у разработчиков уже сложились общие подходы к реализации языка и выбору схем трансляции. В ТА-1 благодаря отказу от возможной рекурсивности процедур и ряду других ограничений была выбрана компактная и быстрая схема трансляции без оптимизации. Главной задачей ТА-2 стала реализация практически полного языка без существенной потери в качестве реализации. В разработке системы Альфа было поставлено в качестве главной цели обеспечение высокого качества рабочих программ с сохранением приемлемой скорости трансляции ([92], стр. 264). В докладе разработчиков системы Альфа был создан, можно сказать, классический прецедент просчета в определении плановых показателей больших программных работ с универсальным коэффициентом недооценки 2-3, подтвержденном впоследствии многими проектами: авторы клали на разработку системы 15 человеко-лет для построения 15 000 команд, затратив на самом деле свыше 30 человеко-лет и соорудив систему в 45 000 команд ([92], стр. 64).
В дальнейшем на технические решения разработчиков оказали существенное влияние материалы проходившей почти одновременно в США конференции по методам трансляции с Алгола 60, многие доклады которой были опубликованы в одном из самых известных среди системных программистов выпусков журнала "Эй-Си-Эм Коммьюникейшнз" [84].
Общественное признание Алгола 60 нашло свое выражение в приглашенном обзорном докладе ШБ и АЕ "Машинные языки и автоматическое программирование", с которым они выступили на пленарном заседании 4-го Всесоюзного математического съезда, состоявшегося в Ленинграде в июле 1961 г. [85]. Авторам кажется уместным привести из него некоторые выдержки:
"... В том случае, когда речь идет о численном решении математических задач, необходимо считаться с наличием общепринятого языка математического описания, который хотя и не достаточно формализован, : все же достаточно выразителен и, что особенно важно, общепонятен. В связи с этим : желательно сделать исходный язык по возможности наиболее близким к обычному языку математического описания."
"... Употребление универсального языка программирования снимает задачу перевода программ с одной машины на другую, дает возможность избежать дублирования работ по составлению программ для различных машин и существенно облегчает обмен информацией между отдельными группами, работающими в области программирования."
"... Надо сказать, что в настоящее время работа по созданию универсального языка (прежде всего для описания алгоритмов численного анализа) продвинута в значительной степени благодаря инициативе и деятельности ряда западноевропейских и американских ученых. Результатом этой работы и обсуждений, проводившихся в течение почти полутора лет, явился проект международного языка программирования, известный под названием АЛГОЛ-60."
"... Все эти стороны АЛГОЛа - возможность ступенчатого расчленения алгоритма на части, установление контекста для того или иного понимания употребляемых обозначений, возможность введения произвольных функциональных обозначений : - в значительной степени приближают АЛГОЛ к общеупотребительному языку "математического описания" вычислительного процесса."
Параллельно работам по Алголу 60 развивались события, приведшие к организации ассоциации пользователей ЭВМ М-20. Уже на июньское совещание по Алголу 60 были приглашены представители организаций, использующих М-20, для того чтобы решить вопросы реализации с учетом общественного мнения пользователей. На декабрьской конференции 1960 г. по реализации Алгола 60 среди участников была распространена информация о предстоящем учредительном собрании членов ассоциации, которое состоялось в начале 1961 года. ШБ был избран председателем совета ассоциации.
В июле 1961 года ассоциация решением Президиума Академии наук СССР получила статус юридического лица и официальное название "Комиссия по эксплуатации вычислительных машин М-20". Вот выдержки из первого положения этой Комиссии:
"... Комиссия по эксплуатации вычислительных машин М-20 : является межведомственным координирующим органом в области эффективной эксплуатации вычислительных машин М-20.
"... Для выполнения указанной задачи Комиссия:
а) организует регулярный обмен информацией по эксплуатации машин участникам комиссии и вырабатывает рекомендации по эксплуатации машин, организует консультации по соответствующим вопросам;
б) вырабатывает единый язык программирования и организует обмен программами и алгоритмами;
в) организует работу по созданию стандартных программ, координируя работы, проводимые в организациях членами Комиссии;
г) проводит работы по автоматизации программирования на М-20;
д) организует конференции, посвященные вопросам эксплуатации машин М-20."
Деятельность Комиссии была важна не только созданием прецедента, за которым последовало создание аналогичных ассоциаций для БЭСМ-2, для серии "Урал", а чуть позже - для серии "Минск", но и ускорением разработки концепции математического обеспечения - слова, вошедшего в употребление в 1963 году. Несколько забегая вперед, заметим, что библиотека программ ИС-2, трансляторы ТА-1 и ТА-2 стали первыми образцами программного продукта, которые поставлялись вместе с оборудованием заводом-изготовителем, образуя интегрированную систему программирования.
Тем временем приближалась к концу разработка трансляторов с Алгола. Отчетные публикации появились для ТА-1 и ТА-2 в начале 1964 г. [86, 87], для системы Альфа - годом позже [88, 89].
Охарактеризуем коротко технические результаты по методам трансляции, полученные при выполнении этих работ.
В трансляторе ТА-1 была реализована разработанная Г.М. Заикиной и С.С. Лавровым общая схема программирования выражений с помощью стека, использующая трактовку знака операций как обобщенных парных ограничителей и разделителей [86].
В трансляторе ТА-2, как авторы уже отмечали, был реализован практически полный Алгол 60, впервые был систематически применен метод таблично-управляемой генерации машинных конструкций операторов языка, реализован новый алгоритм реализации рекурсивных процедур, не требующий размножения "санков" [90]; в пределах, допустимых оборудованием М-20, было реализовано поле "математической памяти" со сплошной адресацией, включая как оперативную, так и внешнюю памяти [91].
В трансляторе Альфа была систематически применена функция расстановки для ускорения работы транслятора ([92], стр. 35), в частности, для экономии совпадающих выражений ([92], стр. 187), применена многовариантная система программирования процедур ([92], стр.92) и циклов ([92], стр. 153), основанная на анализе структуры программы; реализована глобальная экономия памяти ([92], стр. 201), основанная на теории, разработанной С.С. Лавровым [109] и АЕ [110], а также осуществлен ряд других оптимизационных преобразований на уровне промежуточного языка, в частности, объединение циклов с одинаковыми заголовками ([92], стр. 112) и чистка циклов ([92], стр.153).
Научные итоги разработки трансляторов были подведены на 2-й региональной конференции социалистических стран, состоявшейся в Киеве летом 1963 г., и на конференции ассоциации пользователей М-20, состоявшейся в Новосибирске в январе 1964 г. Последняя запомнилась участникам горячими дискуссиями и трескучими морозами ниже -40°С. На конференции в Киеве были заложены основы распространения координации работ по программированию на уровень международного сотрудничества. В дальнейшем была создана рабочая группа ГАМС, выработавшая проект международного стандарта на подмножество Алгола 60, известное под названием АЛГАМС [93].
В 1963 г. в Вычислительном центре Сибирского отделения АН СССР состоялись первые эксперименты, выполненные С.П. Суржиковым, по автоматизации пакетной обработки программ с формированием пакета на перфокартах. Для этих целей была несколько модифицирована ЭВМ М-20 путем добавления системы прерывания и небольшого процессора ввода-вывода. Это был один из немногих прототипов однопрограммной операционной системы для пакетной обработки, реализованный на ЭВМ 1-го поколения. Впоследствии эта работа легла в основу одной из модернизаций М-20, приведшей к модели М-222 [94].
Появление ЭВМ 2-го поколения (Минск 2, Раздан 2, БЭСМ-3, М-220, БЭСМ-6, Днепр и др.) в целом опередило созревание концепции математического обеспечения и идентификацию системного программирования. Предпосылки к исправлению положения сложились, однако, именно в этот период 1959-1963 годов. Начиная с 1964 года, разработка математического обеспечения стала элементом государственной технической политики. Государственный комитет по науке и технике стал одновременно и координатором работ по математическому обеспечению существующих машин и генеральным заказчиком промышленности на математическое обеспечение вновь создаваемых ЭВМ. Ассоциации пользователей ЭВМ активно представляли научно-техническое общественное мнение и играли существенную роль в распространении новых программ. Апробация новых систем программирования, а впоследствии и операционных систем, проводилась междуведомственной комиссией по математическому обеспечению под председательством академика А.А. Дородницына и целевыми комиссиями, осуществляющими приемку новых компонент математического обеспечения.
Деятельность рабочей группы ГАМС и некоторых других рабочих групп создала прецеденты международного научно-технического сотрудничества, нашедшего впоследствии свое большое развитие в работах по ЕС ЭВМ ("Ряд").
Интенсивная работа над трансляторами с Алгола привела к исчезновению профессии вспомогательного программиста-кодировщика и замене ее на профессионального системного программиста. Снабдив пользователей средствами автоматизации программирования, системные программисты обнаружили себя в роли сапожников, которые ходят без сапог. Все первые трансляторы писались в 8-ричном машинном коде с минимальными средствами автоматизации. Это привело к появлению первых языков системного программирования [95, 96] и первой системе построения трансляторов, основанной на промежуточном машинно-ориентированном языке АЛМО [97]. В 1964 году началось проектирование первых мультипрограммных операционных систем для пакетной обработки с использованием загрузчиков и ассемблеров, работающих в автоматическом режиме с помощью языков управления заданиями. Большую роль в формировании современного взгляда на математическое обеспечение и архитектуру ЭВМ сыграл Конгресс ИФИП 1965 года, когда концепции совместимых серий машин, разделения времени, мини-ЭВМ стали объектом делового интереса советских специалистов. Некоторое представление о спектре советских работ по системному программированию в 60-е годы дает тематическое разбиение 99 докладов, представленных 1-й Всесоюзной конференции по программированию, состоявшейся в Киеве в октябре 1968 года [98]:
- общие обзоры 3
- процедурные языки и трансляторы 14
- коммерческие языки и трансляторы 9
- операционные системы 14
- системы разделения времени 2
- архитектура систем 12
- технология программирования 12
- прикладные программы 11
- теоретическое программирование 22
2. Эволюция образования по программированию
В СССР существует один уровень высшеобразовательной аттестации (дипломированный специалист) и два уровня научных степеней (кандидат наук и доктор наук). Дипломированный специалист выпускается университетами, политехническими (типа технических университетов или технических школ) и специализированными отраслевыми институтами по окончании (обычно) пятилетнего курса (без промежуточной аттестации) и для университетского образования примерно равен магистру наук. Кандидат наук примерно соответствует доктору философии (PhD), а доктор, обычно не имея аналога в западных университетах, по квалификации соответствует "полному" профессору.
Диплом и ученые степени одновременно являются сертификатом определенной "специальности" - некоторой науки, технической дисциплины или профессиональной деятельности.
Министерство высшего образования СССР (для дипломов) и Высшая аттестационная комиссия СССР (для ученых степеней) ведут формальный список таких специальностей. Каждый такой список содержит сейчас порядка сотни позиций. Эти списки в системе образования и научной аттестации играют в СССР важную роль, так как служат средством идентификации и формального признания тех или иных компонент научно-технического прогресса. В частности, каждая образовательная специальность получает право иметь самостоятельный учебный план от первого до выпускного года обучения. Учебный план в своей основной части является обязательным и для каждого вуза утверждается Министерством. Имеется, однако, некоторое количество курсов и семинаров по выбору, которые используются для более конкретной специализации студентов в рамках данной специальности.
В 1952 году в нескольких университетах была открыта в дополнение к существовавшей специальности "математика" новая специальность "вычислительная математика", предназначенная для подготовки специалистов, использующих новую вычислительную технику.
Вот как выглядел учебный план по вычислительной математике МГУ в начале 50-х годов (списан из приложения к диплому АЕ, выпуск 1954 года):
- Основы марксизма-ленинизма
- Политическая экономия
- Диалектический материализм
- Исторический материализм
- Иностранный язык (английский)
- Физическое воспитание и спорт
- Математический анализ
- Аналитическая геометрия
- Высшая алгебра
- Астрономия
- Физика
- Теоретическая механика
- Дифференциальная геометрия
- Уравнения математической физики
- Теория функций комплексного переменного
- Вариационное исчисление
- Теория вероятностей и теория ошибок
- История математики
- Счетные машины и приборы
- Радиотехника и электроника
- Электротехника
- Теория механизмов и машин
- Приближенные вычисления
- Практикум по приближенным вычислениям
- Номография
- Черчение
- Курсовая работа
- Производственная практика
- Специальные курсы
- Принципы программирования
- Счетно-аналитические машины
- Математическая логика
- Специальные семинары
- Теория релейно-контактных схем
- Вычислительные методы линейной алгебры
- Дипломная работа
- Государственные экзамены
- Основы марксизма-ленинизма
- Вычислительная математика
По современные понятиям курс был весьма перегружен, а также демонстрировал, с одной стороны, доминирование общематематической и естественно-научной подготовки, а, с другой стороны, конгломератный характер профилирующих дисциплин.
Первый учебный курс программирования в СССР был прочитан А.А. Ляпуновым в 1952/1953 учебном году под названием "Принципы программирования". Структура курса складывалась, можно сказать, на глазах студентов. Первая половина весьма тесно следовала книге "Программирование для быстродействующих электронных счетных машин" [23]. В перерыве между первым и вторым семестрами у лектора начали складываться основные подходы к "операторному методу". Вся вторая половина курса - это была по существу совместная работа профессора и студентов по созданию и уточнению символики операторов, используемых при составлении схем программ. Курс читался и воспринимался с большим энтузиазмом, и неслучайно почти половина слушателей, математиков-вычислителей, стали после выпуска профессиональными программистами.
В 1955 году чтение курса программирования в МГУ продолжил ШБ. Через пару лет состав курса стабилизировался. В современных терминах его структура выглядит следующим образом:
- Архитектура ЭВМ
- Арифметические основы
- Ознакомление с системой команд
- Программирование линейных последовательностей команд
- Программирование ветвлений
- Программирование циклов
- Синтез программы в рамках операторного метода
- Технология программирования (стилистика, комментарии, блок-схемы, операторные схемы, отладка)
- Компоненты математического обеспечения (библиотеки, трансляторы, отладочные программы).
В качестве учебной ЭВМ бралась или машина "Стрела" или абстрактная трехадресная ЭВМ.
Первой книгой об ЭВМ, рассчитанной на массового читателя, была уже упоминавшаяся книга А.И. Китова "Электронные цифровые машины", вышедшая в середине 1956 года [33]. Коллеги-профессионалы по выходе иногда критиковали эту книгу за неточности или поверхностное изложение. Однако, перечитав ее почти через 20 лет, авторы должны подтвердить, что это было добросовестное, а, главное, весьма оперативное изложение доступного в то время знания об ЭВМ. Хорошим качеством книги была убедительная и увлекающая свежего читателя демонстрация разнообразной новизны, вносимой ЭВМ в практику человеческой деятельности.
Развитием этой книги, а также конспекта лекций, выпущенного в 1956 году для слушателей Артиллерийской инженерной академии [99], стала книга А.И. Китова и Н.А. Криницкого "Электронные цифровые машины и программирование" [100]. Это была первая книга, официально рекомендованная Министерством высшего образования в качестве учебного пособия, весьма солидного объема в 572 стр. и изданная большим тиражом в 25 000 экземпляров. Книга была весьма богата содержанием, отличалась, правда, некоторой пестротой стиля - от весьма популярного изложения основ до стиля руководств к пользованию транслятором. Методика изложения программирования следовала сложившейся схеме (см. выше), но содержала в дополнение к ней две главы с подробным изложением теории схем программ (главным образом, по Ю.И. Янову) и правил программирования для одной из разновидностей трансляторов (ПП-С) для "Стрелы", сделанной в стиле ПП-2. Одним из любопытных обобщений, с которым будет интересно познакомиться авторам Алгола 68, была возможность использовать операторы присваивания в качестве аргументов отношений в логических условиях, например, допускалась запись ([100], стр. 502):
1. x = t>0 7002, 4005 2. x 2 + y2 = r<5x-z>3 4012, 4015,
которая в современной нотации означает
if (t:=x)>0 then go to L5 else if (r:=x↑2 + y↑2)<5
x-z>3 then go to L12 else go to L15 fi fi
Первым учебником, специально посвященным программированию, была книга киевских авторов Б.В. Гнеденко, В.С. Королюка и Е.Л. Ющенко "Элементы программирования" [101]. Она использовала для изложения условную ЭВМ и дидактику курса А.А. Ляпунова. Отдельная глава была посвящена символике адресного программирования.
Первой попыткой создать солидный университетский курс программирования, "построенный на современных научных и методических принципах" ([102], стр. 2), была книга Е.А. Жоголева и Н.П. Трифонова "Курс программирования" [102], основанная на опыте чтения лекций по программированию в МГУ. Это был также первый курс, базирующийся на Алголе. Попытка оказалась в целом весьма удачной, и эта книга была основным вузовским учебником по программированию вплоть до появления машин 3-го поколения, издана несколько раз тиражом, приближающимся к 300 тыс. экземпляров. Вот оглавление 1-го издания:
- Предмет курса
- Позиционные системы счисления
- Физические принципы построения АЦВМ
- Описание учебной вычислительной машины
- Алгоритмы и алгоритмический язык
- Программирование простых арифметических выражений
- Элементы математической логики и условия
- Программирование условий и булевских выражений
- Операторы перехода и их программирование
- Производные операторы языка АЛГОЛ
- Программирование операторов цикла
- Процедуры и их реализация на УВМ
- Автоматическая модификация команд
- Методы определения положения запятой
- Вычисление элементарных функций
- Ввод и вывод информации
- Пульт управления машины. Контроль правильности составленных программ
- Уточнение языка АЛГОЛ
- Обзор АЦВМ и их классификация
- Программирование с использованием библиотеки подпрограмм
- Компилирующие и интерпретирующие программы
Модернизированная версия этого учебника еще и сейчас широко используется как материал для общего вводного курса программирования.
В специальности "вычислительная математика" так и сохранилось доминирование общего курса математики и примыкающего к нему курса численных методов. Потребности в специалистах по системному программированию и в усилении подготовки по технологии системного программирования, как для общего математического обеспечения, так и для прикладных пакетов, в особенности, для АСУ, привели к организации в 1969 году новой специальности "прикладная математика" со специализациями "математическое обеспечение" и "применение ЭВМ" (главным образом для университетов и политехнических институтов) и специальности "автоматизированные системы управления" (главным образом для отраслевых институтов). Эта специальность во многом аналогична "информатике" в европейских и "вычислительным наукам" в американских университетах. В 1975 году подготовку по этим специальностям (не считая вечернего обучения) предлагали на 54-х (прикладная математика) и 43-х (АСУ) факультетах с численностью выпуска порядка 5000 человек в год [103].
Вот как выглядит учебный план 1974 года подготовки специалистов по прикладной математике на факультете вычислительной математики и кибернетики МГУ (выпуск - 350 человек, в 12 раз больше, чем в 1954 году):
- марксистско-ленинская философия
- политическая экономия
- научный коммунизм
- основы научного атеизма
- советское право
- иностранный язык
- физическое воспитание
- введение в специальность
- математический анализ
- алгебра и аналитическая геометрия
- дифференциальные уравнения
- физика
- уравнения математической физики
- теория вероятностей и математическая статистика
- дискретная математика
- вычислительные машины и программирование
- численные методы
- теория игр и исследование операций
- методы решения экстремальных задач
- математические модели в естествознании и управлении
- математические модели в экономике
- практикум работы на ЭВМ
- основы автоматизированных систем управления
- методология и история прикладной математики
- дополнительные главы программирования
- математическая логика
- элементы кибернетики
- спецкурсы
- спецсеминары
- учебная практика
- производственная практика
- курсовая работа
- дипломная работа
- государственные экзамены
- научный коммунизм
- математика
Стандартная длительность курса программирования на этой специальности - два года (4 семестра по два часа в неделю, не считая практикума на ЭВМ). Первая часть - основы программирования - напоминает вышеупомянутый курс Е.А. Жоголева и Н.П. Трифонова. Вторая часть - математическое обеспечение ЭВМ - состоит из следующих компонент: модульное программирование; ассемблеры; загрузчики; макроассемблеры и макрогенераторы; типовые структуры данных и работа с ними; современная архитектура ЭВМ; интеграция оборудования и программного обеспечения; системы программирования; пакты прикладных программ; операционные системы; общая организация вычислительного процесса.
Первая, известная авторам диссертация, связанная с использованием ЭВМ, была кандидатская диссертация И.С. Мухина, бывшего в течение многих лет заместителем директора ИТМ и ВТ, посвященная расчетам равноустойчивых грунтовых откосов, защищенная в 1953 году [104]. Проведенные расчеты, выполненные на БЭСМ в 1952 году, требовали решения системы гиперболических уравнений на плоскости. Эта работа открыла поток самых разнообразных прикладных диссертаций, демонстрировавших мощь ЭВМ и необыкновенные, предоставляемые ими, возможности. С самим программированием дело обстояло гораздо сложнее, и прошли годы, прежде чем оно преодолело комплекс неполноценности, а окружающие усмотрели в нем научное содержание.
Кажется, первой попыткой академической трактовки собственно программистских проблем была глава докторской диссертации ШБ, защищенной им в 1953 году и посвященной в целом ошибкам округления. В главе описывалась некоторая систематическая процедура организации двойного счета на ЭВМ для обеспечения надежности вычислений. Несмотря на практичность схемы и актуальность проблемы, эта часть диссертации многими игнорировалась, а некоторыми оспаривалась.
В 1954 году АЕ в своей дипломной работе, посвященной обращению матриц, написал главу, в которой излагалась некоторая общая схема программирования и описывался алгоритм настройки по месту перемещаемой программы. Рецензент, одобрив работу в целом, порекомендовал удалить программистскую главу.
АЕ, уже написав книгу о ПП БЭСМ [39], не счел возможным представить ее в качестве кандидатской диссертации и переключился на подготовку диссертации по операторным алгоритмам [63] как имеющей более "математическое" содержание.
Постепенно начала набирать силу более здравая тоска зрения. На защите на Ученом совете МИАН в 1957 г. первой диссертации собственно по программированию (Э.З. Любимский, "Об автоматизации программирования и методе программирующих программ" [64]), состоялась оживленная "мета"-дискуссия. Диссертант, посвятив основное изложение описанию ПП-2, добавил в диссертацию теоретическую главу, посвященную уже упоминавшемуся выше "параметрическому" виду записи задач для решения на ЭВМ. А.С. Кронрод критиковал диссертанта за "оппортунистический уклон" и настаивал на праве представления к защите сложных системных программ, полагая достаточным свидетельством творческих способностей автора существование и полезную применимость программного продукта самого по себе.
В этом же, 1957 году, состоялась защита кандидатской диссертации Ю.И. Янова [105]. Эта работа, ставшая классической в теоретическом программировании, также получила не столь единодушную поддержку, которой заслуживала.
В следующие два года состоялись защиты кандидатских диссертаций по вопросам программирования, сделанные на материале первых экспериментов по машинному переводу: О.С. Кулагиной, о своего рода специализированном языке программирования задач машинного перевода [106], и Л.Н. Королева, об оптимизации организации и работы со словарем [107].
Л.Н. Королев стал также в 1956 году первым профессором - программистом с самого начала своей профессиональной деятельности. Первая докторская диссертация по программированию была защищена в Киеве Е.Л. Ющенко в 1966 году по материалу разработки трансляторов на основе адресного языка [49].
Первое время все эти диссертации причислялись к существовавшим в то время родственным специальностям: вычислительной математике, счетно-решающим устройствам и т.д. В середине 60-х годов под влиянием серии работ по теоретическому программированию была образована новая специальность "математическая логика и программирование". Употребление слова "программирование" в виде явной конституенты направило на ученые советы поток работ по системному программированию, весьма далеких от математической логики. Совсем недавно, в 1971 году, программисты отмежевались от логиков, образовав собственную специальность "математическое обеспечение вычислительных комплексов и автоматизированных систем управления".
Авторы хотели бы закончить этот раздел упоминанием о двух постоянных московских общегородских семинарах, сыгравших немаловажную роль в становлении программирования в СССР.
В 1955 году в Московском университете при кафедре вычислительной математики работал семинар по смежным вопросам кибернетики и физиологии, который с 1956 года принял название "семинар по кибернетике". АЕ случилось быть первым докладчиком на этом семинаре с рефератом статьи о моделировании процесса выработки условных рефлексов на машине ЭДСАК [108].
Этот семинар носил интердисциплинарный характер и уделял, в частности, немалое внимание неарифметическим применениям ЭВМ. Его работа позволяла посещавшим его программистам вырабатывать более широкий взгляд как на применение ЭВМ, так и на их место в этом процессе. Этот семинар, хотя и в несколько ином стиле, работает в МГУ по-прежнему под руководством членов-корреспондентов АН СССР С.В. Яблонского и О.Б. Лупанова.
С 1956 года в этих же стенах начал работу, которая продолжается и поныне, научный семинар по программированию под руководством Н.П. Трифонова и ШБ. Предназначенный вначале для сотрудников кафедры вычислительной математики и вычислительного центра МГУ, он постепенно приобрел общегородской характер, собирая иногда на заседания по несколько сот человек. Представительный характер его аудитории обеспечивал быструю и эффективную передачу информации в "горячие периоды" появления новых идей или направлений в программировании. К таким моментам активных и плодотворных дискуссий можно было бы отнести период разработки системы программирования для университетской "Стрелы" в 1957-1958 гг., период освоения Алгола в 1960-1961 гг. и - в более позднее время - период работы с БЭСМ-6, а также изучения и выработки концепций операционных систем.
3. Заключение
В этом исследовании авторы попытались дать связное представление о развитии программирования в СССР, основываясь, главным образом, на фактическом материале, зафиксированном в публикациях. Это исследование в большей степени участников событий, нежели наблюдателей, так что оценочная часть нашего исследования может быть особенно уязвимой для критики. Поэтому авторы хотели бы подчеркнуть персональный характер некоторых общих замечаний, которыми они заключают эту работу.
Ряд объективных обстоятельств способствовал тому, что до середины 60-х годов программирование в СССР развивалось до некоторой степени автономно. К этим обстоятельствам относится более позднее начало работ по электронной вычислительной технике (примерный сдвиг - 5 лет); меньшее количество доступных ресурсов, приведшее к не столь широкому размаху работ, как в США или в Англии*); практическое отсутствие импорта вычислительных машин и технологии; языковый барьер и сравнительно менее интенсивные личные контакты; некоторые общие отличия в организации и стиле научных исследований.
*) Годовой объем производства средств вычислительной техники в СССР характеризуется следующими показателями (в млн. руб.): 1940 г. - 0.3; 1945 г. - 0.5; 1950 г. - 2.0; 1955 г. - 15.0; 1960 г. - 79.9; 1965 г. - 245; 1970 г. - 710; 1975 г. - 2917 ([III], стр. 90).
Для специалиста констатация такого факта, одновременно, и извинение, и повышенная ответственность. С одной стороны, нет необходимости оправдываться, например, за отсутствие всех компонент научно-технической деятельности, присущих "общемировой" тенденции. С другой стороны, специалистам не на кого ссылаться, если они не обеспечивают конкретные потребности общества, в котором работают, необходимыми результатами своего труда.
При такой "автономизации" возникает также в ретроспективной оценке вопрос о степени независимости развития и о вкладе в "мировую" науку.
В отношении последнего будет, по-видимому, правильно сказать, что из конкретных научных результатов влияние на общее развитие оказали лишь работы Ю.И. Янова, приведшие к созданию схем программ, и, может быть, какие-нибудь работы по оптимизации трансляции. Более опосредствованный, но представляющийся авторам существенным, вклад в мировую тенденцию внесло широкое распространение Алгола 60 в СССР. Большая же часть других, отмеченных в этой работе, результатов представляет собой переоткрытия или независимые находки, без которых трудно было бы представить полноценное развитие программирования.
Некоторое представление о степени независимости развития может дать анализ терминологии. При выполнении этого исследования авторы выбрали из просмотренной литературы порядка 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
- + логическая операция [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.1] 1956
- логическая схема [28.1] 1956
- схема счета [28.1] 1956
- оператор [28.1] 1956
- оператор переадресации [28.1] 1956
- оператор восстановления [28.1] 1956
- оператор формирования [28.1] 1956
- автоматизация программирования [28.2] 1956
- программирующая программа /транслятор/ [28.2] 1956
- арифметический оператор /оператор присваивания/ [28.2] 1956
- логический оператор [28.2] 1956
- экономия рабочих ячеек [28.2] 1956
- отладка [28.2] 1956
- стандартная подсхема /макроопределение/ [28.2] 1956
- оператор цикла [28.3] 1956
- переменная команда [28.3] 1956
- массив [28.3] 1956
- относительный адрес [28.3] 1956
- распределение памяти [28.3] 1956
- справка /дескриптор/ [28.4] 1956
- прораб [28.4] 1956
- внешние устройства [33] 1956
- система команд [33] 1956
- логическая шкала [33] 1956
- + символическое кодирование [33] 1956
- + символический адрес [33] 1956
- + действительный /абсолютный/ адрес [33] 1956
- крупноблочное /модульное/ программирование [33] 1956
- полупрограмма /стек/ [39] 1958
- экономия команд [39] 1958
- (глобальный) анализ программы [39] 1958
- адрес некоторого ранга /косвенный адрес/ [47] 1958
- граф-схема [62] 1959
- настройка по месту [44] 1959
- + алгоритмический язык [80] 1959
- + пользователь [80] 1959
- + эталонный язык [80] 1959
- + конкретное представление [80] 1959
- + язык публикаций [80] 1959
- + ограничитель [80] 1959
- + разделитель [80] 1959
- + идентификатор [80] 1959
- + описание [80] 1959
- + переключатель [80] 1959
- + тип [80] 1959
- + выражение [80] 1959
- + процедура [80] 1959
- + метка [80] 1959
- + формальный, фактический параметр [80] 1959
- + металингвистическая формула [82] 1960
- + строка [82] 1960
- + локальные, глобальные величины [82] 1960
- + условный оператор [82] 1960
- + вызов процедуры [82] 1960
- + размерность массива [82] 1960
- + переменная с индексом [82] 1960
- + граничные пары [82] 1960
- + рекурсивные процедуры [82] 1960
- + псевдокоманда [82] 1961
- стандартный массив /модуль загрузки/ [43] 1961
- составляющая программа /ассемблер/ [43] 1961
- внешний адрес [43] 1961
- внутренний адрес [43] 1961
- таблица внешних адресов [43] 1961
- прокрутка [43] 1961
- + операторы ввода-вывода [72] 1961
- + переполнение [72] 1961
- + формат (вывода) [72] 1961
- + рабочая машина [72] 1961
- + выход (из блока) [72] 1961
- + перемещаемая программа [72] 1961
- + граф несовместимости [109] 1961
- экономия памяти [109] 1961
- маршрут [109] 1961
- граф переходов [109] 1961
- справочная /структура файла/ [56] 1962
- дихотомическая справочная /дерево поиска/ [56] 1962
- математическое обеспечение 1963*)
- внутренний язык [88] 1965
- мультикоманда [88] 1965
- функция расстановки [88] 1965
- общий список /куча/ [88] 1965
- чистка циклов [88] 1965
- регулярный цикл [88] 1965
- + динамический массив [88] 1965
*) Первое известное сейчас авторам употребление - в рабочих документах Государственного комитета по науке и технике.
Всего из 135 вошедших в список терминов 79 оказались заимствованными, а 57 - оригинальными.
Оценивая в целом положительно начальный период развития программирования в СССР, авторы в то же время считают необходимым указать на некоторые трудности и пробелы.
Сильным тормозом в развитии и внедрении автоматизации программирования было отсутствие буквенно-цифровых устройств ввода-вывода, которые стали общедоступными только с машинами 2-го поколения. Возникали не только чисто технические трудности, связанные с кодировкой вводимой информации. Это затрудняло внедрение и ослабляло потребность в разработке комфортабельных средств отладки. Сужалась и даже становилась в значительной степени бесполезной методика символического кодирования.
Более косвенным, но зато и более глубоким последствием, стал недостаток внимания к текстовому представлению входных программ для первых трансляторов. Можно сказать, что, в целом, фразовая структура языков программирования ускользнула от внимания разработчиков трансляторов в доалголовский период.
Другим примером ограничительного влияния оборудования являлось довлевшее над большинством разработчиков трансляторов требование возможности воссоздать средствами входных языков "любую" машинную программу. Отсюда так называемые "нестандартные" операторы во входных программах, уродливые логические операторы, имитирующие машинные команды, и другие машинные зависимости во входных языках. В ряде случаев синтаксис входных конструкций подгонялся под способ трансляции.
Как ни странно, одной из причин более сильной машинной зависимости была трехадресная система команд. При такой системе трехадресная команда часто представляет собой логически законченное действие, "пролезающее" во входной язык.
Любопытно отметить еще один факт неявного влияния трехадресной системы команд, которая с трудом влезала в машинное слово, ограничивая длину адресной части команд, что, в свою очередь, создавало трудности наращивания объемов оперативной памяти.
Возвращаясь к устройствам ввода-вывода, можно отметить еще одну погрешность в одном из начальных решений: желание уплотнить формат привело к построчной кодировке машинных слов на карте и к подаче карты в читающее устройство широкой стороной вперед. Это не только затруднило внедрение буквенно-цифровых кодов, но и не давало возможности получить высокую скорость ввода и перфорации. Упущение было ликвидировано только во 2-й половине 60-х годов.
Другим фактором, сузившим фронт работ по программированию, было преобладание научных применений ЭВМ в рассматриваемый период времени. В практике применения ЭВМ отсутствовало понятие массового пользователя. Труд программистов, как ни парадоксально это звучит, еще не был так дефицитен. Не случайно А.И. Китов в своей книге, относящейся к 1956 г., указывает на требуемое число математиков для подготовки задач для одной ЭВМ в 50-150 человек ([33], стр. 26).
Большая часть программистов в СССР была математиками с университетским образованием. При всех положительных сторонах этого обстоятельства следует, однако, отметить, что потребовалось длительное время, пока была осознана и реализована необходимость сбалансировать эту сторону образования воспитанием способности к инженерному стилю работы, столь необходимому в системном программировании.
Еще одной, одновременно и причиной, и следствием недостаточно широкого размаха работ по программированию было то, что ведущие программисты были слишком заняты. В течение добрых 15 лет одни и те же люди и организовывали производственный счет в вычислительных центрах, и разрабатывали математическое обеспечение, и учили студентов, и вели научную работу. Гармоничное объединение этих функций удавалось не всегда и не всем. Почти все успешные экспериментальные системы кое-как переделывались в программный продукт, и это "кое-как" иногда мешало и эксперименту и не давало полного эффекта в продукте.
Авторы, тем не менее, надеются, что эта чистосердечная критика не помешает требовательному читателю оформить позитивное заключение о поступательном и в целом плодотворном периоде становления программирования в СССР. Сейчас, на пороге 25-летия с того момента, как неоновые индикаторы на пульте ЭВМ начали в Советском Союзе свой безостановочный бег, "семь дней в неделю, 24 часа в сутки", стократно умноженное новое поколение молодых людей заново переживает острый момент, когда составленная ими программа одухотворяет машину, передавая ей частицу их интеллекта. Этому поколению авторы посвящают свое исследование.
Л и т е р а т у р а
- Цикл статей по математической технике. УМН, 1, №5-6 (1946), 3-174. Н.Е. Кобринский и Л.А. Люстерник. Математическая техника (Введение в цикл). И.Н. Янжул. Счетные автоматы и их применение к астрономическим вычислениям. В.М. Прошко. Приборы для определения корней систем линейных уравнений. В. Буш и С. Колдвелл. Новый дифференциальный анализатор (пер. М.Л. Быховского). V. Bush, Eng.D.Sci.D. and S.H. Caldwell, Sc.D. A New Type of Differential Analyzer. Journ. of the Franklin Inst. 240, N 4 (October 1945) (ref. in [1]) М. Борн, Р. Фюртс и Р.В. Принчл. Фотоэлектрический прибор для функционального преобразования Фурье (пер. М.Л. Быховского). A Photo-electric Fourier transformer. Hature, December 22, 1945, 756-757 (ref. in [1]). М.Л. Быховский. Новые американские счетно-аналитические машины. УМН, 2, №2 (1947), 231-234.
- Popular Science. Oct. 1944, p. 86 (ref. in [2]).
- Popular Science. Apr. 1946, p. 83 (ref. in [2]).
- D. Hartrey. The Eniac. An Electronic Calculating Machine. Nature, 157, N 3990, p. 527 (ref. in [2]).
- D.R. Hartrey. F.R.S. The ENIAC, an Electronic Computing Machine. Nature, 158, N 4015 (Saturday, October 12, 1946) (ref. in [8]).
- Howard H. Aiken, Grace M. Hopper. The Automatic Sequence Controlled Calculator, Electrical Engineering, NN 8,9,10 (1946) (ref. in [9]).
- Д.Р. Хартрей. "Эниак" - электронная счетная машина. УМН, 3, №5 (1948), 146-158.
- Айкен Х.Х. и Хоппер Г.М. Автоматически управляемая вычислительная машина. УМН, 3, №4 (1948), 119-142.
- Theory and Techniques for Design of Electronic Digital Computers (Lectures given at the Moore School, July 8 to August 31, 1946). University of Pennsylvania, Moore School of Electrical Engineering, Philadelphia, 1946. Volumes 1-4, 600 p. (ref. in [20]).
- Burks A.W., Goldstine H.H., Neumann J. Preliminary Discussion of the Logical Design of an Electronic Computing Instrument. Institute for Advanced Study, Princeton, N.J., July 1946 (ref. in [17]).
- Burks A.W., Goldstine H.H., Neumann J. Report on the Mathematical and Logical Aspects of an Electronic Computing Instrument. Part 1, Ed. 2, Princeton, N.J., 1947 (ref. in [17]).
- A.W. Burks, H.H. Goldstine, J. von Neumann. Preliminary Discussion of Logical Design of an Electronic Computing Instrument. 2nd Edition. Princeton, N.J. The Institute for Advanced Study, 1947 (ref. in [19]).
- Proceedings of a Symposium on Large-Scale Digital Computing Machinery (held in Harward Computational Laboratory of Harward University, v. 16, Cambrige, Mass., 1948, 302 p.
- М.Л. Быховский. Основы электронных математических машин дискретного счета. УМН, 4, №3 (1949), 69-124.
- W.W. Stiffler, Ed. High-speed computing devices. By the staff of Engineering Research Associates, Inc., supervised by C.B. Tompkins, J.N. Wakelin. First Edition, 1950 (ref. in [17]).
- Быстродействующие вычислительные машины. Перевод с английского под ред. Д.Ю. Панова, ИЛ, М., 1952, 431 стр.
- Francis J. Murray. The theory of mathematical machines. Revised edition, 1948 (ref. in [19]).
- Ф. Муррей. Теория математических машин. Перевод с английского Л.Е. Садовского, ИЛ, М., 1949, 328 стр.
- Rutishauser, H., Speiser, A., und Stiefel, E. Programmgesteuerte digitale Rechengeräte
(elektronische Rechenmaschinen). Zeitschrift für angewandte Mathematik und Physik
(ZAMP).
- I. Teil, vol I, N 5 (15.9.1950), 277-297
- II. Teil, vol I, N 6 (15.11.1950), 339-362
- III Teil, vol II, N 1 (15.1.1951), 1-25; Schluß, vol II, N 2 (15.3.1951), 63-91.
- Рутисхаузер Г., Шпайзер А. и Штифель Э. Электронные счетные машины с программным управлением. Вопросы ракетной техники (Сборники сокращенных переводов иностранной периодической литературы), 1952, вып. 2, 134-163; вып 3, 132-151; вып 4, 140-151; вып 5, 161-174.
- "МЭСМ". Энциклопедия кибернетики. "Наукова думка". Киев, 1974, т. 2, стр. 36.
- Л.А. Люстерник, А.А. Абрамов, В.И. Шестаков, М.Р. Шура-Бура. Решение математических задач на автоматических цифровых машинах. Программирование для быстродействующих электронных счетных машин. Издательство Академии наук СССР, 1952, 327 стр.
- Goldstine, H.H., and von Neumann, J. 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|48 (ref. in [20]).
- Wilkes M.V. Programmer Design for High Speed Automatic Calculating Machine. Journ. Sci. Instr., 26 (1949), 217-220 (ref. in [20]).
- Maurice V. Wilkes, David J. Wheeler, Stanley Gill. The preparation of program for an electronic digital computer. Cambridge, Mass., 1951 (ref. in [27]).
- М. Уилкс, Д. Уилер, С. Гилл. Составление программ для электронных счетных машин. Перевод с английского Н.П. Жидкова, ИЛ, М., 208 стр.
- Конференция "Пути развития советского математического машиностроения и приборостроения". Пленарные заседания (132 стр.). Секция универсальных цифровых машин, часть I (230 стр.), часть II (259 стр.), часть III (180 стр.), Москва, 12-17 марта, 1956 г. Напечатано ВИНИТИ по решению оргкомитета конференции.
-
- 1) А.А. Ляпунов, Ю.И. Янов. О логических схемах программ, часть III, 5-8.
- 2) С.С. Камынин, Э.З. Любимский. Автоматизация программирования, 9-17.
- 3) А.П. Ершов. Программирующая программа для БЭСМ АН СССР, 18-29.
- 4) Л.В. Канторович, Л.Т. Петрова, М.А. Яковлева. Об одной системе программирования, 30-36.
- XX съезд Коммунистической партии Советского Союза. Стенографический отчет. Т. II. Политиздат, М., 1956.
- Быстродействующая вычислительная машина М-2. Под ред. И.С. Брука. ГИТТЛ, М., 1957, 228 стр.
- В.В. Белынский, В.М. Долкарт, Б.М. Каган, Г.П. Лопато, Н.Я. Матюхин. Малогабаритная электронная вычислительная машина М-3. Филиал ВИНИТИ, М., 1957, 87 стр.
- А.И. Китов. Электронные цифровые машины. Издательство "Советское радио", М., 1956, 276 стр.
- С.Д. Погорелый, Л.И. Пшеничный. Организация управления обменом в мини-ЭВМ. Программирование, №1, 1976, 48-52.
- Труды третьего всесоюзного математического съезда. Москва, июнь-июль 1956. Том II. Краткое содержание обзорных и секционных докладов. Академия наук СССР, М., 1956.
- Сессия Академии наук СССР по научным проблемам автоматизации производства 1956. Пленарные заседания. АН СССР, М,. 1957.
- Rochester N., Symbolic Programming. Transactions IRE, EC-2, N 1 (1953), 10-15 (ref in [33]).
- Е.А. Жоголев, Г.С. Росляков, Н.П. Трифонов, М.Р. Шура-Бура. Система стандартных подпрограмм. Под ред. М.Р. Шура-Бура. ГИФМЛ, М., 1958, 231 стр.
- А.П. Ершов. Программирующая программа для быстродействующей электронной счетной машины. Издательство АН СССР, М,. 1958, 116 стр.
- Т.М. Великанова, А.П. Ершов, К.В. Ким, В.М. Курочкин, Ю.А. Олейник-Овод, В.Д. Поддерюгин. Программирующая программа для машины "Стрела". Тезисы докладов совещания по вычислительной математике и применению средств вычислительной техники. Издательство АН Азерб. ССР, Баку, 1958.
- А.П. Ершов, К.В. Ким. Программирующая программа для вычислительной машины "Стрела-3" (ППС). Вычислительный центр АН СССР, М,. 1961, 63 стр.
-
1) А.А. Ляпунов. О логических схемах программ.
2) С.С. Камынин, Э.З. Любимский, М.Р. Шура-Бура. Об автоматизации программирования при помощи программирующей программы.
3) Э.С. Луховицкая. Блок обработки логических условий в ПП-2.
4) Э.З. Любимский. Арифметический блок в ПП-2.
5) С.С. Камынин. Блок переадресации в ПП-2.
6) В.С. Штаркман. Блок экономии рабочих ячеек в ПП-2.
Проблемы кибернетики. Под ред. А.А. Ляпунова. Выпуск I. ГИФМЛ, М,. 1958, 46-74, 135-189. - Система автоматизации программирования. Сборник работ под редакцией Н.П. Трифонова и М.Р. Шура-Бура. ГИФМЛ, М., 1961, 187 стр. Раздел I. Система программирования с использованием библиотеки подпрограмм, 15-70. Раздел II. Программирующая программа, 71-148. Раздел III. Автоматизация отладки программ и контроля вычислений, 149-187.
-
1) М.Р. Шура-Бура. Интерпретирующая система на ЭВМ.
2) С.С. Камынин. Система стандартных подпрограмм для метода интерпретации.
3) В.И. Собельман. Вспомогательные программы ИС-2.
4) В.В. Мартынюк. Программа автоматического присвоения адресов. - М.Р. Шура-Бура. Система интерпретации ИС-2. В сб. "Библиотека стандартных программ". ЦБТИ, М,. 1961.
- В.В. Мартынюк. О методе символических адресов. Проблемы кибернетики. Выпуск 6. ГИФМЛ, М., 1961, 45-58.
- В.С. Королюк. Об одном способе программирования. Доклады АН УССР, №12 (1958) 1292-1295 (укр.).
- В.С. Королюк. О понятии адресного алгоритма. Проблемы кибернетики. Выпуск 4. ГИФМЛ, М., 1960, 95-110.
- Е.Л. Ющенко. Адресное программирование. ГИТЛ, Киев, 1963, 288 стр.
- R.A. Brooker. The Autocode Programs developed for the Manchester University Computers. Reprinted from the Computer Journal, 1958, 8 p.
- В.М. Глушков, Е.Л. Ющенко. Вычислительная машина "Киев". ГИТЛ, Киев, 1962, 183 стр.
-
- 1) М.А. Яковлева. Крупноблочная система программирования.
- 2) Л.Т. Петрова и И.А. Платунова. Реализация на машине вычислений в исходном классе списков.
- 3) Т.Н. Первозванская. Проведение аналитических выкладок на ЭВМ при решении некоторых типов дифференциальных уравнений.
- 4) К.В. Шахбазян. Исчисление программ функциональных операций.
- 5) Т.Н. Смирнова. Полиномиальный прораб и проведение аналитических выкладок на ЭВМ.
- А.П. Ершов. О программировании арифметических операторов. Доклады АН СССР, 118, №3 (1958), 427-430.
- Л.Н. Королев. Кодирование и свертывание кодов. Доклады АН СССР, 113, №4, 746-747.
- Л.Н. Королев. Методы выборки нужного слова из словаря. В сб. "Вычислительная техника". Издательство АН СССР, М., 1958, 116-118.
- Г.М. Адельсон-Вельский, Е.М. Ландис. Один алгоритм организации информации. Доклады АН СССР, 146, №2 (1962), 263-266.
- А.Л. Брудно. Грани и оценки для сокращения перебора вариантов. Проблемы кибернетики, выпуск 10, ГИФМЛ, М., 1963, 141-150.
- Ю.И. Янов. О логических схемах алгоритмов. Проблемы кибернетики. Выпуск 1, ГИФМЛ, М., 1958, 75-127.
- Р.И. Подловченко. Об основных понятиях программирования. Проблемы кибернетики. Выпуск 1, ГИФМЛ, М., 1958, 128-134. Выпуск 2, 1960, 123-138.
- Н.А. Криницкий. Равносильные преобразования логических схем. Автореферат диссертации. МГУ, М., 1959.
- Н.А. Криницкий, Г.А. Миронов, Г.Д. Фролов. Программирование. Наука. М., 1966.
- Л.А. Калужнин. Об алгоритмизации математических задач. Проблемы кибернетики. Выпуск 2, ГИФМЛ, М., 1959, 51-68.
- А.П. Ершов. Операторные алгоритмы. I. (Основные понятия). Проблемы кибернетики. Выпуск 3, ГИФМЛ, М., 1960, 5-48. Операторные алгоритмы. II. (Описание основных конструкций программирования). Проблемы кибернетики. Выпуск 8, ГИФМЛ, М., 1962, 211-233.
- Э.З. Любимский. Об автоматизации программирования и методе программирующих программ. Автореферат диссертации. МИАН СССР, М., 1958.
- И.Б. Задыхайло. Организация циклического процесса счета по параметрической записи специального вида. Журн. вычислительной математики и математ. физики. 3, №2 (1963), 337-357.
- В.Е. Котов, А.С. Нариньяни. Асинхронные вычислительные процессы над памятью. Кибернетика, №3 (1966), 64-71.
- E. Dijkstra. Guarded Commands, Nondeterminacy and Formal Derivation of Programs. Communications of the ACM, 18, N 8 (1975), 453-457.
- L.N. Korolev. 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. Carr, III. College of Engineering. 489-510.
- A.P. Ershov. Works of the Computing Center of the Asci of the USSR in the field of automatic programming. Proceedings of the Symposium on The Mechanization of Thought Processes held at the NPL, Teddington, November 24-27, 1958.
- A.P. Ershov. Automatic Programming in the Soviet Union. Datamation, 5, N 4 (1959), 14-20.
- Report on the Algorithmic Language ALGOL. Edited by A.J. Perlis and K. Samelson Comm. of the ACM, 1, N 12 (1958).
- Автоматизация программирования. С. переводов под редакцией А.П. Ершова.
ГИФМЛ, М., 1961, 368 стр.
- ФОРТРАН
- ЮНИКОД
- СОАП 2
- ИТ
- ФОРТРАНЗИТ
- АЛГОЛ
- А.М. Гильман. О некоторых приемах программирования в коде ЭВМ ГИФТИ. Проблемы кибернетики. Выпуск 3, ГИФМЛ, М., 1960, 139-148.
- Г.А. Михайлов, Б.Н. Шитиков, Н.А. Явлинский. Цифровая электронная счетная машина ЦЭМ-1. Проблемы кибернетики. Выпуск 1, ГИМЛ, М., 1958, 190-202.
- Н.А. Криницкий, Г.А. Миронов, Т.Д. Фролов. Программирование. Под ред. М.Р. Шура-Бура. ГИФМЛ, М., 1963, 383 стр.
- И.Г. Илзиня. Программирование для двухадресных цифровых вычислительных машин. Издательство АН Латв. ССР, Рига, 1962.
- М.Р. Шура-Бура. Программирование. Математика в СССР за 40 лет. Том 1, ГИФМЛ, М., 1959, 879-886.
- А.П. Ершов. Какой должна быть следующая программа? Всесоюзное совещание по вычислительной математике и вычислительной технике. (Программа). 16-21 ноября 1959 г. Издательство Московского университета, 1959. (опубликовано в [79]).
- А.П. Ершов. Основные принципы построения программирующей программы Института математики СО АН СССР. Сибирский математический журнал, 2, №6 (1961), 835-852.
- Сообщение об алгоритмическом языке АЛГОЛ. Под редакцией Перлиса А. Дж., Замельзона К. Перевод А.П. Ершова. Вычислительный центр АН СССР. М., 1959, 35 стр.
- J.W. Backus, F.L. Bauer, J. Green, C. Katz, J. Mc Carthy, P. Naur, A.J. Perlis, H. Rutishauser, K. Samelson, B. Vauquois, J.H. Wegstein, A. van Wijngaarden, M. Woodger. Report on the algorithmic language ALGOL 60. Edited by Peter Naur. ALGOL Bulletin Supplement no.2, 1 March, 1960. Regnecentralen, Valby, Denmark.
- Дж.В. Бэкус, Ф.Л. Бауэр, Дж. Грин, С. Кэтц, Дж. Маккарти, П. Наур, Э.Дж. Перлис, Х. Рутисхаузер, К. Замельзон, Б. Вокуа, Дж. Уэгстейн, А. Ван-Вейнгаарден, М. Вуджер. Сообщение об алгоритмическом языке АЛГОЛ 60. Под редакцией Петера Наура. Перевод Г.И. Кожухина под редакцией А.П. Ершова. Вычислительный центр АН СССР, М., 1960; Журн. вычислит. математики и математ. физики, 1, №2 (1961), 308-342.
- А.П. Ершов, Г.И. Кожухин, Ю.И. Волошин. Входной язык системы автоматического программирования (предварительное сообщение). Вычислительный центр АН СССР, М., 1961, 175 стр.
- Communications of the Association for Computing Machinery, 4, N 1, January 1961.
- М.Р. Шура-Бура, А.П. Ершов. Машинные языки и автоматическое программирование. Труды 4-го Всесоюзного математического съезда. Ленинград, 3-12 июля 1961. Том 1. Пленарные доклады. Изд. АН СССР, Ленинград, 1963, 243-250.
- В.Н. Попов, В.А. Степанов, А.Г. Стишева, Н.А. Травникова. Программирующая программа. Журн. вычислит. математики и математ. физики. 4, №1 (1964), 78-95.
- М.Р. Шура-Бура, Э.З. Любимский. Транслятор АЛГОЛ-60. Журн. вычислит. математики и математ. физики. 4, №1 (1964), 96-112.
- Г.И. Бабецкий, М.М. Бежанова, Ю.М. Волошин, А.П. Ершов, Б.А. Загацкий, Л.Л. Змиевская, Г.И. Кожухин, С.К. Кожухина Р.Д. Мишковия, Ю.И. Михалевич, И.В. Поттосин, Л.К. Трохан. Система автоматизации программирования АЛЬФА. Журн. вычислит. математики и математ. физики. 5, №2 (1965), 317-325.
- А.П. Ершов, Г.И. Кожухин, Ю.М. Волошин. Входной язык для систем автоматического программирования. Сибирское отделение АН СССР. Новосибирск, 1964.
- В.И. Собельман, М.Р. Шура-Бура. Реализация рекурсивных процедур в языке АЛГОЛ-60. Журн. вычислит. математики и математ. физики. 2, №2 (1962), 303-316.
- М.Р. Шура-Бура, В.В. Мартынюк. Об эффективной организации диамического использования памяти. Журн. вычислит. математики и математ. физики. 4, №5 (1962), 963-967.
- Г.И. Бабецкий и др. (см. [88]). АЛЬФА - система автоматизации программирования. Под редакцией А.П. Ершова. Наука, Сибирское отделение, Новосибирск, 1967, 308 стр.
- Описание языка АЛГАМС. Алгоритмы и алгоритмические языки. Выпуск 3. Вычислительный центр АН СССР, М., 1968, 3-56.
- С.П. Суржиков. Автоматизация пользования машиной среднего класса типа "М-20" (Автооператор). 1-я Всесоюзная конференция по программированию. Киев, октябрь 1968 г., Институт кибернетики АН УСССР, Киев, 1968.
- В.Л. Катков, В.П. Морозов, И.В. Поттосин, А.Ф. Рар, Л.Я. Семенова, А.Е. Хоперсков. ЭПСИЛОН - система автоматизации программирования задач символьной обработки. Наука, Новосибирск, 1972.
- В.Л. Катков, А.Ф. Рар. Программирование на языке ЭПСИЛОН. Наука, Новосибирск, 1972.
- С.С. Камынин, Э.З. Любимский. Алгоритмический машинно-ориентированный язык - АЛМО. Алгоритмы и алгоритмические языки. Выпуск 1. Вычислительный центр АН СССР, М., 1967, 5-58.
- А.П. Ершов. Программирование-68. (Вступительный доклад на 1-й Всесоюзной конференции по программированию. Киев, октябрь 1968 г.). Труды семинара "Автоматизация программирования". АН УССР, Киев, 3-26.
- А.И. Китов, Н.А. Криницкий, П.Н. Комолов. Элементы программирования. Издательство Артиллерийской инженерной академии им. Дзержинского, М., 1956.
- А.И. Китов, Н.А. Криницкий. Электронные цифровые машины и программирование. ГИФМЛ, М., 1959, 572 стр.
- Б.В. Гнеденко, В.С. Королюк, Е.Л. Ющенко. Элементы программирования. ГИФМЛ, М., 1961, 348 стр.
- Е.А. Жоголев, Н.П. Трифонов. Курс программирования. Наука, М., 1964, 388 стр.
- Справочник для поступающих в высшие учебные заведения в 1975 году. Высшая школа, М., 1975, 342 стр.
- И.С. Мухин, А.И. Срагович. Форма контуров равноустойчивых откосов. Инженерный сборник, №23 (1956), 121-131.
- Ю.И. Янов. О равносильности и преобразованиях схем программ. Автореферат диссертации. МИАН СССР, М., 1957.
- О.С. Кулагина. Некоторые теоретические вопросы машинного перевода. Автореферат диссертации. МИАН СССР, М., 1958.
- Л.Н. Королев. Некоторые вопросы теории машинного словаря. Автореферат диссертации. ИТМ и ВТ АН СССР, М., 1959.
- Семинары по кибернетике в Московском университете. Проблемы кибернетики, Выпуск 1, ГИФМЛ, М., 1958, стр. 263.
- С.С. Лавров. Об экономии памяти в замкнутых операторных схемах. Журн. вычислит. математики и математ. физики, 1, №4 (1961), 687-701.
- А.П. Ершов. Сведение задачи распределения памяти при составлении программ к задаче раскраски вершин графов. Доклады АН СССР, 142, №4 (1962), 785-787.
- ЦСУ СССР. СССР в цифрах в 1975 году. Статистика, М., 1976.