Добавить в корзинуПозвонить
Найти в Дзене
Одиночная палата

История программирования. Глава 5. Космическая

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

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

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

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

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

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

Как и в странах запада, до и во время Второй мировой войны в СССР велись активные исследования в области криптографии. В целях государственной и военной секретности разрабатывались свои системы шифрования телефонной и телеграфной связи. Достаточно серьезно была поставлена и работа над дешифровкой вражеских систем. Однако, большинство научных и технических достижений этого времени в области криптографии по большей части засекречено до сих пор. Например, только в 1999 году стало известно о работе 1941 года «Основные положения автоматической шифровки» Владимира Александровича Котельникова[2]. Стало понятно, что Котельников в своей работе опередил коллегу из США - Клода Шеннона на 4 года в формулировке основных положений теории связи.

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

Так же как и на западе сперва ЭВМ в СССР заинтересовались военные. И, как уже было отмечено, вовсе не для бухгалтерии и статистики, а для баллистики[3]. В военное время на полях сражений отлично показали себя реактивные системы доставки боезарядов до расположения противника. Знаменитые "Катюши" - минометные системы залпового огня использовали для запуска ракетные двигатели, далее мина летела до цели по баллистической траектории. Эффективное применение такого вида вооружения требовало точного расчета наклона направляющих, начального импульса разгонного двигателя и времени его работы. При том что сам двигатель был значительно сложнее и дороже в производстве чем обычный гаубичный снаряд. И если до какой-то степени пристрелку и расчет таблиц для гаубиц можно было выполнить натурным методом, то для реактивной артиллерии всё становилось на порядок сложнее.

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

В 1951 году, через 5 лет после запуска ЭНИАК-а в США, так же предназначенного для вычисления артиллерийских таблиц, в Киеве заработала первая советская ЭВМ Малая Электронная Счетная Машина, а затем и Большая ЭСМ. И если после войны ЭНИАК рассекретили, то советские ЭВМ хоть и производились серийно и поставлялись в гражданские институты, так же до поры были вотчиной военных. Впрочем, ЭНИАК так же далее использовался в отнюдь не пацифистских целях, а, например, для расчетов термоядерных взрывов[4].

Здесь пути советской и западной электронной промышленности несколько разошлись. Общим знаменателем всё еще оставались некоторые военные цели, как то расчет взрывов ядерных зарядов, однако доктрина блока НАТО и СССР не совпадала по многим параметрам. Советская система вооружений после окончания войны по понятным причинам оказалось догоняющей стороной, и переключилась на сугубо оборонные системы, тогда как западная техника была сосредоточена на получении превосходства над противником. В том числе и экономического. Наработки военных и ученых были переданы, как это часто делается в США, на развитие коммерческих организаций. Которыми, по понятным причинам, тогда стали гиганты типа IBM и AT&T.

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

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

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

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

Страны Запада, наверное с этого момента можно говорить о противоборствующем СССР лагере именно так, недолго колебались и приняли доктрину и принципы действовавшие в США и постепенно отдельно британской, французской или немецкой компьютерной индустрии не стало. Под предводительством таких компаний как IBM, AT&T, CDC и DEC стала развиваться парадигма именно таких, максимально универсальных машин, перспективных с точки зрения производства и стандартизации, и, одновременно, требующие кропотливого ручного труда при программировании.

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

В этой связи необходимо упомянуть о, выбивающемся из общей канвы исторических событий, гражданине США Сеймуре Крее - основателе одноименной технологической компании Cray. Крей с 1950 года работал над серией машин UNIVAC, теми самыми универсалами. Однако через десять лет покинул компанию и перешел в компанию Control Data Corporation (CDC), которая предоставила ему возможность поработать над противоречивой по американским меркам системой. Которая, как, опять же, будет понятно позже, не выстоит перед давлением коммерческого успеха универсальных машин. Созданные под руководством Крея CDC 6600 и 7600 - суперскалярные суперкомпьютеры тем не менее стали востребованы в научных и военных лабораториях[6].

В 1970-м Крей ушел из CDC что бы основать собственную компанию, проповедующую непопулярную парадигму суперкомпьютеров, которая вовсю развивалась тогда по ту сторону железного занавеса. Знал ли Крей о советских разработках, или наоборот, знали ли советские инженеры о достижениях Крея установить не удается. Но, то что в итоге эти достижения так или иначе станут преобладающим в современных реалиях, во времена уже облачных вычислений и возвращающихся в строй "тонких" клиентов, видимо не знали ни Крей, ни идеологи злосчастного решения Министра радиопромышленности № 138 о создании НИЦЭВТ и назначении его головной организацией по разработке Единой системы ЭВМ (ЕС ЭВМ) "Ряд". Но это уже совсем другая история.

А пока история компьютеров и программирования стояла у развилки. С одной стороны мощнейшая IBM уже показывала эффективность производства универсальных машин и их коммерческий успех. С другой - военная ракетная, а затем и гражданская космическая промышленность требовала всё более специализированных вычислительных устройств и программ к ним. Одним из важнейших предъявленных критериев для новых ЭВМ в 60-х стало требование не сколько их высокой производительности, сколько компактности и надежности. Компьютеры стало нужно встраивать в ракеты и передвижные системы ПВО и ПРО. Что еще больше усугубило разрыв в парадигмах производства вычислительных машин и программирования между странами СЭВ и НАТО.

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

Так, например, бортовые компьютер миссии Аполлон были собраны из универсальных компонентов, но на новой технологической базе - подоспевших к тому времени полупроводниках. На основе исследований в Массачусетском Технологическом Университете проведенных при создании систем управления Аполлонами, появились автоматы с разделением времени - "многозадачные" многопользовательские операционные системы[7].

На советских же комплексах ПВО и системах наведения военных, а затем и гражданских, ракет использовались наработки в области суперскалярности. Развивались системы реального времени, которые нынче, почти пол-столетия спустя, приобрели актуальность в робототехнике и дронах. В боеголовках и радарах использовался асинхронный ввод и программы на основе недерминированных автоматов[8].

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

Зато мы знаем то, что путь к универсализации ЭВМ привел к еще одному не очень очевидному и даже причудливому на тот момент явлению - к появлению высокоуровневых языков программирования. Во условиях мелкосерийного производства и частой смены архитектуры вычислительных устройств в СССР вопрос об изобретении каких-то более удобных способов программирования не стоял остро. В США же, куда более объемные программы и первые универсальные операционные системы требовали всё больше и больше механического труда, который, не долго думая, всё так же решили автоматизировать. Автокод, Ассемблер, FORTRAN, РЕФАЛ... Но об этом, подробнее о конкретных людях, в следующий раз.

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

1. Harry L. Reed, Jr. Firing table computations on the Eniac // ACM '52 Proceedings of the 1952 national meeting. P. 103-106. URL: https://dl.acm.org/doi/10.1145/609784.609796

2. Токарева Н. Н. Об истории криптографии в России. // Исторические очерки по дискретной математике и её приложениям. // Прикладная дискретная математика. Институт математики им. С. Л. Соболева СО РАН, г. Новосибирск. 2012. № 4(18). С. 82–107.

3. Агамирзян И. Р. Лавров Святослав Сергеевич. // Страницы истории отечественных ИТ. Том 1. Альпина Паблишер, 2010. С. 82-88

4. Holt J. How the Computers Exploded // The New York Review. June 7, 2012. URL: https://www.nybooks.com/articles/2012/06/07/how-computers-exploded/

5. Дубровский А. Чтим прошлое, работаем на будущее. К 60-летию отечественной вычислительной техники // Наука и жизнь. — 2008. — № 6. URL: https://www.nkj.ru/archive/articles/14134/

6. Allison D. Seymour Cray Interview. National Museum of American History, Smithsonian Institution, May 9, 1995 URL: https://americanhistory.si.edu/comphist/cray.htm

7. Interbartolo, Michael (January 2009). "Apollo Guidance, Navigation and Control Hardware Overview" (PDF). URL: https://ntrs.nasa.gov/api/citations/20090016290/downloads/20090016290.pdf

8. Э.М. Пройдаков, Е.Н. Филинов, А. Ю. Нитусов. Календарь компьютерных событий 1947–1991 гг. // Страницы истории отечественных ИТ. Том 1. Альпина Паблишер, 2010. С. 223-263

9. Пржиялковский В. В. История отечественной вычислительной техники. URL: https://www.computer-museum.ru/histussr/nicevt1.htm

10. Фет Я. И. Хрестоматия по истории информатики. Под ред. Михайленко Б.Г. Академическое издательство "Гер", Новосибирск, 2014

Запощено под Hanz Zimmer - Interstellar OST