Но главное – DECtape поддерживал древовидную структуру, такую же, как и «Гигант Брайант» или будущие дискеты. Обычная магнитная лента работала как последовательный поток, изменить записанные данные было невозможно; если записать что-то новое в середине ленты, последующие данные можно утерять. А на DECtape информация разбивалась на отдельные блоки – каждый блок можно было переписать, не затрагивая остальные. Теперь стало возможным хранить по несколько программ на одной ленте, искать любую по имени, редактировать любую независимо или записывать новые данные поверх старых. Пока я не купил домой собственный терминал, мои картриджи DECtape были первым элементом компьютерной технологии, принадлежавшим лично мне. Мы хотели иметь их побольше – картриджи были знаком статуса. Эти маленькие картриджи делали мою работу менее эфемерной, более материальной – она словно обретала реальную и вечную ценность.
Глава 4
Братство
Мы с Биллом оказались самыми стойкими среди лейксайдцев в CCC. Обычно отец заезжал за мной на машине, чтобы отвезти домой пообедать. Я хотел остаться – иногда отец разрешал, иногда нет. Родителей беспокоило, что я начал отставать в школе. Стали появляться низкие отметки, и учителя, похоже, не слишком одобряли мое новое увлечение. Оценивая компьютерное программирование, мистер Маэстретти писал: «Пол добился больших успехов. Он проявляет огромный интерес к работе и достиг мастерства, далеко превосходящего… средний уровень». Но по поводу физики, по которой он поставил мне в середине года «С+» (хотя весной я вытянул «А»), он сожалел, что «все силы [мои] направлены на работу с компьютером – за счет других дисциплин».
Учитель по английскому, мистер Тайлер, огорченный моим хроническим безразличием к домашним заданиям, философски заключал: «Пол – фанатик (в старом религиозном смысле слова) и, охваченный энтузиазмом, почти не замечает ничего остального. Как объяснить ученику пагубность его подхода? Не знаю. А может быть, прав именно он, а не мы?»
На самом деле я бурно развивался в профессиональной среде, работая с тем, что мне нравилось. Чего еще желать для шестнадцатилетнего?
Предоставленные сами себе, мы с Биллом корпели над программами, пока не сводило желудок от голода; тогда мы отправлялись через дорогу в заведение под названием Morningtown Pizza. Рядом пристроился ночной магазин – перед ним парковались полицейские машины, а сами полицейские в задней комнате резались в карты. Мы жадно проглатывали пиццу прямо на месте или приносили обратно в CCC – и старались не закапать маслом телетайпы. Мы работали, пока не уходили все, кроме ночного оператора. Однажды я работал один и вовсе потерял счет времени. Автобусы перестали ходить, и было поздно звонить отцу, чтобы он забрал меня; пришлось идти домой пешком – целый час. Меня всю дорогу провожал бродячий пес; потом родители пристроили его нашим знакомым.
Для меня святым Граалем программного обеспечения была операционная система, нервная система компьютера. Она выполняет распределительную функцию, позволяя центральному процессору считать: переключаться от программы к программе; сохранять информацию в файлах; передавать данные на модемы, внешние диски и принтеры. О ней не думаешь, пока не возникнет ошибка и система не рухнет.
В те времена операционные системы не были черными ящиками, как сегодня. Производители поставляли вместе программное и аппаратное обеспечение; любая компания, приобретая компьютеры DEC, могла модифицировать TOPS-10, как считала нужным. Мы с Биллом знали, что наши наставники приобрели исходные коды TOPS-10 и работают над ее улучшением. Мы знали и то, что нам эта задача не по плечу, – и поэтому она манила нас в десять раз сильнее, чем все, над чем мы трудились. По выходным, оставшись вдвоем, мы с Биллом отправлялись копаться в мусорных контейнерах на заднем дворе. Мы открывали металлическую крышку бака, я сцеплял пальцы, чтобы подсадить Билла, – он весил не больше ста десяти фунтов. Билл свешивался в контейнер и тащил все, что казалось привлекательным. После нескольких попыток мы нашли настоящее сокровище: пачку заляпанных и смятых распечаток. Я помню запах кофейных пятен и помню, что подумал: «Не слишком аппетитно, но мне плевать».
Мы отнесли наш клад в терминальный зал и изучали его часами. У меня не было никакого Розеттского камня, и понимал я в лучшем случае пару строк из десяти, но все равно восхищался элегантностью компактного кода. Я знал: чтобы понять архитектуру такой операционной системы, как TOPS-10, необходимо освоить Ассемблер – язык низкого уровня, который обращается непосредственно к машине. Заметив мой интерес, Стив Расселл отозвал меня в сторону, протянул руководство по Ассемблеру в обложке из блестящего пластика и сказал:
– Тебе нужно это прочесть.
В нашем мире с его принципом «сделай сам» можно было больше ничего не говорить.
Дрожа от возбуждения, я отнес книгу домой и штудировал ее, пока не выучил вдоль и поперек. Спустя неделю и 150 страниц я уперся в стену; руководство описывало, как писать команды, но никак не поясняло, что они делают с компьютером. Я снова пришел к Расселлу и сказал:
– Я не понимаю.
Расселл (с озорным блеском в глазах) ответил:
– Ага, тебе стоит прочесть вот это, – и протянул мне еще 150 страниц в пластиковой обложке: справочник по системе.
Я с трудом одолел текст и понял, что чего-то по-прежнему не хватает. Ужасно не хотелось беспокоить Расселла, но я снова пошел к нему и сказал:
– Я все равно не понимаю. Как можно послать символы на телетайп?
Расселл ответил:
– Ну да, тебе нужно еще кое-что.
Он вынес что-то, что показалось мне телефонным справочником: это было руководство по операционной системе. Я до сих пор не могу решить: кормил меня Расселл с ложечки или морочил голову; мне нужны были все три справочника. Мне потребовалось еще несколько недель, чтобы начать делать первые шаги в Ассемблере, – и месяцы, чтобы обрести уверенность.
– Это просто фантастика, – сказал я Биллу и остальным.
Но они завязли в своих языках высокого уровня, на которых программы можно писать быстрее. И я продолжал в одиночку.
В отличие от Бейсика или Фортрана, где в каждой команде объединяется несколько инструкций, Ассемблер – прямое, точное представление двоичного машинного кода, превращенное в текст и символы, которые легче запомнить, чем последовательности нулей и единиц. Например, строчка на Бейсике выглядит так:
А = В + С
На Ассемблере та же самая команда пишется так:
Load B.
Add C.
Store in A.
(Загрузить В. Прибавить С. Сохранить результат в А.)
Ассемблер был менее выразительным и гораздо более трудоемким, чем Бейсик. И если программы, написанные на языках высокого уровня, можно исполнять на разных процессорах почти без изменений (это похоже на близкие диалекты), для каждой аппаратной платформы был свой Ассемблер – и они отличались друг от друга, как немецкий и португальский. С другой стороны, загруженный в машину код Ассемблера исполнялся в сотни раз быстрее. Вы обращались прямо к аппаратному обеспечению, непосредственно к «железу». Быстрее просто некуда.