Навстречу своему лучу. Воспоминания и мысли. Виктор Кротов
Писали мы на специальных бланках последовательность одноадресных команд. То есть в каждой строке был указан числовой код команды (например: взять число из такой-то ячейки в сумматор, или прибавить к сумматору содержимое ячейки с таким-то адресом, или записать содержимое сумматора в ячейку с указанным адресом, или передать управление на команду под таким-то номером) и адрес – номер ячейки, где хранится нужное число. Из этих строк и состояла программа.
Что можно запрограммировать таким образом? Теоретически – что угодно (кто сомневается, пусть прочитает про машину Тьюринга). Правда, «что угодно» было тогда довольно ограниченным. Мы писали программы для итеративных методов приближённых вычислений. Выполнялась программа одну-две минуты, но составление, подготовка и отладка занимали один-два месяца.
Однажды, чтобы к моменту отладки примерно знать результат, я произвёл те же расчеты (только с гораздо меньшим числом итераций-повторений) на механическом арифмометре. Несколько дней трещал на нём очень рьяно, примерную оценку результата получил, но понял, что ЭВМ – это великое дело.
Написав программу, мы сдавали её преподавателю; он относил плоды наших титанических усилий в ВЦ «на набивку». Когда мы приходили туда на практическое занятие, нас ждали… метры киноплёнки. На чёрной целлулоидной ленте были пробиты (отперфорированы) наши команды в виде рядов маленьких прямоугольных отверстий (каждый ряд соответствовал строке на бланке). Чтобы запустить плёночную перфоленту (многослойное кольцо) на вводном устройстве, нужно было склеить её начало с концом, причём с переворотом, как ленту Мёбиуса, – это позволяло прокручивать её многократно. Сначала вводили программу, потом исходные данные, потом запускали программу на выполнение. На панели высвечивался результат. Ряд лампочек означал число в двоичной системе (горит лампочка – 1, не горит – 0). Для удобства лампочки были разбиты на триады, так что можно было считывать результат не в двоичном, а в восьмеричном виде (всё-таки компактнее). До распечаток ещё было далеко.
Найдя ошибки в командах или в исходных данных на вводной перфоленте, мы могли кое-что исправить. Вставить строку не получалось, надо было всё отдавать на перфорацию заново. Но исправить 0 на 1 (ввод тоже имел двоичную форму), то есть пробить дырочку, можно было ручным перфоратором, похожим на дырокол. Чтобы исправить 1 на 0, устраняя пробитое отверстие, приходилось вставлять в него маленький прямоугольный кусочек плотной чёрной бумаги (такие кусочки почему-то назывались «мόзги»), выглаживая его ногтем, чтобы закрепить в дырке.
Описываю это без сожалений о каменном веке программирования, лишь восхищаюсь тем, как разительно изменилась компьютерная техника на моей памяти. Каким естественным, разнообразным и творческим стало программирование. Каким ошеломляюще-непостижимым был бы мгновенный перенос из того времени в это!
Насколько же ещё более ошеломляющим, ещё более непостижимым будет