Новатор в области информатики рассказывает о том, как руководила разработкой программного обеспечения для посадки миссии «Аполлон-11» на Луну
Барак Обама вручает Маргарет Гамильтон Президентскую медаль Свободы в 2016-м
Пионер информатики Маргарет Гамильтон сыграла ключевую роль в посадке астронавтов на Луну, впервые произошедшей 20 июля 1969 года, 50 лет назад, а также в безопасном возврате их домой спустя несколько дней. Молодая женщина-программист из MIT, с маленьким ребёнком, управляла командой, создававшей бортовое полётное ПО для миссий «Аполлон», включая и "Аполлон-11". Эта компьютерная система была одной из сложнейших для своего времени. Её строгий подход к программированию оказался настолько успешным, что неизвестно ни об одной программной ошибке, случавшейся во время пилотируемых миссий «Аполлон». «Она символизирует поколение невоспетых женщин, помогавших отправлять человечество в космос», — сказал президент Барак Обама в 2016 году, когда он наградил Гамильтон президентской медалью Свободы, высочайшей гражданской наградой в США. В 2017 году она стала одной из немногих женщин, работавших в НАСА, увековеченных в виде фигурки LEGO. В 50-ю годовщину первого прилунения Гамильтон, которой исполнилось уже 82 года, вспоминает о своей новаторской работе с вычислительной техникой.
Почему вы занялись программированием? Когда вы начинали работу, учёных степеней по информатике не существовало…
Я вышла замуж в 1958 году, сразу после получения диплома по математике и дополнительной степени по философии в колледже Эрлхэма. Мы оба могли поступить в аспирантуру – я по абстрактной математике, а мой муж по химии – но я год проработала учителем в старших классах, у нас появилась дочка, и муж решил, что хочет получать юридическое образование в Гарварде. Я нашла работу, чтобы обеспечивать семью в находившемся неподалёку MIT. Работа была в лаборатории профессора Эдварда Лоренца, отца теории хаоса, и заключалась в разработке системы, предсказывавшей погоду. Ему нужны были выпускники с математическим образованием. Мы наняли няньку, чтобы она заботилась о дочке. Там я и узнала, что такое компьютер и как писать ПО. Информатика и программирование ещё не существовали в виде отдельных дисциплин; программисты учились прямо на работе. Любовь Лоренца к экспериментам с ПО оказалась заразительной, ну я и заразилась.
Как вы попали в проект «Аполлон» в 1964?
От написания программ я перешла к обнаружению вражеских воздушных судов в лаборатории Линкольна при MIT. Я планировала вернуться к аспирантуре, когда мой муж увидел объявление в газете. Лаборатория измерительной аппаратуры MIT искала людей для разработки ПО для «отправки человека на Луну». Лаборатория получили от НАСА контракт на создание бортового полётного ПО для проекта «Аполлон», поскольку именно она также разрабатывала и вычислительное оборудование для этого. Меня привлекла как сама идея, так и то, что этого раньше никто не делал. Я была первым программистом и первой женщиной, нанятой ими. На проекте уже работали мужчины-инженеры, но они были по части электроники, и это была не их область. А у меня уже был такой опыт. Думаю, что в лаборатории решили, что я справлюсь с чем-то новым.
Вы сначала работали над ПО для беспилотных миссий «Аполлон». Но потом вас постепенно повысили до руководителя команды, разрабатывающей ПО для пилотируемых космических кораблей, включая «Аполлон-11». Что входило в ваши обязанности?
Там было два бортовых компьютера – один на командном модуле «Колумбия», а другой на лунном «Орле». В нашу задачу входила разработка ПО, которое должно было работать на каждом модуле само по себе, а также их общего ПО. Сначала никто не думал, что ПО будет настолько важным вопросом. Однако постепенно все стали понимать, насколько сильно от него всё зависит. Наша группа выросла настолько, что в итоге в команде работало около 100 программистов. На кону были жизни астронавтов. Нашему ПО нужно было быть чрезвычайно надёжным, и оно должно было уметь обнаруживать ошибки и восстанавливаться от них в любой момент в течение миссии. И всё это должно было соответствовать железу.
Маргарет Гамильтон в 1969 году с листингом программного кода, разработанного её командой для миссий «Аполлон»
Были ли у вас проблемы при совмещении работы программистом и материнства?
Часто по вечерам или на выходных я брала свою маленькую дочку, Лорен, с собой на работу. Однажды мы были вместе, и я занималась симуляцией миссии полёта на Луну. Ей нравилось меня имитировать, и играть в астронавта. Она начала жать на клавиши, и внезапно запустила симуляцию. Потом понажимала ещё клавиш, и симуляция упала. Она выбрала программу, которая должна была выполняться перед запуском – но при этом симуляция уже «летела» на Луну. У компьютера было так мало памяти, что он стёр все данные по навигации, необходимые для полёта. Я подумала: боже мой, это ведь может случайно произойти и во время реальной миссии. Я предложила изменить программу, чтобы предотвратить возможность запуска предстартового сегмента во время полёта.
Однако начальство из MIT и НАСА решило, что астронавты слишком хорошо натренированы, чтобы так ошибиться. И в процессе полёта уже в следующей миссии – «Аполлон-8» – один из астронавтов на борту случайно сделал именно то, что сделала Лорен. Ошибка Лорен! Я подняла бучу и настояла, чтобы миссию перенастроили. После этого они уже, конечно, позволили внести правки в программу.
Большую часть славы за прилунение забрали себе астронавты. Однако они сделали это при помощи созданной вами системы, предупреждавшей о чрезвычайных ситуациях в полёте. Как сказал Обама: «У наших астронавтов не было много времени, но, к счастью, у них была Маргарет Гамильтон».
Незадолго до посадки на приоритетном дисплее компьютера появились предупреждения о чрезвычайной ситуации, и компьютер оказался перегруженным. Я видела, как всё это происходило, стоя в центре управления в MIT. После этого мы воссоздали ситуацию – переключатель радара оказался в неправильном положении, и забирал себе процессорные мощности. Быстро стало ясно, что ПО не только информировало людей о наличии проблемы в оборудовании, но и компенсировало их – перезагружало и переназначало задачи с наивысшим приоритетом. Обнаружение ошибок и механизмы восстановления пришли на помощь. Всех охватило облегчение, когда они сели – и что астронавты в порядке, и что ПО сработало идеально.
Насколько я понимаю, в ранние дни программирования женщин там было довольно много. Считалось, что это женская работа. Так ли это было по вашему опыту?
Программирование никогда не считалось женской работой, по крайней мере, ни в одном из множества проектов, над которыми работала я. Люди-вычислители, занимавшиеся вычислениями вручную, в подавляющем большинстве случаев были женщинами, а также много женщин использовало механические калькуляторы типа Marchant – но они не были программистами. Они не писали код. Когда я начала работать над проектом «Аполлон», в нём больше не было женщин, писавших код. Затем, через пару лет, появилось немного женщин – некоторые из которых работали на меня. Мужчин всегда было гораздо больше.
Раздражало ли мужчин, что вы руководили ими?
Когда я взяла на себя управление, один из высоких начальников сказал, что у него нет сомнений в моей компетентности, но что он беспокоится о том, что какие-то мужчины из моей группы могут поднять бунт. Но этого не произошло. Мы более всего остального были сосредоточены на миссиях и работали плечом к плечу над решением сложных задач, стараясь успеть в критически важные сроки. Мне также повезло иметь очень современного мужа, особенно для того времени. Некоторые мужчины понимали равноправие.
Вы изобрели, или, по крайней мере, популяризировали термин software engineering [разработка программного обеспечения, программотехника]. Зачем ему понадобилось придумывать новое название?
В ранние годы «Аполлона» к программам не относились так же серьёзно, как к другим инженерным дисциплинам. Хотя у нас была довольно сложная система из многих составляющих, мы не получали признания за работу в по-настоящему серьёзной области. От отчаяния я придумала этот термин, как бы заявляя: «Эй, мы, вообще-то, тоже инженеры». Долгое время это воспринималось как шутка. А потом однажды на встрече один из наиболее уважаемых гуру в области железа объяснил всем, что согласен со мной. Процесс создания ПО тоже необходимо рассматривать, как инженерную дисциплину, как и в случае с железом. Это был памятный момент.
Маргарет Гамильтон увековечена в виде фигурки для Lego из серии «Женщины НАСА»
После «Аполлона» части вашего кода использовались в Skylab, первой космической станции, а потом в программе космических шатлов. Вы основали собственный бизнес, и использовали опыт для разработки более доступного и надёжного ПО. Какие уроки могут вынести для себя программисты сегодня из проекта «Аполло»?
Недавно мы столкнулись с системами, из-за которых самолёт падал, а пилот не понимал, что происходит. Также, что стало ясно из проекта «Аполло» – хотя работал он по-другому – что лучше определять системы заранее, чтобы минимизировать количество ошибок, вместо того, чтобы сразу выдавать кучу кода, который потом придётся исправлять патчами, которые потом тоже нужно будет патчить. Этот урок, судя по всему, остался неусвоенным – в данном отношении сегодня ПО разрабатывают так же, как и 50 лет назад.
Существует знаменитая фотография из 1969 года, где вы стоите рядом со стопкой распечатанного кода миссий «Аполлон» ростом практически с вас. Недавно это изображение сопоставили с фотографией Кэти Боумен, учёным, которая помогла разработать алгоритм, создавший самое первое изображение чёрной дыры. Она позирует со стопкой жёстких дисков своего проекта, и этот фотомонтаж стал вирусным. Помните ли вы, как делали эту фотографию, и что вы вынесли для себя из этого сравнения?
Фотографию сделал во время миссии «Аполлон-11» фотограф из MIT специально для газет. Мы увлеклись, сгребли все листинги от «Аполлона» в моём офисе и построили эту башню. Я пыталась найти способ удерживать её в вертикальном положении. Мне не казалось, что такое сравнение – это плохо. По крайней мере, они нас не прятали. Хотя я не завидую Боумен, ей ведь пришлось сражаться со всем сарказмом, который может распространяться в интернете. В некотором смысле для женщин ситуация сегодня стала хуже.
Какой совет вы дали бы молодым женщинам, желающим построить карьеру в программировании?
Не давайте страху завладеть вами, и не бойтесь говорить «Я не знаю» или «Я не понимаю» – глупых вопросов не бывает. И не верьте на 100% так называемым экспертам!