Дела давно минувших дней

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

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

Цифры 60 в названии языка означали, что язык был разработан до 1960 года. На дворе были семидесятые, физики на Алголе никогда ничего путного не писали. В институте руководитель практики сформулировал Вене задачу, вручил ему учебник по Фортрану и сказал, чтобы через неделю Веня принёс ему решение этой задачи. Фортран (язык трансляции формул) оказался не сложнее языка эсперанто, который Петрович выучил из любопытства за неделю на первом курсе. Сейчас о языке Алгол помнят единицы, а вот Фортран остался для Вени главным инструментом на всю оставшуюся жизнь, хотя позднее он изучил десятки других языков программирования, и некоторыми даже пользовался в своей работе. Современный Фортран-Х отличиается от того Фортрана-II, с которого Веня начал свою практику не менее, чем древнеславянский язык отличиется от современного русского. Не каждый ведь знает смысл слов «понеже» или «зело», а также звательный падеж и двойственное число.

Когда же Петрович вышел на работу, он попал в обстановку, которая отодвигала его лет на тридцать в прошлое. Для тех задач, которые он решал, вычислительные машины Минск-32 и М-220 были слабоваты. Самой мощной была машина БЭСМ-6, которая делала миллион операций сложения чисел в секунду, имела оперативную память в 32 тысячи шестибайтовых слов и перфокарточный ввод. Этот первый советский суперкомпьютер на транзисторах занимал площадь 225 квадратных метров. Его центральный пульт мигал сотнями неоновых лампочек, десятки кнопок и тумблеров подключения периферийных устройств имели таинственные надписи типа «Пр-2М’». Казалось, нормальный человек не в состоянии запомнить всю эту электронную абракадабру. Но Петрович был тогда молод, он быстро освоился, и, когда нужно было прийти в приписное время на ночь для решения особо сложной задачи, он отправлял девочек-операторов пить кофе, а все нужные кнопки нажимал сам.

К его удивлению, никто из сотрудников лаборатории не знал языков программирования. Программы писались «в кодах», то есть на языке команд БЭСМ-6, в виде последовательности двоично-восьмеричных чисел. Скажем, команда сложения двух чисел состоит из указания номера регистра, в котором хранится первое число, кода операции (для сложения это 01) и адреса, по которому в оператисной памяти хранится второе число. Эта команда могла выглядеть так 08012356. Программа помещается в некоторое свободное место памяти, данные для программы – в другое место памяти. Поскольку некоторые команды могут ссылаться на другие команды, размещённые в фиксированном месте памяти, ошибка программиста, для исправления которой нужно на месте одной ошибочной команды вставить три других, представлялась маленькой катастрофой, для исправления которой делалась «заплатка»: вместо ошибочной команды вставлялась команда перехода на некоторое свободное место памяти, где помещались команды «заплатки», завершавшиеся командой перехода на следующую команду после ошибочной. Таким образом, программист должен был помнить не только последовательность команд своей программы, но и распределение памяти для данных и «заплаток». Аналогом этой ситуации является текст, напечатанный на машинке. Если между предложениями нужно вставить кусочек текста, нужно перепечатать не только текущую страницу, но и все остальные до конца главы, поскольку новая глава всегда начинается с новой страницы.

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

Программисты быстро это поняли и разработали языки общения низкого уровня с компьютерами, которые назывались автокодами. Программа на автокоде представляет примитивный текст, в котором все элементы машинных команд записываются мнемоническими последовательностями. Например, та же команда сложения чисел А и Б может иметь вид «Р8 + Б», но сначала в восьмой регистр нужно заслать число А. Что же касается местонахождения числа Б, его адрес автоматически определит программа-транслятор, которая переведёт текст программы с языка автокода на язык машинных команд. Теперь нет необходимости в «заплатках», новые команды в автокоде вставляются в нужные места текста, и транслятор автоматически назначит им новые правильные адреса. Очень важно, что теперь между содержательными командами в текст программы можно вставлять комментарии на человеческом языке, которые помогут изучающим чужую программу понять, что имел ввиду автор, написавший программу.

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

Только убедившись, что Петрович на Фортране пишет и отлаживает свои программы в десятки раз быстрее, чем они программы в кодах, сотрудники через несколько лет взялись за изучение языков программирования, выбрав тот же Фортран ввиду простоты его изучения. Было немало и других подробностей работы, которые у нынешних программистов вызывают изумление. Машина БЭСМ-6 была одна на весь Академгородок, и потому была аппаратом суперколлективного пользования, ибо работала она на вычислительные потребности всех академических институтов, университета и конструкторских бюро. Результаты выводились на АЦПУ-128 (алфавитно-цифровоы печатающие устройства), коих в Вычислительном центре было с десяток. Стояли эти устройства в отдельной комнате, ибо грохот производили изрядный, вредно действующий на нервную систему. Операторы входили в эту комнату только для того, чтобы оторвать результаты вычислений от выползающей из АЦПУ широкой ленты с перфорацией, как на туалетной бумаге. Работала эта сноповязалка так. На оси вращающегося ротора были закреплены 128 металлических колец, на ободе каждого был отлит полный набор печатаемых символов – буквы латинского и русского алфавитов, цифры, некоторые знаки препинания и спецсимволы. За каждый такт печати кольца проворачивались так, чтобы в ряд выстроились символы, в соответствие с поступающей печатаемой строкой, после чего ротор прижимался к бумажной полосе через пропитанную черной краской шторку, затем полоса бумаги продёргивалась на одну позицию и ротор готовился к печати следующей строки. Понятно, что в ограниченном наборе символов не было прописных букв – только заглавные, но не это было основной проблемой. Беда состояла в том, что это грохочущее устройства должно было печатать с максимальной скоростью, поэтому после небольшого срока эксплуатации в позиционировании печатающих колец появлялись люфты, и печатаемая строка уже не была ровной, символы начинали плясать. Но других устройств не было, с этим приходилось мириться.

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

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

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

Как-то Веня пожаловался своему приятелю Мишане из соседней лаборатории:

– Было же время, когда наша БЭСМ-6 по основным параметрам ничуть не уступала самому быстродействующему в мире компьютеру CDC-6600, а по некоторым параметрам даже опережала его. Что изменилось, почему мы вдруг оказались вне стремнины научно-технического прогресса?

– Не надо скулить, всё не так плохо, – ответил тот и рассказал историю, в которую Веня сначала не мог поверить, полагая, что приятель просто разыгрывает его.

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

– А как вводились числа?

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

– С объёмом оперативной памяти всё понятно, – пытал Веня, – а как быть с быстродействием и выводом данных?

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

Веня был потрясён услышанным. Теперь все его стенания относительно прорезания и заклеивания отверстий на перфокартах казались детским лепетом, поскольку ЭВМ, на которой он считал свои задачи совершала миллион операций в секунду, а объём оперативной памяти был в тысячу раз больше, чем у машины «Промiнь».

– И ты работал на этой сноповязалке целых десять лет?

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

Валентин Иванов, 13 июня 2022 г.


Рецензии