НАРВАЛ
Космос · люди и программы

МаргаретГамильтони правоастронавтана ошибку

Она руководила разработкой бортовых программ Apollo и требовала готовить их к ошибкам: человек нажмёт не ту кнопку, прибор отнимет у компьютера время, расчёт придётся начать заново. В 1968 году её опасения проверил полёт к Луне. В 1969-м — посадка на неё.

Маргарет Гамильтон в полосатом платье рядом со стопкой распечаток программ Apollo; в декоративном поле нарвал с бивнем
Маргарет Гамильтон рядом с распечатками программ Apollo. Тушь НАРВАЛА по архивному снимку 1969 года.
Соня ЕвгеньевнаСоня ЕвгеньевнаАдмин, дизайнер, автор-многостаночникоб авторе

Маргарет Гамильтон стоит в лаборатории MIT рядом со стопкой бумаг почти в человеческий рост. На ней платье в полоску; одной рукой она придерживает верхнюю папку. Кажется, фотограф попросил её показать, сколько всего пришлось написать ради полёта на Луну, и она решила не спорить.

Это распечатки программ для бортовых компьютеров Apollo. Снимок сделали в 1969 году. Позднее он разошёлся по миру, и стопка превратилась в удобную легенду: вот женщина, которая написала лунную программу. Над программами работали сотни людей. Гамильтон руководила их работой, сама писала код и следила за тем, чтобы части, созданные разными группами, не мешали друг другу. Особенно её занимало то, что произойдёт при ошибке.

30 сентября 2026 года Гамильтон умерла. Ей было 90 лет. О её смерти сообщил Массачусетский технологический институт. Здесь она когда-то убеждала коллег: в полёте человек может ошибиться, и это нужно предусмотреть в коде. Бумажная башня на снимке не рассказывает, сколько сил ушло на этот спор.

Дочь нажимает кнопку

В лаборатории MIT стоял тренажёр командного модуля Apollo. Гамильтон иногда приходила на работу с маленькой дочерью Лорен. Однажды четырёхлетняя Лорен во время имитации полёта запустила P01 — программу, предназначенную для подготовки корабля к старту. Она изменила данные, на которые опиралась навигация, и симуляция сорвалась.

Маленькая девочка тянется к клавише большого тренажёра Apollo, рядом лежат перфокарты
Лорен запустила предполётную программу на тренажёре во время имитации полёта. Художественная реконструкция по рассказу Гамильтон.

Гамильтон предложила запретить компьютеру принимать эту команду после старта. По её воспоминаниям, ей ответили, что подготовленные астронавты такой ошибки не допустят. Тогда она добилась хотя бы предупреждения в документации: не выбирать P01 во время полёта.

Историю с Лорен мы знаем из позднего рассказа Гамильтон. А вот следующий случай записан в документах полёта. В декабре 1968 года Apollo 8 облетел Луну. На пятый день Джим Ловелл, отвечавший в командном модуле за навигацию, случайно включил программу подготовки к старту — прямо в полёте. P01 изменила рабочие данные компьютера. По отчёту NASA, экипажу и специалистам на Земле пришлось восстановить эти данные и проверить навигацию. После возвращения Ловелл сам назвал ввод ошибочным.

Полёт продолжился, экипаж вернулся домой. Довод «астронавты никогда не нажмут не туда» после этого выглядел неубедительно. Гамильтон вспоминала, что защиту от выбора P01 в полёте затем внесли в программу. О споре в лаборатории мы знаем по её воспоминаниям; ошибку Ловелла подтверждают документы NASA.

Люди внутри стопки

Гамильтон пришла в MIT в 1959 году. Сначала писала программы для исследований погоды Эдварда Лоренца, затем работала над системой противовоздушной обороны SAGE. В 1965 году её взяли писать программы для бортовых компьютеров Apollo. К концу десятилетия она руководила командами, которые готовили их для командного и лунного модулей.

Написать каждую часть было мало. Одни программы рассчитывали движение корабля, другие принимали показания приборов, третьи выводили числа на дисплей для экипажа. В каждом модуле они делили между собой время одного бортового компьютера и могли мешать друг другу. Гамильтон вспоминала примерно сотню человек в своей группе и сотни специалистов, чьи программы поступали к ним для сборки очередной версии. Поэтому цифра «более 400 человек», которую приводит MIT для работ над ПО Apollo, не означает четыреста прямых подчинённых Гамильтон.

Для каждого полёта специалисты собирали свой набор программ. За версиями следили координаторы сборки. Их прозвали rope mothers — по постоянной памяти, которую изготавливали для корабля. Гамильтон говорила, что не придумала это название. Координаторы проверяли, какие программы вошли в сборку и не ломают ли они работу друг друга. Затем утверждённый код отправляли в Raytheon, где изготавливали память. Бумажная башня на фотографии в корабль не влезала.

Гамильтон приводила маленький пример из такой работы. Программист указывал машине перейти к инструкции «на восемь позиций дальше». Потом кто-то вставлял в пачку ещё одну перфокарту, и восьмая позиция оказывалась уже не там. Команда стала обозначать нужное место именем. Одна вставленная карта больше не должна была ломать переход. Пока перфокарты лежали на столе, такие ошибки ещё можно было поймать.

1202

20 июля 1969 года лунный модуль «Игл» спускался к поверхности Луны. Теперь опасную команду не вводил никто. Компьютер начал терять время из-за соединения с радаром сближения. Армстронг и Олдрин следили за приборами и искали место для посадки. В Хьюстоне смотрели телеметрию. В Кембридже, где работали создатели бортовых программ, слушали переговоры.

Лунный модуль «Игл» спускается к ровному участку Луны за каменистым полем
При спуске Apollo 11 Армстронг увёл модуль от каменистого участка. Художественная реконструкция НАРВАЛА.

Примерно за семь минут до касания грунта Армстронг сообщил о предупреждении. На дисплее стояло число 1202. Олдрин повторил его. Через двадцать с небольшим секунд из Хьюстона передали: можно продолжать. Позже появился сигнал 1201, за ним — ещё несколько 1202. Компьютер не успевал закончить все задания, которые ему поручили.

Причину разобрали после посадки. Два электрических сигнала в соединении радара сближения с компьютером шли в одном ритме, но со сдвигом друг относительно друга. Счётчики положения антенны из-за этого менялись почти непрерывно, будто антенна двигалась. На обработку этих изменений компьютер тратил время, которое было нужно для посадки. Сам радар мог при этом не работать: лишние сигналы возникали в соединении приборов. А компьютеру ещё требовалось рассчитывать движение модуля, принимать данные посадочного радара, управлять двигателем и обновлять показания для экипажа. Задания стали скапливаться. Когда для очередного не осталось свободного места, компьютер показывал 1201 или 1202 и начинал часть работы заново.

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

Решение продолжать спуск приняли в центре управления полётом. Джек Гарман узнал коды тревог; Стив Бейлз оценил, можно ли лететь дальше; Чарли Дьюк передал экипажу разрешение. Гамильтон в это время следила за полётом из Кембриджа. Она руководила командами, которые готовили бортовое ПО и его защиту от ошибок, а сама написала часть программы, показывавшей приоритетные сообщения экипажу. Исполнительную систему, распределявшую задания по важности, спроектировал Хэл Лейнинг. Над расчётами и программой посадки работали Аллан Клумпп и Дон Айлз. На известном снимке стоит одна Гамильтон, но за полётом стоят и эти люди.

Назвать работу инженерной

Сегодня словосочетание «программная инженерия» звучит обыденно. Гамильтон вспоминала, что в MIT над ним поначалу посмеивались. Аппаратуру проектировали инженеры; программу многие считали вспомогательной работой. Гамильтон возражала: код тоже нужно проектировать и проверять. Если программы мешают друг другу, если астронавт может дать опасную команду, если прибор занимает больше вычислительного времени, чем рассчитывали инженеры, меняется работа всего корабля.

Кто первым произнёс software engineering, установить трудно. Гамильтон пользовалась этим названием и добивалась для программистов того же места в проекте, что занимали инженеры аппаратуры. После Apollo она открыла две компании и продолжила разрабатывать способы находить ошибки до запуска программы.

На фотографии Гамильтон придерживает верхнюю папку. Бумажная башня рядом почти сравнялась с ней ростом. В корабле этой башни не было. Там работали программы, которые пришлось проверять на ошибки людей и приборов. На Apollo 8 ошибку исправляли экипаж и специалисты на Земле. При посадке Apollo 11, уже на другом корабле, программа отбросила часть работы и сохранила расчёты, нужные для спуска.

Источники

↑ Наверх