Добавлен: 22.04.2023
Просмотров: 167
Скачиваний: 1
ЗАКЛЮЧЕНИЕ
В настоящем исследовании авторы попытались дать представление о развитии программирования в СССР, основываясь главным образом на фактическом материале, зафиксированном в публикациях. Это исследование в большей степени участников событий, нежели наблюдателей, так что его оценочная часть может быть особенно уязвимой для критики. Поэтому авторы хотели бы подчеркнуть личный характер некоторых общих замечаний, которыми они заключают свою работу.
Ряд объективных обстоятельств способствовало тому, что до середины 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 |
Лента (слов) |
- |
4 ЗОК |
50К |
2 100K |
40К |
- |
Ввод |
ручной |
п/л |
п/л |
п/к |
п/л |
п/л |
Вывод |
табуляторная |
табуляторная |
табуляторная |
табуляторная |
||
печать |
печать |
т/т |
п/к |
печать |
печать |
|
Источник |
[28], |
[28] |
[28],[99] |
[28] |
[28] |
[28],[100] |