Миллиардер из Кремниевой долины. История соучредителя Microsoft - Аллен Пол. Страница 18
Некоторые считают наш Бейсик для «Альтаира» серьезным достижением, потому что мы создали язык, не видя «Альтаира» и даже не имея микропроцессора Intel 8080, на котором строилась машина. Мы в самом деле добились небывалого, но не все понимают, что у нас просто не было выбора. «Альтаир» практически представлял собой коробку с центральным процессором внутри. В нем не было жесткого диска, дисковода для гибких дисков, негде было редактировать и хранить программы. И даже будь у него все это, отладка программ на 8080-м с ограниченной памятью была бы долгим и трудным занятием.
И любой программист, решивший представить в Альбукерке Бейсик для 8080-го, столкнулся бы с громадными проблемами. Он должен был бы для начала сообразить, что нужен симулятор, а затем создать его с нуля на большом компьютере или мини-компьютере. Мы с Биллом получили серьезное преимущество в скорости и производительности за счет средств разработки для нашей Traf-O-Data. Но могли ли мы на самом деле написать интерпретатор Бейсика?
Работу мы строили так же, как и при создании Traf-O-Data. Я должен был создать средства, макроассемблер и симулятор, а Билл занимался структурой интерпретатора. В отличие от пожирающего ресурсы компилятора, который преобразует целый файл исходного кода в Ассемблер или машинный язык, интерпретатор выполняет по одному фрагменту кода, что позволяет снизить издержки пользователей «Альтаира». В то время четыре килобайта памяти стоили в розницу чуть меньше трехсот долларов – приличная сумма для 1975 года, но не препятствие для безумного любителя. Задача была сложная, но мы были уверены, что втиснем упрощенный вариант интерпретатора в эти четыре килобайта, чтобы еще осталось место для маленьких программ, написанных пользователем.
Один важный участок нашего Бейсика оставался белым пятном: операции с плавающей запятой, которые необходимы при работе с большими числами и десятичными дробями в экспоненциальной форме [3]. Однажды мы с Биллом ужинали в кафе «Кариер-Хауса», где продвинутые студенты-математики болтали о гиперкубах и геометрии пяти измерений. Я вслух пожаловался, что придется самому писать математические подпрограммы, и тут кучерявый новичок, сидевший напротив, неожиданно сказал:
– Я делал их для PDP-8.
Мы потащили его в комнату Билла обсуждать наши проблемы – и так мы нашли Монте Давидоффа (Монте выторговал за работу 400 долларов сразу и еще несколько тысяч за доработку в Альбукерке).
Решив затруднение, мы отправились в гарвардскую «Вычислительную лабораторию Айкена» на Оксфорд-стрит – одноэтажное бетонное здание, где стояли обычно незанятые терминалы разделенного времени. Сроки поджимали нас с самого начала. Билл сказал Эду Робертсу, что наш Бейсик почти готов, и Эд ответил, что хотел бы посмотреть его примерно через месяц. На деле же у нас не было даже инструкции по эксплуатации 8080-го. Купив инструкцию, я принялся за работу. У 8080-го оказалось в два с лишним раза больше команд, чем у 8008-го, а значит предстояло написать множество макросов. Но основы архитектуры у двух этих чипов были сходные, так что общий подход оставался прежним. Мне снова требовалось превратить программы PDP-10 в Ассемблер для микропроцессора. Я закончил макросы за пару дней.
Мой симулятор для 8080-го получился больше, но по сути таким же, что и для Traf-O-Data; и я снова модифицировал отладчик PDP-10, чтобы мы могли остановить программу и заглянуть внутрь нашего Бейсика. Бывают в жизни программиста моменты, когда все складывается, когда мозг работает на полную мощность; для меня это был один из таких моментов. Меня воодушевил новый видеомонитор у Айкена (или «стеклянный телетайп» – на жаргоне того времени) – DEC VT05. Очень помог доступ к высокоскоростному принтеру и жесткому диску PDP-10. Через месяц у нас были средства разработки для нового чипа, каких не было больше нигде. Пакет программ для 8080-го получился быстрым и мощным. Я до сих пор горжусь им.
Мои средства разработки дали нам начальный толчок, а программистский талант Билла позволил быстро двигаться вперед. К тому времени, как я доделал набор инструментов, Билл уже продумал структуру интерпретатора. Как сейчас вижу: Билл то шагает по комнате, то сидит, раскачиваясь на стуле, а потом начинает писать в желтом разлинованном блокноте; у него пальцы были в пятнах от разноцветных фломастеров. Когда я закончил симулятор, Билл пересел за терминал. Он, раскачиваясь, проглядывал записи, затем стремительно набивал код, держа руки в своей странной манере, и снова читал. Он мог сидеть так часами без перерыва.
Создавая наш доморощенный Бейсик, мы заимствовали кое-что из предыдущих версий – давнишняя программистская традиция. Языки развиваются, идеи смешиваются; в компьютерной технике мы все стоим на чьих-то плечах. Шли недели, задача все больше захватывала нас. Насколько нам было известно, мы создавали первый язык программирования высокого уровня специально для микропроцессора. Иногда мелькало подозрение, что какая-нибудь группа в Массачусетском технологическом или в Стэнфорде может опередить нас, но мы отбрасывали эти мысли. Мы справимся? Мы можем завершить работу и отчитаться в Альбукерке? Да, можем! Мы энергичны и умелы, мы ни за что не упустим такую возможность.
Мы работали без перерыва, в две смены по выходным. Билл практически забросил учебу. Монте как-то проспал занятия по французскому, которые начинались в час дня. Я игнорировал работу в Honeywell, появляясь в офисе в обед. Дотерпев до половины шестого, я возвращался к Айкену, где сидел часов до трех утра. Я сохранял файлы, спал часов пять-шесть – и все сначала. Мы обедали в гарвардской пиццерии или брали по тарелке «пупу» в «Аку-Аку» – местной версии ресторанов «У торговца Вика». Я очень любил их яичные роллы и жареные креветки.
Во время наших ночных бдений я иногда замечал, что Билл дремлет у терминала. Порой он на середине строки начинал клониться вперед, пока не тыкался носом в клавиатуру. Продремав час или два, Билл открывал глаза, приглядывался к экрану и, моргнув пару раз, продолжал точно с того места, где остановился, – потрясающий дар концентрации.
Работая в таком тесном сотрудничестве, мы трое сдружились. Поскольку наша программа выполнялась на верхнем уровне многопользовательской операционной системы TOPS-10, мы могли работать одновременно. Мы устраивали соревнования: кто напишет подпрограмму с меньшим числом команд; разбредались с блокнотами в разные углы и начинали строчить. Потом кто-нибудь подавал голос:
– Я могу за девять.
Другой откликался:
– А у меня – пять!
Когда Монте разложил на полу распечатку своей подпрограммы плавающей запятой, Билл растянулся рядом с длиннющей бумажной гармошкой, выискивая, где еще можно сократить. Мы знали, что каждый сэкономленный байт освободит дополнительное место для приложений пользователя.
(Теперь мы живем в ином мире, где шестнадцать гигабайт памяти – в четыре миллиона раз больше, чем было у нас на «Альтаире» для Бейсика, – упакованы в iPhone. Изящный, короткий код можно считать утерянным искусством. Люди еще пытаются делать программы эффективными, но никто уже не экономит байты – и даже мегабайты.)
Несколько лет назад, когда мы с Монте вспоминали те дни, он сравнил программирование с писательским ремеслом – мне это показалось хорошей аналогией нашего подхода к Бейсику для «Альтаира». Сначала мы определили сюжет – концептуальный этап программирования. Затем мы взяли большую проблему и разделили ее на составные части – «главы», сотни подпрограмм и связанные с ними структуры данных, а потом снова соединили их вместе. Если строчка не работала, мы переписывали черновик. Главная проблема – удерживать целую картину, пока сражаешься с деталями маленькой подпрограммы, и постоянно сопоставлять одно с другим. Это была, пожалуй, самая сложная и захватывающая задача из всех, с какими я сталкивался.
По мере продвижения вперед наша уверенность росла. Однажды мы позвонили в MITS узнать программы установления связи для телетайпа, чтобы написать коды ввода-вывода для «Альтаира». Мы поняли, что мы на верном пути, когда Билл Йейтс, партнер Эда Робертса и ведущий инженер, сказал, что до нас никто не задавал им этот вопрос. Тут мы поняли, что работа наша.