В истории освоения космоса принято вспоминать астронавтов, конструкторов ракет и диспетчеров в наушниках. Но есть еще одни герои, которых долгие годы не замечали. Они сидели в душных лабораториях и писали код. Без них ракеты не взлетели бы, а астронавты не вернулись бы домой. Их работу никто не называл инженерией — до тех пор, пока одна из них не доказала обратное.
Как женщина-математик из Индианы попала в NASA
В конце 1950-х годов компьютеры были огромными, медленными и невероятно дорогими. Программирование еще не считалось самостоятельной дисциплиной — это было что-то среднее между математикой и черчением. Университетских курсов по софту не существовало в принципе. Маргарет Гамильтон, окончившая колледж Эрлхам со степенью по математике и философии, планировала преподавать или писать диссертацию.
Но судьба распорядилась иначе. Ее муж поступил в Гарвардскую школу права, и семья переехала в Кембридж, Массачусетс. Чтобы зарабатывать на жизнь, Маргарет устроилась в Массачусетский технологический институт (MIT) создавать программное обеспечение для прогнозирования погоды. Затем были проекты для Пентагона — например, система SAGE, предназначенная для обнаружения вражеских самолетов.
И наконец, в начале 1960-х Гамильтон узнала, что MIT получил от NASA контракт на разработку системы навигации для лунной программы. По словам самой Маргарет, это выглядело как что-то нереальное, и она очень хотела быть частью этого.
Ее взяли, но начинала она с самого низа. Первым заданием было написать программу на случай аварийной отмены полета — так называемый код забвения. Аварии считались настолько маловероятными, что их поручали самым младшим программистам. Однако Гамильтон отнеслась к заданию серьезно, и, конечно, на следующем беспилотном запуске именно этот код пригодился. Программа Гамильтон сработала — именно так начался ее путь наверх.
Появление термина программная инженерия
К середине 1960-х Гамильтон уже руководила целым отделом в Лаборатории приборов MIT (сейчас — Draper Labs). В ее подчинении были сотни программистов, писавших код для бортового компьютера «Аполлона». Но была одна проблема: руководство NASA и даже коллеги-инженеры относились к софту как к чему-то второсортному. Аппаратное обеспечение — это серьезно, это инженерия. А программное обеспечение — это искусство и магия, говорили тогда.
Гамильтон это не нравилось. Она боролась за то, чтобы придать программному обеспечению легитимность, и начала использовать термин программная инженерия (software engineering), чтобы отличать его от аппаратного и других видов инженерии.

Сначала коллеги смеялись. Как вспоминала Гамильтон, им нравилось подшучивать над ее радикальными идеями. Но она стояла на своем. Если аппаратное обеспечение проходит строгие испытания, если у него есть стандарты и надежность, то почему у программного не может быть того же? Сегодня программная инженерия — одна из самых востребованных профессий в мире. А начиналось все с упрямства женщины, которую не воспринимали всерьез.
Сломанный симулятор и спасение миссии
У Гамильтон была трехлетняя дочь Лорен. Молодая мать часто брала девочку с собой в лабораторию по ночам и в выходные. Пока Маргарет писала код, Лорен играла в астронавта — нажимала кнопки на тренажере командного модуля, который стоял в комнате.
Однажды девочка нажала не ту комбинацию, и экран симулятора погас. Гамильтон посмотрела, что произошло: Лорен запустила программу предстартовой подготовки Р01 — в тот момент, когда симулятор уже находился в полете. Система не была готова к такому сценарию, данные навигации стерлись и компьютер завис.
Гамильтон пришла к начальству и сказала, что нужно добавить защиту от такой ошибки. Астронавт может случайно сделать то же самое. Ей ответили: «Нет, не беспокойся об этом. Астронавты не ошибаются. Они обучены быть совершенными». Гамильтон настаивала. Ей снова отказали. Но она все равно добавила в документацию примечание не запускать Р01 во время полета.
В декабре 1968 года «Аполлон-8» вышел на орбиту Луны. Командир экипажа Джеймс Ловелл — опытнейший астронавт и будущий герой фильма «Аполлон-13», в какой-то момент задумался и нажал именно Р01. Тот самый сценарий, который Гамильтон предсказала год назад.
Навигационные данные стерлись. «Аполлон» не мог определить свое положение в пространстве. К счастью, Ловелл быстро сориентировался по звездам и вручную ввел необходимые координаты. А Гамильтон и ее коллеги потратили девять часов, чтобы восстановить остальную информацию. После этой миссии никто больше не смеялся над ее радикальными идеями. «Теперь вы можете добавить этот код», — сказали ей уже серьезно.

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

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

Программисты и инженеры сидели и вручную прошивали эти веревки. Одна ошибка — и код не работает. Именно эта невидимая работа оказалась очень важной. Когда астронавт Джим Ловелл случайно стер навигационные данные «Аполлона-8» из-за ошибки в интерфейсе — «железо» было бессильно. Когда во время посадки «Аполлона-11» компьютер перегрузился — механизмы не могли ничего исправить. Спасал только код. Код, написанный людьми, которых аппаратные инженеры считали низшей кастой.
Признание через 50 лет: почему о ней вспомнили только сейчас
После «Аполлона» Гамильтон не осталась в NASA. Она ушла из агентства в начале 1980-х, основала несколько компаний по разработке ПО и опубликовала более 130 научных работ. Ее изобретение — язык Universal Systems Language — до сих пор используется для проектирования сложных систем без ошибок.
Но слава пришла к ней только в конце 2010-х. Случилось это во многом благодаря интернету. Фотография Гамильтон, стоящей рядом со стопкой распечатанного кода «Аполлона», высотой в ее собственный рост, стала вирусной. В 2016 году Барак Обама вручил ей Президентскую медаль Свободы — высшую гражданскую награду США. NASA наградило ее премией в $37 200 — самую большую сумму, когда-либо выплаченную физическому лицу агентством.

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