Кодеры за работой — страница 106 из 124

Я прослушал несколько курсов по электротехнике и логике и тот компьютерный курс и вроде во всем разобрался. Я не понимал, что делает действительно хороший программист, потому что был тогда еще ребенком. Но считал, что уже умею программировать.

По-настоящему я погрузился в это, присоединившись к кружку под названием «Клуб технического моделирования железной дороги». Я решил, что это очень интересно, — релейная логика была моим коньком. У них была модель железной дороги, вся построенная на реле и шаговых переключателях. Через этот клуб я познакомился с людьми из RLE — Исследовательской лаборатории электроники. В те времена мы целыми днями сидели в подвале 26 корпуса и набивали перфокарты, чтобы вечером отдать их «компьютерному шаману», который на следующий день вручал нам стопку распечаток. Потом я вошел в проект MAC. И заметил, что вместо математики все больше времени уделяю компьютерам.

А из RLE открывалась прямая дорога в научно-технологический центр Tech Square. Там я познакомился с такими людьми, как Ричард Гринблатт и Билл Госпер. Тогда я только начинал познавать этот мир и едва ли представлял из себя что-то как программист. Например, в проект MAC я попал, увлекшись компьютерной игрой «Spacewar!». Причем я интересовался ею не как программист: «Дайте взглянуть на исходный код. Как вы это сделали?» На том этапе я был просто геймером. И мне сказали, что ребята из проекта MAC разработали потрясающую версию Spacewar!, что у них крутые консоли и они могут сколько угодно использовать PDP, так что мне немедленно захотелось стать одним из них. Так я познакомился с Питером Сэмсоном в тот момент, когда он пытался (неудачно) решить грандиозную задачу, связанную с метрополитеном Нью-Йорка, — чтобы по одному билету можно было объехать его весь с максимально возможной скоростью.

Я был, наверное, типичным второкурсником, полностью погруженным в типичные для второкурсника проблемы, и в то же время видел всех этих ребят, специалистов, прекрасно понимающих, что они делают. Писал небольшие учебные программы; одна, помнится, была связана с поиском пути в лабиринте. Лягушка должна была, перепрыгивая с одного листа кувшинки на другой, выбраться из пруда. Помню, как писал эту программу и помогал другим студентам из нашего общежития. Вот чем я занимался в то время, не задумываясь, к чему это приведет.

Оглядываясь назад, я могу сказать, что тогда осваивал азы ремесла программиста. Учился добиваться от компьютера нужного мне результата. Но в этом еще не было искры. Я не осознавал, что делаю; фактически я даже не понимал, как это все работает. Что-то вроде волшебства. Вот чем это было для меня в колледже. Настоящим программистом меня сделала работа в BBN.

Один мой университетский знакомый, уже отучившийся и работавший в BBN, сказал мне: «Давай к нам». Помню, я впервые попал туда в полночь, потому что BBN была безумным местом, где работа кипела круглосуточно, семь дней в неделю. Компания была своеобразным продолжением лабораторий MIT. Каждый мог приходить и уходить когда хочет. И мой приятель как раз работал в ночную смену. Вот мы и наведались туда как-то поздно вечером. Все было загадочным и мистическим; я, по-моему, вообще не понимал, что мне показывают. Вскоре мне передали, что меня хотят нанять. Пригласили на интервью и взяли на работу.

Сейбел: Вы тогда были на третьем курсе MIT?

Козелл: Точно. В сентябре меня взяли на полставки. А уже в начале октября я отчислился и устроился в BBN на полный рабочий день. Теперь мне кажется, что я не был так уж хорош. Я видел компьютер PDP-1, но понятия не имел, как на нем программировать. И ничего не знал о том, что такое разделение времени. Впрочем, это неудивительно, потому что об этом тогда знали хорошо если человек пятьдесят во всем мире.

В BBN тогда делали совместный проект с Главным госпиталем Массачусетса по автоматизации работы больниц, и меня взяли в этот проект. Начинал я как программист приложений, поскольку это было все, на что я тогда годился. Проработал в этом качестве недели три. Но вскоре стал системным программистом, писал библиотеки, которые они использовали. И некоторое время спустя два системных гуру, парни, создавшие большую часть системы разделения времени для PDP-1, взяли меня под опеку и подключили к своей работе. Той зимой они оба покинули BBN, чтобы продолжить свое университетское образование. И к январю я был «царем системы разделения времени PDP-1» — отвечал за весь проект целиком.

За короткое время меня посетила целая серия озарений. Я внезапно понял все про разделение времени. Понял все про системы реального времени. И как только я все это понял, система разделения времени сразу заработала у меня в голове. После этого все остальное уже было делом техники.

Для своего времени это был весьма амбициозный проект. Идея была в том, что телетайпы модели 33 — шумные, громоздкие и печатавшие только прописными буквами — должны быть установлены в каждой больничной палате. Телетайп в приемной у врача. Телетайп в аптеке. И телетайп в каждом офисе администратора, думаю, тоже. И наша маленькая система разделения времени должна была все это координировать.

Как только пациент входит, его приглашают лечь на кушетку. Доктор сразу назначает анализы. По телетайпу сестре приходит сообщение: «Возьмите такие-то анализы и пронумеруйте их». В лабораторию приходит сообщение: «Проанализируйте эти образцы». Если врач прописывает какое-то лекарство, в аптеке сразу об этом узнают и готовят его.

Дурацкий шумный телетайп в каждой палате был просто чудом. Возня с этими примитивными громоздкими аппаратами была довольно утомительной, и медики бунтовали против нее, но меня это мало волновало. Я витал в системных облаках.

Я решил, что вся система должна быть абсолютно безотказной. Не помню, требовало от меня этого начальство или нет, я сам поставил перед собой такую задачу. Решил, что должен доказать — именно я должен, — что разделение времени может работать. Что это достаточно надежная вещь, чтобы медики могли ей довериться. Я представлял себе ситуацию, когда пациенту срочно нужно лекарство, а система вдруг «упала». Или, что еще хуже, она потеряла рецепт и пациент вообще никогда не получит свое лекарство. А что будет, если все рецепты перепутаются, а ничего не подозревающие врачи поверят электронике? Так что я решил, что система вообще не должна ломаться. Ее нужно было сделать столь же надежной, как UNIX 30 лет спустя.

Но выполнять отладку в реальном времени было невозможно. Когда система «падала», лампочка гасла, и все. Контрольная панель позволяла считывать и записывать содержимое памяти. Но отладить систему можно было, только узнав ответ на вопрос «Что она делала перед отключением?». Нужно было не запускать программу, а просмотреть список выполненных операций. Так что я рылся в памяти машины, просматривая рулоны распечаток. И постепенно учился делать это все лучше и лучше.

Сейчас даже страшно подумать, насколько лучше. В общем, в итоге начальству пришлось выдать мне пейджер. В те времена это был настолько крутой аппарат, что служебные давали только врачам. Громоздкая неудобная штука, которая умела только одно — пищать. Никакого обмена сообщениями. И он работал только в Бостоне и вокруг него, потому что передатчик был установлен на крыше Пруденшл-центр. Но в радиусе 50 миль сигнал был.

Так я стал чем-то вроде робота: если мой пейджер запищал, значит, возникла проблема и нужно срочно выяснять. Немыслимо, но не имея клочка бумаги под рукой, по телефону-автомату на парковке я мог разобраться в восьмеричных адресах и в конце концов сказать парням на том конце провода: «ОК, теперь вводите такой-то адрес и жмите RUN», — и все начинало работать. Черт меня возьми, если я сейчас понимаю, как мне это удавалось. Но удавалось. Я следил за нашей системой разделения времени добрых два или три года.

Сейбел: Наверное, вам приходилось писать значительную часть кода самому.

Козелл: Так и было. Операционная система была еще не готова, когда я принял проект. Когда Стив Вейсс и Боб Морган уволились, чтобы учиться, она была полна багов и просто недописанных кусков. Мне пришлось доделывать работу за них, и одна из главных вещей, которым я научился в BBN, — как заставлять такие программы работать.

Я действительно считал, что компьютеры устроены абсолютно логично, что всегда можно четко поставить им задачу и что неумению заставить их работать нет оправданий. Как я сейчас понимаю, мне удивительно хорошо удавалось поддерживать работу системы, добавляя в нее новые куски кода и ничего не ломая при этом.

Так я и заслужил свою репутацию. Я знал, что мой босс и многие коллеги считают меня великим отладчиком. Отчасти это так и было. Но только отчасти.

На самом деле я был очень скрупулезным программистом, самонадеянно верившим, что в нашем деле довольно мало по-настоящему трудновыполнимых задач. Обычно я просто брал участок кода, который, по-видимому, не работал, и начинал в нем разбираться. И если мне удавалось разобраться в нем, я быстро понимал, что с ним не так и как это исправить.

Иногда попадались такие участки кода — обычно как раз те, которые другим ну никак не давались, — на которые я смотрел и говорил: «Тут все слишком запутанно».

Так что я еще раз читал исходную задачу и переписывал код с нуля. Некоторым из моих коллег, потрясающим программистам, например Уиллу Кроутеру, это не нравилось. Они считали, что таким образом можно, исправив в коде 2 ошибки, добавить туда 27 новых. Но у меня все получалось. Я мог полностью переписать программу, иначе организовав ее, чем это сделал автор, потому что имел собственное видение. Обычно так было проще, во всяком случае для меня. И обновленная программа работала.

Вот так я и заработал свою репутацию, исправляя ошибки, которые больше никто не мог исправить. Хорошо, что меня никогда не спрашивали, как я это делал. Потому что честный ответ, как правило, был: «Я недостаточно разобрался в коде, поэтому просто взял и написал новый».