Питер Сейбел - Кодеры за работой. Размышления о ремесле программиста
Аллен: Если честно, мне просто нужна была работа. У меня были долги, агент пришел прямо в кампус, и располагались они удачно - в штате Нью-Йорк. Так что я заполнила анкету, на самом-то деле толком не понимая, что за организация предлагает мне работу, что это за исследовательский центр IBM. Я тогда о них ничего не знала.
Несколько недель спустя мне позвонили - в то время я пыталась устроиться на работу в педагогический колледж в южном Иллинойсе. Я уже начинала отчаиваться - все никак не могла найти работу. Мне позвонили, когда я была в пути, и я согласилась - ровно ничего не зная о компании, и только заполняя бумаги выяснила, что речь идет об исследовательской лаборатории в Пафкипси.
Я устроилась туда и начала работать программистом. Компания IBM стремительно расширялась, их интересовала сфера информационных технологий, а поскольку не существовало никаких курсов по компьютерным наукам, то они нанимали людей отовсюду, откуда могли.
Сейбел: Чему вас там обучали?
Аллен: Насколько помню, это было своего рода обучение на ходу. Существовала определенная ориентация на нужды компании, но не могу припомнить, чтобы там были курсы по изучению программирования как таковые, что сейчас кажется немного странным. Кажется, были курсы, специфика которых зависела от подготовки того или иного сотрудника. Все проходило в очень неформальной обстановке.
Поскольку я была учителем математики, моим первым заданием стало обучение исследователей и других программистов языку Фортран. Я устроилась на работу в июле 1957 года, а Фортран был выпущен 15 апреля того же года. В моей же организации - исследовательском центре IBM - был выпущен указ, согласно которому к сентябрю все программы должны были писаться на Фортране. Это был их метод убедить собственных сотрудников - как и людей вне компании - использовать этот язык.
Сейбел: То есть речь идет об исследователях, работавших в IBM над собственными научными проектами?
Аллен: Да. У них был компьютер 704 - именно для работы на нем и был создан и оптимизирован Фортран. Они привыкли, что код на ассемблере можно было писать прямо на компьютере, то есть так же, как я делала в университете Мичигана, привыкли планировать время и запускать программы. Они не верили, что с помощью любого из высокоуровневых языков можно будет получать результаты, хотя бы сравнимые с получаемыми при программировании непосредственно самого компьютера.
Сейбел: И это был последний раз, когда ученые перешли на новый язык, - ведь они до сих пор используют Фортран, не так ли?
Аллен: Верно. Да, это был неудачный курс. Но в конце концов это был прекрасный опыт для всех нас, ведь Фортран был не только языком - в рамках этого проекта был разработан чрезвычайно передовой компилятор, который заложил структурные основы современных компиляторов.
Сейбел: Следующий ваш крупный проект, о котором я знаю, - это компьютер Stretch. Было ли что-нибудь в промежутке между этими двумя проектами?
Аллен: Да, были еще два проекта, над которыми я работала после Фортрана и перед компьютером Stretch. Один из них - разработка управляемой автоматической отладочной системы на ассемблере для компьютера 704. Мне очень нравилось работать над этим проектом.
Это была весьма незрелая операционная система. Мы ее делали втроем. Мы установили на компьютере несколько кнопок - тогда это можно было сделать, - одной из которых была аварийная кнопка. Когда казалось, что программа зависла, можно было просто нажать эту кнопку. Затем мы писали отладчик; одной из моих задач было написать на ассемблере программу, которая бы располагала двоичные данные по колонкам. Устройство считывания с перфокарт представляло данные в виде построчного двоичного кода, когда биты каждой инструкции располагаются в строке, но на ленте данные представлялись по-другому. Вот и требовалось организовать поколонное двоичное представление. Эту программу я храню до сих пор.
Среди прочего я с большим удовольствием вспоминаю чтение исходной программы - мне она показалась весьма изящной. Мне это запомнилось, потому что эта выдающаяся программа была написана не очень опытным на тот момент программистом - Роем Наттом. Она была прекрасна.
Сейбел: Что делает программу прекрасной?
Аллен: Она должна представлять собой простое прямолинейное решение поставленной задачи; при достаточно сложной структуре эта очевидность не вытекает непосредственно из поставленной задачи. Наверное, именно тогда я приобрела привычку учиться программированию и изучать новый язык посредством чтения и подробного изучения готовых программ,
Сейбел: Как вы читаете код? Предположим, собираясь изучить новый язык, вы находите готовую программу - и что с ней делаете?
Аллен: Ну, например, однажды один из моих сотрудников написал парсер. Это уже было в рамках проекта PTRAN. Мне хотелось понять его методы. Это, пожалуй, лучший парсер в мире (сейчас он есть в открытом доступе), действительно превосходный - он умеет исправлять ошибки на лету.
Мне хотелось понять его, поэтому я взяла и прочитала его. Я знала, что автором программы был прекрасный программист Филипп Чарльз. Для того чтобы понять новый язык или новую реализацию какой-либо весьма сложной задачи, я беру программу, написанную программистом, в чьей компетенции не сомневаюсь, и читаю ее.
Сейбел: Как вы изучаете фрагмент кода подобной программы? По шагам? Или просто читаете от начала и до конца, строя в уме структуру? Достаточно непростая задача.
Аллен: Задача и правда достаточно непроста, но, как правило, я интуитивно понимаю или предварительно узнаю общую структуру решения, поэтому могу просто начать читать с середины - с ядра. И это прекрасный способ изучить не только применяемые алгоритмы, но и то, как изящно можно использовать язык.
Сейбел: Есть ли у вас любимые истории, связанные с устранением неполадок в программах?
Аллен: Было несколько интересных случаев. Один из них произошел во время моей работы над системой MAD. Оператор машины позвонил мне посреди ночи - программу, которая должна была быть запущена на всю ночь, никак не удавалось запустить. У нас был особый способ автоматического подсчета контрольной суммы для проверки корректности данных, ведь сами машины толком не отслеживали и не исправляли ошибки. Говоря по телефону, я не могла сообразить, в чем ошибка. Но чуть позже вдруг поняла: в написанной мною части системы, отвечавшей за подсчет контрольной суммы, не учитывалась одна конкретная ситуация. Даже если программа исполнялась корректно, она не могла преодолеть этот барьер - из-за того способа, которым я осуществляла подсчет контрольной суммы. Я перезвонила оператору, и мы устранили эту неполадку.