ECP-18 в средней школе
В 15-летнем возрасте, когда я учился в старших классах, мне
нравилось проводить время в математической лаборатории. Однажды
туда привезли устройство размером с циркулярный станок. Это был
учебный компьютер для средних школ, он назывался ECP-18. Нашей
школе был предоставлен двухнедельный пробный период.
Я стоял в стороне и слушал разговоры учителей и техников. У
машины были 15-разрядные слова (что такое «слово»?) и барабанный
накопитель на 1024 слова. (Тогда я уже знал, что это такое, но только
теоретически.)
Когда машину включили, она издала свист наподобие того,
который издает реактивный самолет при взлете. Я предположил, что
это раскручивался барабан. Когда устройство набрало обороты, оно
работало относительно тихо.
Машина была очаровательной. Она напоминала офисный стол, над
которым возвышалась потрясающая панель управления – как на
капитанском мостике боевого корабля. Панель была украшена рядами
лампочек, которые также можно было нажимать, как кнопки. Сидя за
таким столом, человек ощущал себя словно в кресле капитана Керка.
[53]
Я наблюдал за тем, как техники нажимали кнопки. Когда кнопку
нажимали, лампочка загоралась, а при повторном нажатии она гасла.
Также они нажимали другие кнопки с названиями типа «Загрузить» и
«Выполнить».
Кнопки в каждом ряду были объединены в пять групп по три. Мой
Digi-Comp тоже был трехразрядным, так что я мог читать
восьмеричные цифры в двоичной форме. Было нетрудно понять, что
каждая строка представляет пять восьмеричных цифр.
Я слышал, как техники, нажимавшие кнопки, что-то бормочут. Они
нажимали 1, 5, 2, 0, 4 в строке «Буфер памяти», говоря при этом:
«Сохранить в 204». Они нажимали 1, 0, 2, 1, 3 и бормотали:
«Загрузить 213 в аккумулятор». Там был ряд кнопок с подписью
«Аккумулятор!»
Через десять минут моему 15-летнему разуму было абсолютно
ясно, что 15 означает «сохранить», а 10 – «загрузить», что в
аккумуляторе находились сохраняемые или загружаемые данные, а
остальные числа были номерами одного из 1024 слов на барабане.
(Так вот что такое «слово»!)
Слово за слово (непреднамеренный каламбур), мой пытливый ум
все глубже проникал в коды инструкций и концепции. К тому
моменту, когда техники ушли, я уже понимал основные принципы
работы машины.
Этим же днем, во время часов для самостоятельной работы, я
пробрался
в
математическую
лабораторию
и
начал
экспериментировать с компьютером. К тому времени я уже отлично
знал, что проще попросить прощения, чем добиться разрешения! Я
ввел программу, которая умножала содержимое аккумулятора на 2 и
прибавляла 1. Я ввел в аккумулятор 5, запустил программу – и увидел
в аккумуляторе 13! Программа работала!
Я ввел еще несколько таких же простых программ, и они тоже
работали так, как положено. Я был повелителем Вселенной!
Сутки спустя я понял, насколько я был глуп – и как мне повезло. Я
нашел в лаборатории памятку, в которой были перечислены все
инструкции и коды операций, в том числе и тех, которые я не мог
узнать, наблюдая за техниками. Я с радостью узнал, что известные мне
коды были интерпретированы правильно, а остальные вызвали прилив
энтузиазма. Однако среди новых инструкций я заметил инструкцию
остановки HLT. Так уж совпало, что инструкция остановки была
словом из одних нулей. И еще совпало то, что я включал в конец
каждой из своих программ слово из одних нулей, чтобы стереть
содержимое аккумулятора. Концепция остановки мне просто не
приходила в голову. Мне казалось, что программа сама остановится,
когда все сделает!
Помню, я однажды сидел в математической лаборатории, наблюдая
за тем, как один из учителей боролся со своей программой. Он
пытался ввести два числа в десятичной форме с подключенного
телетайпа, а потом распечатать их сумму. Каждый, кто пытался
программировать подобные задачи на машинном языке мини-
компьютеров, знает, что они отнюдь не тривиальны. Нужно прочитать
символы, разбить их на цифры, затем преобразовать в двоичную
форму, просуммировать, преобразовать их обратно в десятичную
систему и закодировать в символы. Поверьте, когда программа
вводится в двоичном виде с передней панели, все намного хуже!
Я наблюдал за тем, как он вставил в программу команду остановки
и запустил. (О! Хорошая мысль!) Примитивная точка прерывания
позволила ему проанализировать содержимое регистров и понять, что
сделала программа. Помню, как он пробормотал: «Ого! Как быстро!»
Понятия не имею, какой алгоритм он использовал. Такое
программирование для меня еще оставалось чем-то вроде волшебства.
И он ни слова не сказал мне, пока я смотрел ему через плечо. Никто
не говорил со мной об этом компьютере. Думаю, меня считали
помехой, на которую не стоит обращать внимания, – чем-то вроде
мошки, порхающей по лаборатории. Достаточно сказать, что ни
ученик, ни учителя не обладали высокими навыками социальных
коммуникаций.
В итоге его программа заработала. Выглядело это потрясающе: он
медленно вводил два числа, потому что, несмотря на более ранние
восклицания, компьютер работал довольно медленно (подумайте,
сколько времени занимало чтение последовательных слов с
вращающегося барабана в 1967 году). Когда он нажал «ввод» после
второго числа, компьютер яростно помигал лампочками, а потом
начал выводить результат. На каждую цифру уходило около секунды.
Он вывел все цифры кроме последней, потом секунд пять мигал еще
яростнее, вывел последнюю цифру и остановился.
Откуда взялась пауза перед последней цифрой? Этого я так и не
узнал. Но зато я понял, что выбор решения задачи может иметь
принципиальные последствия для пользователя. Даже при том, что
программа выводила правильный ответ, с ней
все равно
было что-то не
так.
Это тоже было обучение. Конечно, не такое обучение, на какое я
бы мог надеяться. Было бы намного лучше, если бы один из этих
учителей взял меня под опеку и стал работать со мной. Но даже
наблюдение за ними позволяло мне стремительно получать новые
знания.
Do'stlaringiz bilan baham: |