Вы здесь

Очерки истории отечественной программной инженерии в 1940-е – 80-е годы. Глава 1. История появления в стране вычислительной техники и программирования в 1940-е – 60-е годы (В. В. Липаев, 2015)

Глава 1. История появления в стране вычислительной техники и программирования в 1940-е – 60-е годы

1.1. Начало истории отечественной вычислительной техники в 1940-е – 60-е годы

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

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

Послевоенные годы стали отправной точкой в истории создания первых советских ЭВМ. В 1948 – 1951-е годы в Киеве в лаборатории моделирования и вычислительной техники Института электротехники АН УССР под руководством Сергея Алексеевича Лебедева была создана первая советская малая электронная счетная машина (МЭСМ) – прототип современных ЭВМ. Созданием МЭСМ в кельях бывшего монастыря «Феофания» было положено начало развитию отечественной вычислительной техники. К концу 1950 года монтаж действующего макета первой отечественной ЭВМ был завершен, и началась его проверка путем решения тестовых и ряда простейших народно-хозяйственных задач. А уже через два года в Москве, в Институте Точной Механики и вычислительном центре АН СССР, директором которого стал С.А. Лебедев, на базе разработанной в Киеве модели создается БЭСМ – большая электронная счетная машина. Машины данной серии становятся одними из лучших в США и Европе! Сегодня в это сложно поверить, однако быстродействие БЭСМ, а также возможность выполнить сложные математические операции подтверждало высокий уровень развития науки и технологий в Советском Союзе и открывало широкие перспективы для новых открытий и достижений.

Параллельно с С.А. Лебедевым по постановлению правительства над созданием электронно-вычислительных машин проводили работы и другие ученые – с 1948-го года в конструкторском бюро № 245, возглавляемом М.А. Лесечко, шла разработка цифровой вычислительной машины, получившей название «Стрела». Скорость ее работы составила две тысячи операций в секунду, что в пять раз уступает быстродействию БЭСМ. «Стрела» впервые стала выпускаться серийно.

Важнейшим звеном в истории советской вычислительной техники стали созданные группой инженеров под руководством И.С. Брука машины «М1». Данная машина отличалась невысоким быстродействием, но ее важным преимуществом были небольшие габаритные размеры, что делало ее применение удобным в любых помещениях. Впоследствии разработки И.С. Брука были усовершенствованы, и в 1953-ем году машина «М2», скорость работы которой составляла уже 2 тысячи операций с минуту, сочетала в себе все преимущества советских ЭВМ.

Три электронно-вычислительные машины на лампах – БЭСМ, «Стрела» и «М2» относятся к советским ЭВМ первого поколения (рис. 1).


Рис. 1.


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

В середине 40-х годов в США был опубликован документ под названием «Архитектура, фон Неймана». В нем великий физик и математик Джон фон Нейман (John von Neumann) описал вычислительную систему, в которой процессорный модуль отделен от устройства хранения данных. Вскоре был создан, а затем и усовершенствован первый американский компьютер ENIAC. Его установили в Университете штата Пенсильвания, США, и начали использовать для решения научных задач. Тогда же в Англии появились первые управляемые программами ЭВМ. Ученым уже было известно, что американские и британские коллеги достигли определенных успехов, но «холодная война» наложила ограничения – исследования заморских умов нашим конструкторам были недоступны.

При создании проекта МЭСМ в 1947-м году С.А. Лебедевым были независимо от работ Дж. фон Неймана сформулированы аналогичные основные принципы построения архитектуры электронных вы числительных машин:

• в состав ЭВМ должны входить арифметическое устройство, память, устройство управления и устройство ввода-вывода;

• программа в машинных кодах должна храниться в той же памяти, что и числа;

• для представления чисел и команд должна применяться двоичная система счисления;

• вычисления должны выполняться автоматически в соответствии с программой, хранящейся в памяти;

• логические операции должны выполняться наряду с арифметическими операциями;

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

Основой высокой эффективности деятельности С.А. Лебедева являлось понимание основополагающих принципов развития столь сложного направления человеческой деятельности, как электронная вычислительная техника, глубокий теоретический анализ выполняемых проектов [2]. Отсюда чрезвычайно высокие требования к главному конструктору и разработчикам выполняемого проекта. С.А. Лебедев тщательно обдумывал все аспекты проблемы и в результате не имел практически ни одного проекта «в корзину». Все его разработки – более полутора десятков проектов ЭВМ, были внедрены в серийное производство, из которых две трети для задач обороны страны.

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

С 1953-го года в стране был налажен серийный выпуск вычислительных машин. Первой в серию пошла ЭВМ «Стрела», созданная в СКБ-245 под руководством Ю.Я. Базилевского. Основные характеристики ЭВМ «Стрела»:

• ЭВМ была разработана на обычных для того времени радиолампах общим количеством ~ 6000 штук;

• быстродействие 2000 операций в секунду, тактовая частота 50КГц, команды трехадресные;

• оперативная память содержала 2048 ячеек, ячейка, в которой размещались трехадресная команда или число, содержала 43 двоичных разряда, оперативная память была выполнена на электронно-лучевых трубках (ЭЛТ), каждый разряд запоминался на отдельной трубке;

• общая потребляемая мощность составляла ~ 150 кВт, что создавало значительные проблемы с теплоотводом;

• оперативным средством связи пользователей являлся центральный пункт управления. Он содержал по 3 ряда тумблеров и индикаторов (по 43 неоновых лампочек каждый) и ряд индикаторов адреса выполняемой команды.

Несмотря на обилие радиоламп с ограниченным гарантийным сроком службы (до 500 часов) конструктивная реализация ЭВМ позволила довести среднее полезное время работы до 20 часов в сутки, но машина все равно с трудом справлялась с потоком задач. Из-за периодических сбоев при работе ЭВМ задачи считались с «двойным просчётом» и со сравнением контрольных сумм результатов.

Первыми программистами были выпускники ведущих вузов с физико-математической специализацией.

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

БЭСМ-2 была создана С.А. Лебедевым в 1957 году как серийный аналог уникальной БЭСМ-1 и нашла применение в ряде НИИ СССР и за рубежом для численного решения широкого круга математических задач. Основные технические характеристики были аналогичны характеристикам БЭСМ, система команд машины отличалась тем, что были исключены редко использовавшиеся команды и добавлены некоторые новые команды. Системное программное обеспечение в этих машинах отсутствовало. На серийных машинах БЭСМ-2 были решены тысячи задач: чисто теоретических, прикладной математики, инженерных. В частности, рассчитывались траектории полета первых космических аппаратов. Машина была разработана и внедрена в народное хозяйство коллективами ИТМ и ВТ АН СССР и завода им. Володарского (г. Ульяновск) в 1958-м году и производилась до 1962-го года.

В первую очередь, ЭВМ «Стрела» и БЭСМ-2 задействовали в военных целях – для изучения термоядерных реакций, расчета баллистических траекторий ракет и так далее. В 1956-м году Лебедев выступил с докладом на конференции в западногерманском городе Дармштадте. Академик устроил переполох, рассказав миру о том, что в СССР действует сверхбыстрая ЭВМ, – оказалось, что в Европе машине БЭСМ-1 не было равных.

Дальнейшее развитие вычислительных систем на протяжении нескольких лет было эволюционным. В 1958-м году на арену вышла система БЭСМ-2 с внешней памятью на основе ферритовых сердечников и увеличенным набором исходных команд. Впервые ЭВМ подготовили к серийному производству. Первые серьезные шаги по развитию централизованной производственной базы гражданских сфер применения ЭВМ были сделаны в конце 50-х годов после успешного завершения работ по созданию первых в нашей стране промышленных, универсальных вычислительных машин М-20 (см. рис. 1). В 1958-м году в серию пошла машина М-20, созданная в коллективе С.А. Лебедева в ИТМ и ВТ (зам. главного конструктора М.К. Сулим и М.Р. Шура-Бура) [1, 3]. Скорость решения задач напрямую зависела от подготовленности программиста, – он должен был быстро реагировать на сбои, ошибки, отлично ориентироваться в переключателях пульта управления. Первые попытки реализовать системный язык программирования С.А. Лебедев предпринял еще при разработке М-20, машина понимала некоторые наглядные и интуитивные команды, мнемокоды. Это существенно расширило круг специалистов, способных взаимодействовать с ЭВМ.

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

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

• впервые в отечественной практике была применена автоматическая модификация адреса;

• совмещение работы арифметического устройства и выборки команд из памяти;

• введение буферной памяти для массивов, выдаваемых на печать, совмещение печати со счетом;

• использование накопителя на магнитной ленте с быстрым пуском и остановом;

• для М-20 разработана одна из первых технологических систем программного обеспечения ИС-2 (Институт прикладной математики АН СССР).

Вслед за М-20 были разработаны и освоены в серийном производстве машины «Урал-1», «Минск-1». Они вместе с их полупроводниковыми наследниками (М-220, Урал-11-14, Минск-22 и -32), созданными в 60-е годы, были основными в СССР, практически до освоения в серийном производстве машин третьего поколения, т. е. до начала 70 – х годов [1, 3]. Основную нагрузку по выпуску этих машин приняли на себя коллективы Московского завода САМ, Пензенского завода ВЭМ, а также вступившие в строй в 1959-м году Казанский завод ЭВМ, Минский завод математических машин, Астраханский завод «Прогресс» и ряд других предприятий. В эти же годы была существенно расширена научно-исследовательская и конструкторская база: в 1956-м году созданы НИИУВМ (Пенза) и НИИММ (Ереван); в 1958-м году – НИИ-250 (Пенза), а также ряд конструкторские бюро на заводах.

В середине 50-х годов в оборонных отраслях

промышленности и в организациях министерства обороны страны проявился интерес к применению цифровых вычислительных машин для решения задач обработки информации и управления в системах военного назначения. Начались активные, секретные работы по освоению применения цифровой вычислительной техники для систем противовоздушной и противоракетной обороны, для контроля космического пространства и управления полетом в авиации и в космосе, для управления войсками и средствами вооружения разных видов. Многие из этих задач принципиально отличались по своему характеру и масштабу от ставших к тому времени традиционными вычислительных задач в гражданских областях и в науке. В них преобладали: логические операции, большая размерность, реальный масштаб времени и ряд других специфических свойств и требований. Очень быстро увеличивались номенклатура и объем функций систем, которые требовалось автоматизировать. Для реализации таких функций были необходимы значительные ресурсы памяти и производительности ЭВМ, а также большие коллективы специалистов, способные создавать крупные комплексы алгоритмов и программ в допустимые сроки. Уже первые комплексы программ военного назначения в 50-е годы достигали нескольких десятков тысяч команд, для чего было необходимо разрабатывать и применять некоторые методы программной инженерии. В результате начало активно развиваться специфическое направление вы числительной техники и программирования для крупных систем реального времени оборонного назначения [3, 9].

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

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

Для исследований, моделирования и постановки задач систем вооружения для оборонной промышленности в 1954 – м году был создан ВЦ-1 министерства обороны СССР – первый в стране профильный вычислительный центр. В научно-производственном аспекте по широте научных исследований и количеству разработчиков и специалистов в 1950-е годы это был самый мощный вычислительный центр в Советском Союзе и один из самых мощных в мире [11]. ВЦ-1 МО (впоследствии ЦНИИ-27 Министерства обороны СССР) был создан по инициативе Анатолия Ивановича Котова, который он и возглавил. ВЦ-1 стал одним из ведущих оборонных научных центров страны. В 1952-м году А.И. Китов защищает первую в СССР кандидатскую диссертацию, посвященную вопросам программирования. Название этой диссертации – «Программирование задач внешней баллистики ракет дальнего действия». В этом же году он организовал и возглавил первый в стране отдел вычислительных машин в Академии артиллерийских наук. После упразднения этой Академии в 1953-м году отдел А.И. Китова вместе с его начальником был переведён в подчинение Артиллерийской военно-инженерной академии им. Ф.Э. Дзержинского, а затем он возглавил ВЦ-1.

Осенью 1959-го года Анатолий Иванович послал в ЦК КПСС на имя Н.С. Хрущёва разработанный им проект создания общегосударственной автоматизированной системы управления для вооруженных сил и для народного хозяйства страны на базе Единой государственной сети вычислительных центров (ЕГСВЦ) – так называемый проект «Красная книга». В преамбуле этого доклада давалась резкая критика текущего состояния дел в стране с внедрением ЭВМ, и в первую очередь, в министерстве обороны СССР. Это предопределило негативное отношение к докладу А.И. Китова партийного и военного руководства СССР. Главное заключалось в том, что работники аппарата ЦК КПСС и, в частности, аппарата МО СССР почувствовали, что коренная перестройка управления на основе этого проекта приведет к устранению многих из них от рычагов государственной власти. В результате, А.И. Китов был исключен из КПСС и снят с престижной генеральской должности, которую он занимал в ВЦ 1 [11].

В 1965–1972 гг. А.И. Китов был Главным конструктором Отраслевой автоматизированной системы управления (ОАСУ) министерства радиопромышленности СССР и директором Главного вычислительного центра этого министерства. Потом около десяти лет он работал Главным конструктором АСУ «Здравоохранение». Опубликовал ряд основополагающих монографий и статей по вопросам применения ЭВМ и экономико-математических методов в области экономической информатики и медицинской информатики, в 1968-м году защитил докторскую диссертацию по гражданской тематике.

После ВЦ-1 в 50-е годы министерством обороны были организованы ВЦ-3 для разработки и исследования вычислительных систем и программирования авиационных систем, а также ВЦ-4 для артиллерийских и ракетных систем.

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

В 1960-м году были начаты работы по созданию семейства полупроводниковых ЭВМ «Урал» [3]. Основные черты нового поколения машин были сформулированы Баширом Искандеровичем Рамеевым в 1959-м году. В соответствии с ними были определены: состав семейства машин, их структура, архитектура, интерфейсы, принципы унификации, утверждены технические задания на устройства, ограничения на типы используемых комплектующих изделий. В конце 1962 года была закончена разработка унифицированного комплекса полупроводниковых элементов «Урал-10», рассчитанного на автоматизированное производство. Хотя элементы разрабатывались для использования в серии ЭВМ «Урал-11» – «Урал-16», они нашли широкое применение и в других средствах вычислительной техники и автоматики. В результате принятых правительством мер к началу 60-х годов были практически завершены все работы, связанные с созданием и освоением серийного производства полупроводниковых ЭВМ [3]. Это позволило прекратить, начиная с 1964 года, производство ламповых машин первого поколения и с 1965 года начать массовое производство полупроводниковых машин Урал-11 – Урал-14; Минск-22; Минск-23; БЭСМ-4; М-220; Раздан-3 и др.

В 1965 – 66-е годы все предприятия, НИИ и КБ в области вычислительной техники были переданы в состав двух министерств — министерства радиопромышленности (универсальные и специальные, бортовые, военные ЭВМ) и министерства приборостроения, средств автоматизации и систем управления (промышленные управляющие ЭВМ) [3, 10]. Работа предприятий в этих условиях совпала с началом активного создания и подготовки производства ЭВМ третьего поколения (на интегральных схемах). Трудности этого периода были связаны не только с решением научно-технических и технологических проблем (от архитектуры до элементной базы новых ЭВМ). Необходимо было решать большое количество сложных проблем создания в стране практически с нуля крупной отрасли вычислительной техники, базирующейся на новой технологии и широкой номенклатуре ранее не выпускавшихся средств, с переходом на внутриотраслевую специализацию. Освоение новых изделий во многих случаях шло одновременно со строительством самих заводов и обучением специалистов и сопровождалось множеством других проблем.

Решать все эти проблемы необходимо было в крайне ограниченное время (3–5 лет) с одновременным увеличением выпуска ЭВМ более чем в три раза при существенном увеличении состава оборудования в каждой машине. Реализовать эту задачу предполагалось в дальнейшем за счет разработки и освоения в серийном производстве нескольких типов программно совместимых вычислительных машин, построенных на единой конструктивно-технологи-ческой базе. Увеличение объемов производства достигалось за счет специализации производства и его лучшего технологического оснащения. Сокращение сроков разработки предусматривалось как за счет использования (легального) опыта ведущих западных фирм, на основе заключенных с ними соглашений, так и за счет привлечения к разработке и производству новых ЭВМ коллективов практически всех предприятий и организаций, ранее работавших над созданием множества разнообразных, собственных ЭВМ. Реализации этих задач было посвящено постановление правительства 1967-го года, в котором были сформулированы задачи и предусмотрены необходимые меры для обеспечения их выполнения материальными, производственными и финансовыми ресурсами [3, 11].

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

• увеличение мощностей по производству средств вычислительной техники с 304 млн. рублей в

1965-м году до 1000 млн. рублей в 1970-м году и до 3000 млн. в 1975-м году;

• рост выпуска средств вычислительной техники с 2470 млн. рублей в 1966 – 1970-е годы до 7500 млн. рублей в 1971 – 1975-е годы;

• увеличение выпуска ЭВМ с 5800 машин в 1966 – 70-е годы до 20000 машин в 1971 – 1975-е годы.

Только по министерству радиопромышленности СССР постановлением было предусмотрено строительство 14 новых заводов и реконструкция 11 существующих. Аналогичное развитие было предусмотрено и по предприятиям министерства приборостроения, средств автоматизации и систем управления и министерства электронной промышленности. Кардинальные решения были приняты по развитию мощностей по производству элементной базы машин третьего поколения, практически «с нуля» до 65 млн. интегральных схем в год. Эта программа максимум не была полностью выполнена, но она способствовала тому, что в стране примерно вдвое выросли производственные мощности по выпуску компонентов и систем вычислительной техники. В результате в 60-е годы были созданы предпосылки для последующей разработки таких высокопроизводительных систем, как БЭСМ-6, 5Э26, АС-6, МВК Эльбрус, М-13 (см. главу 2).

1.2. Начало истории отечественного программирования в 1950-е – 60-е годы

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

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

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

Следующий шаг был сделан в 1954-м году, когда на Западе был создан первый язык программирования высокого уровня – Фортран. Языки высокого уровня имитируют естественные языки, используя некоторые слова разговорного языка и общепринятые математические символы. Эти языки более удобны для человека, с помощью них можно писать программы до нескольких тысяч строк длиной. Однако легко понимаемый в коротких программах, этот язык становился нечитаемым и трудно управляемым, когда дело касалось больших программ. Решение этой проблемы пришло после изобретения на Западе языков структурного программирования, таких как Алгол (1958), Паскаль (1970), Си (1972). С этого момента начался языковый бум. Языки программирования стали появляться один за другим. Так появились С+, ADA, FoxPro, Basic, Pascal и др. На сегодняшний день существует тысячи языков программирования. Из них популярность и известность получили только некоторые. Они отличаются простотой, быстротой, гибкостью и другими свойствами, удобными в некоторой определенной области использования.

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

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

Ассемблер не ушел из практики, когда необходимо было создавать эффективные по объему программы реального времени высокой производительности и занимающие минимальный объем памяти (см. главу 4). В 60-е – 70-е годы большинство программных продуктов в оборонной промышленности для мобильных и бортовых ЭВМ создавались на ассемблерах, адаптированных на архитектуру соответствующих машин. Только в 80-е годы в связи с ростом ресурсов специализированных машин начали использоваться алгоритмические языки высокого уровня, несмотря на возможное расширение программ при трансляции, по сравнению с программами, разработанными на ассемблере.

С середины 50-х годов во всех странах, производивших вычислительную технику, начался бурный процесс «языкотворчества» — создание нескольких сотен проблемно-ориентированных языков [1, 4]. Многим программистам казалось, что небольшие улучшения языков программирования способны радикально повлиять на разработку и качество программ, на использование скудных ресурсов ЭВМ. Однако это требовало создания соответствующих трансляторов и средств отладки, вследствие чего энтузиазм языкотворчества постепенно угас. Сложной задачей для системных программистов того времени было создание трансляторов для конкретных типов машин. Создание каждого транслятора с машинно-независимого языка программирования считалось крупным научным и практическим достижением. Большое число различных типов машин и различных языков требовало трудоемкой работы высококвалифицированных программистов и математиков по разработке трансляторов. Соответственно, возникла необходимость создания небольшого числа стандартизированных языков и программно-преемственных семейств вычислительных машин. Это потребовало глубоких теоретических исследование в теории алгоритмов, схем программ, теории формальных грамматик.

В СССР в 60-е годы был создан алгоритмический язык РЕФАЛ, в основе которого лежала теоретическая модель процесса, реализуемого нормальными алгоритмами Маркова. Его использование в нашей стране позволило создать ряд оригинальных программных продуктов, не имевших аналогов за рубежом. Однако РЕФАЛ испытал судьбу многих отечественных находок. Сходная судьба была у языков программирования семейства Аналитик, созданных в Институте кибернетики АН УССР для ЭВМ серии «МИР». Эти машины, по существу, были первыми персональными ЭВМ (к сожалению, тогдашняя элементная база не позволила свести их габариты к настольным). Однако, несмотря на передовые принципы, заложенные в структуру и функции языков семейства Аналитик, они также не стали достоянием мирового сообщества программистов, хотя иностранные эксперты достаточно высоко оценивали достижения программирования в СССР [4].

Исследования в области параллельного программирования в СССР начались в середине 60-х годов, когда в Институте математики СО АН СССР (Новосибирск) и в Московском энергетическом институте возникли первые коллективы, заинтересовавшиеся теорией параллельных процессов в вычислительных системах, состоящих из однородных или неоднородных машин [4]. Первые монографии по теории вычислительных систем и параллельных вычислений вышли в нашей стране с большим опережением аналогичных изданий за рубежом. Отечественные специалисты первыми в мировой науке дали постановку и предложили решения таких задач, как сегментация алгоритмов и программ, планирование выполнения больших программ на вычислительных системах, динамическое диспетчерование потока программ и сегментов программ, асинхронная организация протекания процессов. В это время было предложено несколько оригинальных моделей для параллельных вычислений, заново открытых потом в США и других странах.

В 1953-х годах Л.В. Канторович разработал технологию крупноблочного программирования, которая давала обозримое описание крупных программ и обеспечивала формализацию, достаточную для исследования синтаксических структур программ и создания программирующих программ [4]. Идеи, высказанные в этих работах, предшествовали развитию программной инженерии. Работа школы протекала весьма активно в 1950 – 60-е годы. Характерной особенностью крупноблочных систем являлось то, что они оперировали не с индивидуальными числами и символами, а с величинами – укрупненными агрегированными информационными объектами. Такие укрупненные структуры данных (матрицы, векторы, последовательности, деревья, схемы и т. д.) выступали как целое в вычислительных планах; стандартные способы обработки отдельных компонентов выполнялись автоматически на нижних уровнях. Это вносило иерархическую структуру в языки программирования, освобождая верхние уровни от ненужной детализации. Существенно, что вычислительный процесс мыслился при этом также «объемным», протекающим одновременно, либо попеременно на каждом из этих уровней. Громоздкие и трудоемкие вычисления часто чрезвычайно упрощались при переходе на другой уровень. Представлялось, что в разумной стратегии переходов с одного уровня на другой кроется значительный резерв для повышения экономики вычислений. На этой же уровневой основе была создана оригинальная теория и методология трансляции, гибко сочетающая компиляцию и интерпретацию.

Ряд объективных обстоятельств способствовал тому, что до середины 60-х годов программирование в СССР развивалось до некоторой степени автономно от зарубежного [1, 3, 4]. К этим обстоятельствам относились:

• более позднее начало массового производства электронной вычислительной техники (примерный сдвиг – 5 лет);

• меньшее количество доступных вычислительных ресурсов, приведшее к не столь широкому размаху работ, как в США или в Англии;

• практическое отсутствие импорта вычислительных машин и технологий;

• языковый барьер и сравнительно менее интенсивные личные контакты специалистов (в частности, вследствие секретности);

• некоторые общие отличия в организации и стиле научных исследований и производства.

Заметное влияние на общее развитие программирования в мире оказали работы Ю.И. Янова, приведшие к созданию теории схем программ, и некоторые работы по оптимизации трансляции. Существенный вклад в мировую тенденцию внесло широкое распространение Алгола-60 в СССР. Большая часть результатов представляла независимые, индивидуальные, практические разработки, без которых невозможно было полноценное развитие отечественного программирования.

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

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

Теоретические исследования методов программирования для ЭВМ в 1950-е – 60-е годы, активно проводились в Московском, Ленинградском и Киевском университетах, в Институте автоматики и телемеханики АН СССР, в Вычислительном центре АН СССР [1, 4]. В 1950 году в ИТМ и ВТ начал работать первый постоянный семинар по программированию, которым руководил Л.А. Люстерник, в МГУ в 1952-м году была основана кафедра вычислительной математики (ее возглавил С.Л. Соболев). В 1953-м году в Математическом институте АН СССР был создан отдел программирования во главе с А.А. Ляпуновым, а в 1955-м году был основан Вычислительный центр МГУ, специализировавшийся на разработке и применении вычислительных методов для решения научных и прикладных задач.

В 1952-м – 53-м годах А.А. Ляпуновым был предложен операторный метод для описания программ. Практически впервые был создан способ представления программ на обозримом уровне. Вместо неэффективного для человека написания программ в машинных кодах было предложено формализованное представление программ на языке высокого уровня. Особенно важным было то, что операторный метод позволил подготовить теорию синтаксических структур программ. В 1953-м году А.А. Ляпунов сформулировал постановку задачи автоматизации программирования. Эта оригинальная постановка была успешно использована в первых отечественных трансляторах, называвшихся тогда программирующими программами (ПП). Летом 1954-го года появилась программирующая программа ПП-1, разработанная в отделе прикладной математики Института математики АН СССР, а в 1955-м году – ее улучшенный вариант ПП-2. К середине 50 – х годов у ведущих специалистов в области вычислительной техники сформировалось представление о путях развития отечественной информатики и программирования.

В середине 1957-го года, Виктор Михайлович Глушков, определил направления стратегических исследований в области информатики [3]. По его мнению, основой прогресса развития вычислительных машин должна была стать теория их работы, разработка методов автоматизации проектирования ЭВМ и автоматизации программирования. Он подчеркивал важную роль исследований в области теории алгоритмов и теории конечных детерминированных и стохастических автоматов, принципиальное значение разработки методов символьных преобразований на ЭВМ. Отмечалась центральная роль, которую играет задача оптимизации размера при трансляции программ (особенно для управляющих машин), а также указывалось на обратное влияние развития вычислительных машин на дальнейшие работы в области вычислительной математики. В конце 1959-го года в Москве, в МГУ состоялось «Всесоюзное совещание по вычислительной математике и вычислительной технике». Это было большое научное собрание с почти 2000 участников и 217 докладами, прочитанными на четырех секциях.

Постепенно складывалась концепция системного математического (программного) обеспечения ЭВМ – интегрированной и удобной в работе системы различных средств автоматизации программирования (библиотеки, трансляторы, средства отладки), сопряженных с определенной дисциплиной реализации задач на машине [5]. Проблеме математического обеспечения ЭВМ было много препятствий научно-технического и организационного характера, одно из которых – слабая разработанность концепции программного продукта и его производства. Для М-20 в то время таким средством для вычислений была библиотека стандартных подпрограмм. Идея превращения библиотеки в переносимый и общий программный продукт стала для М.Р. Шура-Буры на некоторое время главной задачей, на решении которой со временем сформировались более общие взгляды на системное программное обеспечение. Необходимо было найти некоторый объект конструирования и научной работы, который одновременно решал бы задачу унификации математического обеспечения, мог бы быть эффективным средством автоматизации программирования и выдвигал бы новую научную проблематику. Таким корневым объектом в стране стал Алгол-60.

В начале 60-х годов был опубликован алгоритмический язык Алгол-60, рекомендованный в качестве международного стандарта для публикаций вычислительных алгоритмов. В нашей стране Алгол-60 был принят в качестве государственного стандарта. Использование других языков для программирования вычислительных задач не рекомендовалось и это касалось даже широко применявшегося за рубежом более простого языка Фортран. После этого в стране началась активная разработка трансляторов с Алгола- 60 для нескольких типов машин. Попытки создать транслятор с полного языка Алгол-60 за рубежом не удались. В ИПМ такой транслятор был создан для машины «Стрела», а затем для машины М-20, что явилось достижением мирового уровня.

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

В декабре 1960-го года в МГУ состоялась рабочая конференция «Построение программирующих программ на основе языка Алгол-60» [1, 4]. К этому времени у разработчиков уже сложились общие подходы к реализации языка и выбору схем трансляции. В TA-1 благодаря отказу от возможной рекурсивности процедур и ряду других ограничений, была выбрана компактная и быстрая схема трансляции без оптимизации. Главной задачей ТА-2 стала реализация практически полного языка без существенной потери в качестве реализации. В разработке системы Альфа (Андрей Петрович Ершов) было поставлено в качестве главной цели обеспечение высокого качества (по объему рабочих программ) с сохранением приемлемой скорости трансляции. Употребление универсального языка программирования снимало задачу перевода программ с одной машины на другую, дало возможность сокращать дублирование работ по составлению программ для различных типов машин и существенно облегчило обмен информацией между отдельными группами специалистов, работающих в области программирования. В докладе разработчиков системы Альфа был показан классический прецедент просчета в определении плановых экономических показателей и трудоемкости больших программных проектов с универсальным коэффициентом недооценки трудоемкости в 2–3 раза, подтвержденном впоследствии многими проектами. Авторы клали на разработку системы 15 человеко-лет для построения 15000 команд, затратив на самом деле свыше 30 человеко-лет и соорудив систему в 45000 команд (см. главу 5).

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

• функция расстановки, для ускорения работы транслятора, в частности, для экономии совпадающих выражений;

• многовариантная система программирования процедур и циклов, основанная на анализе структуры программы;

• реализована глобальная экономия памяти;

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

После первых успехов в области создания трансляторов ТА-1, ТА-2 и Альфа в 1964-м – 65-м годах отечественные исследования в области автоматизации программирования продолжали сохранять высокий темп развития. Появление ЭВМ 2-го поколения (Минск 2, БЭСМ-4, М-220 и др.) в целом определило созревание концепции математического (программного) обеспечения и идентификацию системного программирования. Интенсивная работа над трансляторами с Алгола-60 привела к практическому исчезновению профессии вспомогательного программиста-кодировщика машинных кодов и замене ее на профессионального системного программиста. Все первые трансляторы писались в восьмеричном машинном коде с минимальными средствами автоматизации. Это привело к появлению первых языков системного программирования и к первой системе построения трансляторов, основанной на промежуточном универсальном машинно-ориентированном языке АЛМО. Пионерскими в области программирования были работы А.П. Ершова [1, 4] по компиляции с минимальной памятью и по теории программирования (схемы Янова – Ершова).

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

В 1964-м году началось проектирование первых программных операционных систем для пакетной обработки с использованием загрузчиков и трансляторов ассемблеров, работающих в автоматическом режиме с помощью языков управления заданиями. Большую роль в формировании современного взгляда на математическое обеспечение и архитектуру ЭВМ сыграл Конгресс ИФИП 1965-го года, когда концепции совместимых семейств машин, разделения времени, мини-ЭВМ стали объектом делового интереса советских специалистов. Начиная с 1964-го года, разработка математического (программного) обеспечения стала элементом государственной технической политики. Государственный комитет по науке и технике (ГКНТ) был назначен координатором работ по математическому обеспечению существующих машин и генеральным заказчиком для промышленности на математическое обеспечение вновь создаваемых ЭВМ. Ассоциации пользователей ЭВМ активно представляли научно-техническое общественное мнение и играли существенную роль в распространении новых программ. Апробация новых систем программирования, а впоследствии и операционных систем проводилась междуведомственной комиссией по математическому обеспечению под председательством академика А.А. Дородницына и целевыми комиссиями, осуществлявшими приемку новых компонентов математического обеспечения.

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

А.П. Ершов активно поддерживал международный научный обмен и сотрудничество. Он постоянно участвовал в различных комитетах и конференциях IFIP, организовывал многочисленные международные конференции в Новосибирске и других регионах Советского Союза. А.П. Ершов инициировал (и часто редактировал) переводы западных книг по информатике. Установление и развитие личных и профессиональных связей между иностранными учеными и их советскими коллегами было целью, которой он посвятил значительную часть своей энергии.

Взгляды АП. Ершова на программирование, выраженные в серии очерков, начатой в 1972-м году, привлекли широкое внимание во всем мире. Описывая свою профессию поэтически, он утверждал [6]:

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

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

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

1.3. Первые комплексы программ для оборонных систем в 1950-е – 60-е годы

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

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

С 1953-го года Михаил Романович Шура-Бура работал в Отделении прикладной математики Математического института им. В.А. Стеклова, созданном М.В. Келдышем в 1953-м году и преобразованном затем в Институт прикладной математики АН СССР (ныне ИПМ РАН им. М.В. Келдыша). В эти годы главной задачей и организационным успехом М.Р. Шуры-Буры как руководителя отдела программирования в ИПМ было формирование отдела [11]. Первым результатом работы отдела в 1953-м – 1955-м годах было применение программ для расчета энергии взрывов при моделировании ядерного оружия на ЭВМ «Стрела». Постановки задач и методы расчетов для этих программ готовили отделы математиков (А.Н. Тихонов, А.А. Самарский, И.М. Гельфанд). Программирование задач такой сложности в машинных кодах на ЭВМ, имевшей оперативную память емкостью всего 1000 ячеек, неработающий накопитель на магнитной ленте и частые сбои в арифметике и управлении, требовало от программистов виртуозного умения и оригинальных находок в организации отладки программ и счета. В 1954 – м году М.Р. Шура-Бура защитил диссертацию на соискание ученой степени доктора физико-математических наук.

В середине 50-х годов отдел программирования был привлечен М.В. Келдышем к расчетам траекторий искусственных спутников Земли (ИСЗ). Программы, разработанные сотрудниками отдела, возглавляемого Михаилом Романовичем, для ЭВМ «Стрела», а затем М-20, должны были обеспечивать круглосуточный режим обработки измерений траекторий ИСЗ. Они использовались, начиная с 1957-го года при запуске первых и последующих ИСЗ, при полете Ю.А. Гагарина в 1961-м году и затем в течение последующих 10 лет. Значение этих работ трудно переоценить, потому что результаты траекторных расчетов, производимых в разных организациях, иногда не совпадали, что для управления космическими полетами было недопустимо.

Весьма значительным было влияние ИПМ и лично М.Р. Шуры-Буры на выбор архитектуры отечественных универсальных компьютеров. В 1955-м году на начальной стадии проекта ЭВМ первого поколения М-20 в разработке участвовали три человека: С. А. Лебедев (общие характеристики и структура машины), М.Р. Шура-Бура (система команд), П.П. Головистиков (схемотехника). Основные архитектурные решения М-20, предложил М.Р. Шура-Бура. Эти архитектурные решения М-20 были сохранены в ЭВМ М-220, М222, построенных на основе полупроводниковой элементной базы. Эти машины стали «рабочими лошадками» для выполнения научных и инженерных расчетов во многих исследовательских, проектных и оборонных организациях страны. Это была одна из немногих моделей ЭВМ, при создании которой объединились проектанты, конструкторы и математики, представленные ИТМ и ВТ, конструкторским бюро, создавшим машину «Стрела».

Эта солидная основа возлагала большую ответственность на разработчиков, поскольку ее архитектуре предстояло воплотиться в нескольких крупных сериях ЭВМ (М-20, БЭСМ-4, М-220). Для машин типа М-20 – БЭСМ-4, которая также относилась к семейству машин С.А. Лебедева, было разработано, по крайней мере, три системы технологических программ в ИПМ АН СССР, в МГУ, в СО АН СССР. Эти системы отличались мнемоникой задания кодов операций, методами кодирования адресных полей машинных команд и методами настройки программ при размещении их в памяти. В это же время велись интенсивные работы по созданию систем библиотечных программ, отличавшихся друг от друга по правилам размещения их в оперативной памяти и по механизмам обращения к ним. В автокодах учитывалась необходимость размещения библиотечных программ в любом месте оперативной памяти, и были разработаны механизмы настройки подпрограмм по адресам размещения. При проектировании архитектуры машин предусматривалась аппаратная поддержка механизмов обращения к подпрограммам (процедурам) и методов передачи параметров.

В сферу научных исследований и разработок в начале 60 – х годов в Советском Союзе (почти одновременно в несколько ином виде в США) вошел и был апробирован новый широкий класс вычислительных систем и телекоммуникационных сетей реального времени – первый советский прототип современных информационных глобальных сетей и Интернета. В нем основными компонентами и источниками информации являлись траектории воздушных объектов, характеризующиеся их назначением, координатами и обобщенными параметрами движения, определяющие требования к функциям сложных комплексов программ управления в системе противовоздушной обороны (ПВО) [12]. Телекоммуникационные сети ЭВМ обеспечили обмен и обобщение информации от радиолокационных узлов на большой территории страны для непрерывного обнаружения и сопровождения воздушных объектов. К таким системам заказчиком предъявлялись высокие требования к качеству функционирования и гарантированного решения задач.

Примером оригинальных (в то время секретных) работ в НИИ-5 (МНИИПА) являлось создание программ реального времени и телекоммуникационной сети системы ПВО страны и радиолокационного узла (РЛУ) «Межа» (главный конструктор Владимир Алексеевич Шабалин, заместитель – Анатолий Николаевич Коротоношко). Программный комплекс обработки радиолокационной информации в 1962-м – 68-м годах на ЭВМ 5Э89 был создан под руководством Владимира Васильевича Липаева (докторская диссертация – 1967-й год по специальности радиолокация). При этом был разработан в 1962-м году принципиально новый тип операционной системы реального времени на ЭВМ для автоматической синхронизации и управления динамическим решением разнородных задач о движущихся воздушных объектах при случайных потоках информации из внешней среды и случайной длительности обработки каждого сообщения. Операционная система обеспечивала функционирование комплекса программ телекоммуникационные сети для транспортировки и обработки информации на ЭВМ между несколькими соседними РЛУ о траекториях движения динамических объектов и для обобщения характеристик их траекторий.

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

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

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

1.4. Организация подготовки первых программистов в 1950-е – 60-е годы

В Московском, Ленинградском и Киевском университетах в 1950-е годы началась подготовка специалистов по вычислительной математике, в технических высших учебных заведениях появились курсы по вычислительной технике, и стали открываться кафедры вычислительных машин [1, 4, 11]. Министерство высшего образования и Высшая аттестационная комиссия ввели формальный список таких специальностей. Эти списки в системе образования и научной аттестации играли в СССР важную роль, т. к. служили средством идентификации и формального признания квалификации специалистов. В частности, каждая образовательная специальность получала право иметь самостоятельный учебный план от первого до выпускного года обучения. Учебный план в своей основной части являлся обязательным для каждого вуза и утверждался министерством. Имелось, однако, некоторое количество курсов и семинаров по выбору, которые использовались для более конкретной специализации студентов в рамках данной специальности.

В 1952-м году в нескольких университетах была открыта в дополнение к существовавшей специальности «математика» новая специальность «вычислительная математика», предназначенная для подготовки специалистов, использующих вычислительную технику. Первый учебный курс программирования в СССР был прочитан А.А.Ляпуновым в 1952-м – 53-м учебном году. Структура курса складывалась на глазах у студентов. В перерыве между первым и вторым семестрами у лектора начали складываться основные подходы к «операторному методу». Вся вторая половина курса – это была по существу совместная работа профессора и студентов по созданию и уточнению символики операторов, используемых при составлении схем программ. Курс читался и воспринимался с большим энтузиазмом, и неслучайно почти половина слушателей, математиков-вычислителей, стали после выпуска профессиональными программистами. В 1955-м году в Московском университете при кафедре вычислительной математики работал семинар по смежным вопросам кибернетики и физиологии, который с 1956-го года принял название «семинар по кибернетике».

В 1955-м году чтение курса программирования в МГУ продолжил М.Р. Шура-Бура [1, 4]. Первой книгой об ЭВМ, рассчитанной на массового читателя, была книга А.И. Китова «Электронные цифровые машины», вышедшая в середине 1956-го года. Хорошим качеством книги была убедительная и увлекающая свежего читателя демонстрация новизны, вносимой ЭВМ в практику человеческой деятельности. Ее развитием стал учебник А.И. Китова и Н.А. Криницкого «Электронные цифровые машины и программирование» [5]. Это была первая книга, официально рекомендованная министерством высшего образования в качестве учебного пособия, весьма солидного объема (572 стр.), и изданная большим тиражом (25 тыс. экземпляров). Первым учебником, специально посвященным программированию, была книга киевских авторов Б.В. Гнеденко, А.С. Королюка и Е.Л. Ющенко «Элементы программирования». Они использовали для изложения условную ЭВМ и дидактику курса А.А. Ляпунова. Отдельная глава была посвящена символике адресного программирования. Первой попыткой создать солидный университетский курс программирования, базировавшийся на Алголе-60, была книга Е.А. Жоголева и Н.П.Трифонова «Курс программирования», основанная на опыте чтения лекций по программированию в МГУ.

Потребности в специалистах по программированию и в усилении подготовки по технологии системного программирования, как для общего математического обеспечения, так и для прикладных программ, привели к организации в 1969-м году новой специальности «прикладная математика» (для университетов и политехнических институтов), а также специальности «автоматизированные системы управления» (АСУ) (для отраслевых институтов). В 1975-м году подготовка по этим специальностям осуществлялась на 54 (прикладная математика) и 43 (АСУ) факультетах с общей численностью выпуска порядка 5000 человек в год.