Как одна детская ошибка спасла космическую программу: история Маргарет Гамильтон

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

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

Как женщина-математик из Индианы попала в NASA

В конце 1950-х годов компьютеры были огромными, медленными и невероятно дорогими. Программирование еще не считалось самостоятельной дисциплиной — это было что-то среднее между математикой и черчением. Университетских курсов по софту не существовало в принципе. Маргарет Гамильтон, окончившая колледж Эрлхам со степенью по математике и философии, планировала преподавать или писать диссертацию.

Но судьба распорядилась иначе. Ее муж поступил в Гарвардскую школу права, и семья переехала в Кембридж, Массачусетс. Чтобы зарабатывать на жизнь, Маргарет устроилась в Массачусетский технологический институт (MIT) создавать программное обеспечение для прогнозирования погоды. Затем были проекты для Пентагона — например, система SAGE, предназначенная для обнаружения вражеских самолетов. 

И наконец, в начале 1960-х Гамильтон узнала, что MIT получил от NASA контракт на разработку системы навигации для лунной программы. По словам самой Маргарет, это выглядело как что-то нереальное, и она очень хотела быть частью этого.

Ее взяли, но начинала она с самого низа. Первым заданием было написать программу на случай аварийной отмены полета — так называемый код забвения. Аварии считались настолько маловероятными, что их поручали самым младшим программистам. Однако Гамильтон отнеслась к заданию серьезно, и, конечно, на следующем беспилотном запуске именно этот код пригодился. Программа Гамильтон сработала — именно так начался ее путь наверх.

Появление термина программная инженерия

К середине 1960-х Гамильтон уже руководила целым отделом в Лаборатории приборов MIT (сейчас — Draper Labs). В ее подчинении были сотни программистов, писавших код для бортового компьютера «Аполлона». Но была одна проблема: руководство NASA и даже коллеги-инженеры относились к софту как к чему-то второсортному. Аппаратное обеспечение — это серьезно, это инженерия. А программное обеспечение — это искусство и магия, говорили тогда.

Гамильтон это не нравилось. Она боролась за то, чтобы придать программному обеспечению легитимность, и начала использовать термин программная инженерия (software engineering), чтобы отличать его от аппаратного и других видов инженерии.

Маргарет Гамильтон. Источник: wikipedia.org
Маргарет Гамильтон. Источник: wikipedia.org

Сначала коллеги смеялись. Как вспоминала Гамильтон, им нравилось подшучивать над ее радикальными идеями. Но она стояла на своем. Если аппаратное обеспечение проходит строгие испытания, если у него есть стандарты и надежность, то почему у программного не может быть того же? Сегодня программная инженерия — одна из самых востребованных профессий в мире. А начиналось все с упрямства женщины, которую не воспринимали всерьез.

Сломанный симулятор и спасение миссии

У Гамильтон была трехлетняя дочь Лорен. Молодая мать часто брала девочку с собой в лабораторию по ночам и в выходные. Пока Маргарет писала код, Лорен играла в астронавта — нажимала кнопки на тренажере командного модуля, который стоял в комнате.

Однажды девочка нажала не ту комбинацию, и экран симулятора погас. Гамильтон посмотрела, что произошло: Лорен запустила программу предстартовой подготовки Р01 — в тот момент, когда симулятор уже находился в полете. Система не была готова к такому сценарию, данные навигации стерлись и компьютер завис.

Гамильтон пришла к начальству и сказала, что нужно добавить защиту от такой ошибки. Астронавт может случайно сделать то же самое. Ей ответили: «Нет, не беспокойся об этом. Астронавты не ошибаются. Они обучены быть совершенными». Гамильтон настаивала. Ей снова отказали. Но она все равно добавила в документацию примечание не запускать Р01 во время полета.

В декабре 1968 года «Аполлон-8» вышел на орбиту Луны. Командир экипажа Джеймс Ловелл — опытнейший астронавт и будущий герой фильма «Аполлон-13», в какой-то момент задумался и нажал именно Р01. Тот самый сценарий, который Гамильтон предсказала год назад.

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

Запуск ракеты «Аполлон-8» 21 декабря 1968 года. Источник: commons.wikimedia.org
Запуск ракеты «Аполлон-8» 21 декабря 1968 года. Источник: commons.wikimedia.org

1202: три минуты, которые спасли космонавтов

Но главное испытание ждало впереди. 20 июля 1969 года спускаемый модуль «Орел» с Армстронгом и Олдрином начал снижение к поверхности Луны. Высота — 30 тыс. футов. Скорость — 130 м/сек. И вдруг на пульте Mission Control загорается аварийная сигнализация. На экране появляется код — 1202.

Никто не знает, что это значит. За 30 секунд до этого диспетчеры видели код 1201 — тоже неизвестный. 26-летний специалист по навигации Стив Бейлс принимает решение: игнорировать, продолжать посадку. Но страх не отпускает. Если компьютер зависнет окончательно, «Орел» разобьется о скалы.

Слева направо: Нил Армстронг, Майкл Коллинз, Базз Олдрин. Источник: tech.onliner.by
Слева направо: Нил Армстронг, Майкл Коллинз, Базз Олдрин. Источник: tech.onliner.by

А компьютер тем временем действительно был перегружен. Радар стыковки, который уже не нужен, продолжал посылать данные. Процессор не справлялся с потоком команд. Но сработал тот самый механизм, который Гамильтон и ее команда заложили в систему — асинхронное программирование, приоритизация задач. Компьютер сам понял, что посадка важнее всего остального. Он сбросил второстепенные операции и оставил ресурсы только для управления двигателем и отображения информации на дисплее.

Позже Барак Обама вручил Гамильтон Президентскую медаль Свободы и отметил, что у астронавтов было не так много времени, но, к счастью, у них была Маргарет Гамильтон.

Код на папке с веревками

К концу 1960-х годов компьютер «Аполлона» был чудом техники. Он весил 32 кг, занимал меньше 1 кубического фута и был первым компьютером, который использовал интегральные схемы. Но при этом его память была смехотворна по сегодняшним меркам — 74 килобайта. Программный код записывался… на веревках. Буквально. Медные провода вплетались в специальные магнитные сердечники, и каждый такой проводок хранил один бит информации.

Магнитные сердечники с медными проводами. Источник: habr.ru
Магнитные сердечники с медными проводами. Источник: habr.ru

Программисты и инженеры сидели и вручную прошивали эти веревки. Одна ошибка — и код не работает. Именно эта невидимая работа оказалась очень важной. Когда астронавт Джим Ловелл случайно стер навигационные данные «Аполлона-8» из-за ошибки в интерфейсе — «железо» было бессильно. Когда во время посадки «Аполлона-11» компьютер перегрузился — механизмы не могли ничего исправить. Спасал только код. Код, написанный людьми, которых аппаратные инженеры считали низшей кастой.

Признание через 50 лет: почему о ней вспомнили только сейчас

После «Аполлона» Гамильтон не осталась в NASA. Она ушла из агентства в начале 1980-х, основала несколько компаний по разработке ПО и опубликовала более 130 научных работ. Ее изобретение — язык Universal Systems Language — до сих пор используется для проектирования сложных систем без ошибок.

Но слава пришла к ней только в конце 2010-х. Случилось это во многом благодаря интернету. Фотография Гамильтон, стоящей рядом со стопкой распечатанного кода «Аполлона», высотой в ее собственный рост, стала вирусной. В 2016 году Барак Обама вручил ей Президентскую медаль Свободы — высшую гражданскую награду США. NASA наградило ее премией в $37 200 — самую большую сумму, когда-либо выплаченную физическому лицу агентством.

Награждение Маргарет Гамильтон. Источник: commons.wikimedia.org
Награждение Маргарет Гамильтон. Источник: commons.wikimedia.org

Во время награждения Барак Обама также отметил, что Маргарет символизирует поколение незамеченных женщин, которые помогли отправить человечество в космос, а ее пример говорит об американском духе открытий, живущем в каждой маленькой девочке и маленьком мальчике.

Заключение

Когда «Аполлон-11» сел на Луну, Маргарет Гамильтон не стояла в центре управления в белом халате. Она была в лаборатории, наблюдая за телеметрией. Она не получила мгновенной славы. Многие годы ее имя знали только специалисты. А мир запомнил Нила Армстронга и Базза Олдрина — что справедливо, ведь именно они рисковали жизнью.

Но у истории программной инженерии есть свой пантеон героев, и Маргарет Гамильтон занимает в нем особое место. Она не просто написала код. Она создала философию: программное обеспечение — это такая же серьезная инженерия, как постройка моста или ракеты. И если мост рухнет — погибнут люди. И если код даст сбой — погибнут люди. Иногда самые важные строки кода пишутся не для прибыли и не для рекордов. А для того, чтобы люди вернулись домой живыми.

Что будем искать? Например,ChatGPT

Мы в социальных сетях