«ДВК 2М» – так назывался аппаратный комплекс, на котором создавалась программа «Расчет зарплаты». Для своего времени это был суперкомпьютер. Во-первых, он был персональным. Вполне приемлемого размера, помещался на стол. Во-вторых, у него было огромное быстродействие – целых 10 или 20 тысяч операций в секунду. Да-да, тогда быстродействие измерялось не тактовой частотой процессора, а именно операциями с двоичными числами. И в-третьих, у него было ОЗУ довольно большой емкости – целых 64 килобайта. Туда спокойно помещалась операционка, программа Бейсик, текст прикладной программы и ее данные. Чего в ДВК не было – так это винчестера. А значит, и записанной на нем операционки. К системному блоку прилагался болгарский сдвоенный дисковод размером 5,25 дюйма. В верхний слот я вставлял дискету с операционной системой и бейсиком. А в нижний – дискету с прикладной программой и данными.
Компьютер был отечественный, но сильно продвинутый. Поэтому он зависал и перегружался не чаще двух раз в день. При перезагрузке пропадали не только операционка в ОЗУ, но и, скажем, набитый за пару часов в бейсике текст новой программы. Помню, как долго я не мог прийти в себя, когда в обед компьютер завис и унес в небытие пять страниц готовой программы! Как я в ужасе бегал вокруг стола и думал, что «ну должен же где-нибудь остаться хоть какой-то след от такого серьезного труда!». Но, увы, след оставался только в моем мозгу. Именно тогда я впервые столкнулся с таким интересным феноменом: написанная повторно по памяти программа была всегда лучше прототипа! И короче, и работала быстрее.
Со спонтанными перезагрузками ничего нельзя было сделать. Более того, мы искренне радовались, что они не такие частые, как на больших машинах. Например, перезагрузки на ЕС ЭВМ случались раз в полчаса-час и считались нормой! Так вот, для того, чтобы не терять новую программу при каждой перезагрузке, нужно было ее периодически сбрасывать из ОЗУ на дискету. Но. Тут-то и начиналось самое интересное. Болгарский дисковод записывал программу на дискету. Иногда. Но не всегда. Чаще он шипел, трещал, свистел, но... не записывал! Через минуту шипения и свиста появлялось страшное сообщение «Write failure error» и можно было переходить к новой попытке. Иногда, после трех-четырех попыток, файл все-таки записывался. Однако не было никакой гарантии, что он прочитается! «Read failure error». Это было не менее ужасное и не менее редкое сообщение системы. И вот бывает, сидишь ты за компьютером, в конце рабочего дня, смотришь на листинг программы на экране и пытаешься ее хотя бы запомнить. Потому что записать ее не получается. Ну никак! Это ужасное чувство, думаю, напоминающее то, которое должен испытывать человек, бегущий за последним вагоном электрички, уже коснувшийся поручня, и вдруг осознающий, что поезд ушел.
Водоканал, для которого я писал программу, закупил сразу пять ДВК с болгарскими дисководами. Мы с девочками из бухгалтерии пытались найти среди них тот, который бы записывал и считывал файлы наилучшим образом. Дисковод, более надежный, чем другие, ценился на вес золота. Мы предпринимали различные способы улучшить работу болгарских дисководов. Особой популярностью пользовался такой способ. Покупался настольный вентилятор. Он ставился в коробку из-под бумаги. В коробке вырезались две большие дырки. Одна – для поступления воздуха. А вторая, квадратная, для болгарского дисковода. Он устанавливался в эту дырку и интенсивно охлаждался потоком воздуха. Кто-то свято верил в такие «усовершенствования», я же считал, что это все равно, что камлать на бубне – никакой гарантии. 50 на 50: или запишет, или нет. Вот тогда-то во мне и зародилось первое глубокое сомнение в братстве народов, СЭВ и целесообразности социалистического пути развития. Боже мой, как же я проклинал братьев болгар – криворуких безжалостных убийц моего времени!
Операционная система, которую мы тогда использовали, называлась RT11SJ. Загружалась она секунд десять и записывалась на диск в виде пары файлов. В отличие от MS DOS, которая появилась чуть позднее, операционка эта обладала намного большим количеством удобных команд. Например, могла выдавать список файлов с подкаталогами, а DOS не умел этого делать! «Убожество» – вот первое мое ощущение от использования DOS. Однако мы все-таки перешли на DOS окончательно и бесповоротно, когда поняли, что под ней «идут» все новые программы и игрушки, а программ для RT11 становится все меньше.
64 килобайт в ОЗУ и 250 килобайт на каждой дискете делали процесс написания большой программы весьма увлекательным. Программисту требовалась определенная сноровка, чтобы правильно разбить программу и данные на части и заставить их успешно взаимодействовать. Программа расчета зарплаты «Роза» работала так. Сперва в оперативную память загружалась система. Потом Бейсик. Потом Главная программа. Она просила вставить в нижний дисковод дискету № 1 с данными цеха 1 за январь 1989 года. Расчетчица могла отредактировать данные работников, ввести табель и посчитать зарплату за месяц. После этого, если дисковод работал, ей даже удавалось сохранить результаты расчета! Если она хотела их распечатать, Главная программа просила вставить диск с Программой для печати, потом диск с данными цеха, потом диск с Главной программой. Потом вставлялась дискета номер 2 для цеха номер 2, и так далее – до диска номер 42. 42 цеха было в Водоканале. И ни разу нам не удалось рассчитать их все. Или болгарский дисковод перегревался и останавливался (зачастую – уже навсегда). Или расчетчица что-то путала и записывала на диск номер 2 данные цеха номер 17. И неделю, матерясь, их восстанавливала. А что делать – дискет для архива просто не было! Или, если все шло хорошо, в каком-нибудь 27-м цехе обнаруживались новый вид расчета или ошибка в алгоритме, и все приходилось начинать заново! Помню, что благодаря тому ужасу, который вызывала необходимость дойти с такой технологией «до конца», все-таки было принято разумное решение принять программу у программистов по акту на примере двух цехов. После чего девочки продолжили считать зарплату в бумажных расчетных ведомостях, вплоть до того момента, пока программа не заработала надежно на «Искре-1030».
Вспоминая прошлое, я радуюсь тем грандиозным изменениям, что произошли в нашей работе. Надежные и производительные винчестеры, огромная оперативная память начисто избавили программистов от необходимости задумываться о таких вещах, как дефицит вычислительных ресурсов или аппаратные сбои. Теперь программист может сосредоточиться на главном – написании кода для решения задач пользователя.