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

Маргарет Хэфилд Гамильтон, (Margaret Heafield Hamilton ) родилась 17 августа 1936, Паоли, Индиана, США, в семье Кеннета Хэфилда и Рут Эстер Хэфилд. В 1954 году, окончила среднюю школу Хэнкок и в 1958 году, получила степень бакалавра, в области математики, со специализацией по философии, в колледже Эрлхам. После окончания учёбы, она некоторое время преподавала в средней школе математику и французский, пока её муж заканчивал обучение на степень бакалавра. Затем Маргарет переехала в Бостон, штат Массачусетс.
Она ничего не знала о программировании, пока не получила работу в Массачусетском технологическом институте, где она научилась писать программное обеспечение для компьютеров. Другого способа научиться программировать, кроме самообразования, тогда не существовало.
“Когда я только начинала работать в этой сфере, все это было для нас как Дикий Запад — мы были первооткрывателями неизведанных земель. Никто нас ничему не учил:”-писала Маргарет Гамильтон.
С 1961 по 1963 годы, Маргарет участвовала в работе проекта SAGE (Semi-Automatic Ground Environment) лаборатории Линкольна, где была одним из программистов, которые писали программное обеспечение для первого компьютера AN/FSQ-7(XD-1). Задача программного обеспечения – поиск “недружественных” воздушных судов. Маргарет Гамильтон также участвовала в разработке программного обеспечения для Кембриджской научно-исследовательской лаборатории Военно – Воздушных Сил США.

Успехи Маргарет в проекте SAGE открыли ей двери в NASA (National Aeronautics and Space Administration – Космическое Агентство США). Маргарет вспоминает:
“В этой компании принято давать новичкам программу, в которой никто не может разобраться и, тем более, запустить. Когда я была стажером, мне тоже дали такую задачку. Это была весьма заковыристая программа, и более того, автор кода находил удовольствие в написании комментариев к коду, исключительно на греческом и латинском. Так, мне дали эту задачу, и, собственно, я заставила ее работать. Она даже результат выводила на печать на греческом и латинском. Я была первой, кто смог ее запустить.”
B конце концов, Маргарет Гамильтон стала директором и научным руководителем разработки программного обеспечения для космической программы «Аполлона».

На этой фотографии, ведущий программист космической программы”Аполлон,” Маргарет Гамильтон, запечатлена с распечаткой кода, который использовали для осуществления полета на Луну в 1969 году:
“На этой фотографии я стою рядом с исходниками кода, на котором работал Apollo Guidance Computer (AGC). Уточню, что в этой стопке только код — там нет отчётов по устранению ошибок или другой лишней информации”.
Процесс написания кода был трудоёмким. Компьютер AGC использовал особый вид памяти – так называемую, core rope memory: связи проходили через металлическое ядро особым образом, чтобы код сохранялся в бинарном виде.
“Если связь проходила сквозь ядро, это кодировалось единицей, если мимо ядра — нулём”, — рассказывала Гамильтон в документальном фильме «Лунные машины».
Все коды писались, а потом печатались вручную, затем объединяясь в программы. Этот вид памяти назвали «LOL memory». Дословно его можно перевести, как «память маленьких старых леди» («Little Old Lаdies»). Ведь печатали коды, в основном, женщины.
Как вспоминала потом Маргарет Гамильтон: “Это не значит, что менеджеры прошлого больше уважали женщин, чем сегодня. Им просто казалось, что программирование — лёгкая работа. Оно выглядело как простое печатание, поэтому отдел софта никогда не был настолько важным, как отдел «железа». Так что женщины писали код, программировали и даже давали советы своим коллегам-мужчинам из «железного» отдела, как улучшить их изделия”.

“Я начала использовать словосочетание «software engineering» (разработка программного обеспечения), чтобы отделить наше дело от «железа» и других инженерных направлений, — рассказывала Маргарет Гамильтон в одном из интервью. — “Поначалу, оно казалось забавной фразой, и мы долгое время использовали его как шутку. Когда-то, меня любили подкалывать, по поводу моей уверенности в важности того, чем мы занимаемся. Сегодня же разработка софта стала не менее важным, чем всё остальное в технологиях”.
При подготовке полета «Аполлона-8», первого пилотируемого космического корабля, добравшегося до орбиты Луны, Маргарет Гамильтон удалось обнаружить серьезную уязвимость, но никто не поверил, что она представляет реальную угрозу.

Найти эту уязвимость помогла дочь Маргарет Гамильтон – Лорен, которая играла с симулятором компьютера «Аполлона-8», пока ее мать работала. В какой-то момент она включила последовательность P01, запускаемую перед стартом космического корабля, когда симулятор был уже в «полете». Запуск P01 в неподходящий момент привел к сбою; и хотя у космонавтов нет никаких причин допускать такую ошибку, Гамильтон решила добавить несколько строчек кода — сделать своего рода «защиту от дурака». В NASA воспротивились, сочтя, что прекрасно подготовленные астронавты, никогда в жизни не смогут так ошибиться. Тогда Гамильтон включила строчку «Не запускайте P01 во время полета» в документацию, но и это показалось руководству излишней мерой предосторожности.

Вскоре, после рождества, в 1968 году, когда «Аполлон-8» должен был покинуть орбиту Луны и отправиться на Землю, астронавт Джеймс Ловелл, сделал именно то, чего от него никак не ждали, — по ошибке запустил P01. В итоге, из компьютера «Аполлона» исчезли навигационные данные, и он не мог точно определить свое положение в пространстве.
Экипажу корабля пришлось быстро сориентироваться по звездному небу и ввести правильные данные в компьютер, а специалистам NASA, в том числе и Маргарет Гамильтон — провести девять часов в поисках решения, как отправить на «Аполлон» из Хьюстона, другие необходимые компьютеру сведения. «Аполлон-8» успешно приземлился, а Ловелл, спустя год с лишним, применил свои навыки ручного перепрограммирования компьютера космического корабля, во время полета «Аполлона-13», экипажем которого он командовал. Миссия «Аполлона-13» завершилась неудачей, из-за аварии по пути к Луне, но космическому кораблю удалось вернуться на Землю.

Джеймс Ловелл потом признавался, что ему очень помог в нештатной ситуации «Аполлона-13,» прошлый опыт «Аполлона-8» и называл тот инцидент, с потерей навигационных данных, «плановой тренировкой». Позднее, астронавт, все-таки признался, что стер данные по собственной оплошности.
Что же произошло 20 июля 1969 года и чем обязано человечество 31-летней программистке-самоучке?

Когда Нил Армстронг и Эдвин Олдрин, были уже почти у Луны, система внезапно дала сбой. Радар, который никаким образом не был задействован в процессе посадки модуля, вдруг начал посылать огромный объем информации компьютеру, что привело к его перегрузке.
«Аполлон 11» ждала неминуемая гибель, если бы Маргарет не предусмотрела подобный сценарий. Специалисты осуществили максимально быструю перезагрузку, и бортовой компьютер выбрал приоритетные данные по посадке корабля на Луну. Посадка состоялась.
«После расстыковки командно-служебного и лунного модулей, выключатель радара стыковки был поставлен в неправильное положение, из-за ошибки в инструкции для астронавтов, радар посылал ошибочные сигналы бортовому компьютеру. Обработка ложных сигналов занимала 15% машинного времени. Бортовой компьютер (точнее, вшитое в него ПО) оказался достаточно разумным для того, чтобы распознать, что на выполнение запрашивается больше операций, чем должно. Далее он выслал оповещение, означавшее для астронавта следующее: «Я перегружен большим количеством задач единовременно, чем предусмотрено, и я продолжу выполнять только наиболее важные, то есть те, что необходимы для прилунения…» По сути, компьютер был запрограммирован на большее, чем просто распознавание ошибочных состояний. В ПО был предусмотрен полный набор программ по восстановлению. В данном конкретном случае реакцией ПО было приостановить работу низкоприоритетных задач и перезапустить (re-establish) наиболее важные. Если бы компьютер не распознал эту проблему и не принял восстановительные меры, я не уверена, что Аполлон 11 совершил бы успешную посадку на Луну.» – Маргарет Гамильтон.

За свой вклад в успех программы «Аполлон» и в области разработки программного обеспечения, она была отмечена несколькми наградами:
1. 1986, Augusta Ada Lovelace Award, Association for Women in Computing.
2. 2003, NASA Exceptional Space Act Award for scientific and technical contributions. Награда включала в себя денежную награду в $37200, наибольшая персональная сумма награды в истории НАСА.
3. 2009, Outstanding Alumni Award, Earlham College
4. 2016, Presidential Medal of Freedom, врученная президентом Бараком Обамой – самая почетная гражданская награда в США.
5. 2017, Computer History Museum Fellow Award. Присуждается выдающимся мужчинам и женщинам, чьи идеи изменили мир.
Гамильтон опубликовала более 130 научных работ, трудов и отчетов по 60 проектам и шести крупным программам, в которых она принимала участие.
Сегодня, Маргарет Гамильтон, более 80 лет. Она возглавляет компанию Hamilton Technologies, Inc в Кембридже, штат Массачусетс – разработчика языка программирования Universal Systems Language (Язык универсальных систем), который предупреждаeт, a не исправляeт сбойные ситуации. Oн основывается на теории систем и опирается на уроки проекта, по разработке бортового программного обеспечения, кораблей «Аполлон». В течении своей замечательной жизни, эта выдающаяся женщина стала свидетелем того, как разработка программного обеспечения, превратилась из не очень серьезного занятия в престижную профессию программиста компьютерных программ.
