Маргарет Гамильтон: «Пацаны, я вас на Луну отправлю»

«Когда я только начинала работать в этой сфере, все это было для нас как Дикий Запад — мы были первооткрывателями неизведанных земель. Никто нас ничему не учил» Маргарет Гамильтон.

6d2307ed76054232bc1d3d17513047ae.jpg

Это Маргарет. Она пишет код хорошо. Делайте как Маргарет.

А еще:

  • программист-самоучка;
  • написала код для навигационного компьютера программы «Аполлон»;
  • когда американцы ступили на поверхность Луны ей был 31 год;
  • Маргарет НЕ автор термина «software engineering»;
  • часто брала на работу 4х-летнюю дочку;
  • дочка помогла найти баг в программе.


Под руководством Маргарет Гамильтон писались программы для бортового компьютера КА Аполлон. В один из самых ответственных моментов миссии Аполлон 11 именно работа Маргарет и ее команды предотвратила возможный срыв высадки на Луну. За три минуты до прилунения сработало несколько аварийных сигнальных устройств. Компьютер был перегруженн входящими данными — в стыковочной радарной системе произошло непроизвольное обновление счетчика, что привело к запросу на выполнение компьютером большего числа операций, чем он был способен обработать. Благодаря устойчивой архитектуре компьютер продолжил свою работу: в разработке бортового ПО использовался подход асинхронного исполнения (asynchronous executive). Процессы с высоким приоритетом (критичные для прилунения) могли прервать низкоприоритетные процессы.

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


«Девушка молоток!
Но я бы не хотел себе такую жену, ибо смотрелся бы на ее фоне жалко, хоть и программист… LOL»

Коммент с GeekTimes


Железо


image
Лунный модуль

image
Схема навигационной системы

image
Ну, вы сами знаете, что это

image
Фазы прилунения

image
Interfaces Among PGNS, ATCA and the Rendezvous Radar

Еще немного интересного есть вот здесь:
[TALES FROM THE LUNAR MODULE GUIDANCE COMPUTER]

Бортовой управляющий компьютер КА Аполлон


image
Бортовой управляющий компьютер КА Аполлон (Apollo Guidance Computer, AGC) проводил вычисления и контролировал движение, навигацию, и управлял командным и лунным модулями в ходе полётов по программе Аполлон.

AGC был разработан для программы Аполлон в начале 1960-х годов в лаборатории приборов Массачусетского технологического института. Отличительной особенностью конструкции компьютера являлось применение микросхем, что было сделано впервые.

Также при полёте к Луне использовались два дополнительных компьютера:

  • Цифровой компьютер ракеты-носителя (Launch Vehicle Digital Computer, LVDC), расположенный в приборном отсеке ракеты-носителя Сатурн-5 и
  • Аварийная система наведения (Abort Guidance System, AGS), расположенная на борту лунного модуля на случай отказа PGNCS. AGS могла быть использована для взлёта с поверхности Луны и стыковки с командным модулем, но не для посадки.

Прошивка


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

Таким образом, программы физически создавались вручную, на фабриках, где работали в основном женщины. Среди инженеров память на магнитных сердечниках даже получила прозвище LOL-память, где LOL расшифровывалось как little old lady, «маленькая старая леди».

Маргарет рассказывает о своей работе:

image
Core rope memory

Как происходит «прошивка» в прямом смысле слова. Смотрим на 21-й минуте

c9d7eb65cc8f4ababff7eee5009c7f6b.jpg
AGC dual 3-input NOR gate

5c80164a65aa43fc86afb946b74aa57d.jpg
Память

image

image
Интерфейс бортового управляющего компьютера КА Аполлон, установленный в командном модуле. Над интерфейсом виден индикатор FDAI.

image
Шпаргалка с кодами

Source code

image

f5ac8eb18cd147188a233e8a92ad0c7a.jpg
www.ibiblio.org/apollo/listings/Comanche055/REENTRY_CONTROL.agc.html

Эмулятор

Аполлон-11


image

Описание посадки Аполлона-11
20 июля Нил Армстронг и Эдвин Олдрин перешли в лунный модуль, активировали и проверили все его системы, привели сложенные опоры посадочной ступени в рабочее положение. Майкл Коллинз в бортовой телескоп командного модуля на 12-м витке провёл наблюдение ориентиров на подлёте к основному району прилунения для уточнения данных в системе навигации и времени начала управляемого снижения лунного модуля. После этого «Аполлон-11» получил «добро» на расстыковку командно-служебного и лунного модулей. В начале 13-го витка, когда «Аполлон-11» находился над обратной стороной Луны, «Колумбия» и «Орёл» расстыковались. Армстронг с помощью двигателей системы ориентации совершил полный поворот лунного модуля вокруг вертикальной оси, Коллинз визуально осмотрел его и сообщил, что опоры посадочной ступени раскрылись нормально. Когда связь с Землёй восстановилась, Армстронг доложил в ЦУП в Хьюстоне о расстыковке. Отвечая на вопрос об ощущениях, он сказал: «У «Орла» есть крылья». Коллинз заметил, что «Орёл» отлично выглядит, только летит вверх ногами. На что Армстронг ответил: «Кто-то из нас летит вверх ногами». Коллинз отвёл «Колумбию» на расстояние около 1300 м. В конце 13-го витка, над обратной стороной Луны, на 29,8 секунды был включён двигатель посадочной ступени лунного модуля, «Орёл» перешёл на орбиту снижения с апоселением 105,9 км и периселением 15,7 км. Он летел опорами посадочной ступени вперёд и иллюминаторами вниз, чтобы астронавты могли отслеживать ориентиры на поверхности. Армстронг заметил, что один из ориентиров, кратер Маскелайн W, они пролетели примерно на 3 секунды раньше, чем предполагалось. Это означало, что они сядут дальше расчётной точки. В 102 часа 33 минуты 05 секунд полётного времени вблизи периселения орбиты снижения (примерно в 400 км к востоку от запланированного района посадки) был включён двигатель посадочной ступени лунного модуля, начался этап торможения. Примерно через 4 минуты после этого «Орёл» был повёрнут по крену на 180°, иллюминаторами вверх, Армстронг и Олдрин почти прямо перед собой увидели Землю. Такой поворот был необходим по двум причинам: чтобы посадочный радар смог захватить поверхность и чтобы на завершающем этапе посадки, когда корабль развернётся в вертикальное положение, астронавты могли видеть район, куда садятся. Почти сразу после этого сработала аварийная сигнализация бортового компьютера, о чём Армстронг доложил в ЦУП. Лунный модуль в этот момент находился на высоте 10 200 м. Из Хьюстона ответили, что всё выглядит нормально. Такая нештатная ситуация астронавтами на Земле не отрабатывалась. Как пояснил Армстронг на послеполётной пресс-конференции, во время тренировок имитировалось множество неполадок, и экипаж всегда был «заряжен» на аварийное прерывание миссии, но в реальном полёте астронавты были «заряжены» на посадку. Сигнал тревоги был вызван перегруженностью бортового компьютера, в который помимо навигационных данных поступала ненужная в тот момент информация от радара встречи с командно-служебным модулем (переключатель радара был поставлен Армстронгом в такое положение примерно за 3 минуты до первого тревожного сигнала). Всего за время посадки сигнализация срабатывала 5 раз, что сильно отвлекало внимание астронавтов. Определяющим в принятии решения ЦУПа о продолжении посадки стало слово специалиста по навигационным системам лунного модуля Стива Бэйлза (англ.)русск., который посчитал, что перегруженность компьютера не поставит посадку под угрозу (позднее он вместе с астронавтами получит Президентскую медаль Свободы).

Через восемь с половиной минут после начала торможения, на высоте чуть менее 2 км, начался этап приближения к точке посадки, бортовой компьютер перешёл к выполнению программы, в соответствии с которой управление двигателем посадочной ступени и двигателями системы ориентации осуществляется автоматически, а астронавты могут вручную лишь корректировать ориентацию. «Орёл» начал медленно поворачиваться в вертикальное положение. На высоте 1,5 км при скорости снижения 30,5 м/с Армстронг на некоторое время отключил автоматический режим, чтобы сделать пробную корректировку ориентации, всё работало нормально. Армстронгу следовало сделать этот тест чуть раньше, чтобы в те мгновения заниматься уже исключительно визуальным поиском подходящей площадки для посадки. Специалисты считают это запаздывание следствием аварийных сигналов компьютера, которые отвлекали внимание командира. Переворот лунного модуля в вертикальное положение давал командиру не только обзор района посадки, но и возможность менять точку прилунения. На внутреннее и внешнее стёкла командирского иллюминатора были нанесены шкалы. Пилот лунного модуля диктовал командиру угловые значения, которые показывал дисплей компьютера, и командир смотрел в иллюминатор так, чтобы обе шкалы совместились. Тогда он видел место, в которое автопилот ведёт корабль. Это место можно было изменить движением рукоятки контроллера. Движение контроллера на один шаг вперёд передвигало место посадки на ½° дальше по курсу, одно движение в сторону — на 2° влево или вправо, соответственно.

На высоте около 460 м Армстронг увидел, что автопилот ведёт корабль в точку на ближнем краю большого кратера, окружённого полем валунов до 2—3 метров в поперечнике (позднее было установлено, что это кратер Уэст, англ. West Crater, диаметром 165 м). На послеполётном опросе он рассказывал, что поначалу посчитал это место хорошим, поскольку с научной точки зрения посадка рядом с большим кратером была бы весьма ценной. Однако Армстронг быстро понял, что посадить «Орёл» в достаточно безопасном месте, не долетая кратера, не удастся. Он решил его перелететь. На высоте примерно 140 метров командир перевёл компьютер в полуавтоматический режим, в котором двигатель посадочной ступени управляется автоматически и поддерживает постоянную вертикальную скорость 1 м/с, а двигатели системы ориентации управляются полностью вручную. Армстронг уменьшил наклон лунного модуля назад с 18° до 5° от вертикали. Это увеличило скорость горизонтального перемещения вперёд до 64 км/ч. Когда лунный модуль пролетал над кратером, командир начал искать место, пригодное для посадки, и выбрал относительно ровную площадку между небольшими кратерами и полем валунов. На высоте около 80 метров вертикальная скорость снижения составляла около 0,5 м/с. Олдрин сообщил, что осталось 8% топлива. Ещё через несколько секунд он добавил, что видит тень «Орла» на поверхности Луны. На завершающем этапе захода на посадку лунный модуль был повёрнут примерно на 13° влево от курса, и тень была вне поля зрения Армстронга. В этот момент загорелось предупреждение, что компьютер не получает данных от посадочного радара. Это продолжалось несколько секунд. На высоте 30 метров Олдрин доложил, что топлива остаётся 5% и что загорелось предупреждение. Начался 94-секундный отсчёт, по окончании которого у Армстронга останется только 20 секунд, чтобы посадить корабль или экстренно прервать посадку и взлететь. Через 33 секунды оператор связи в ЦУПе в Хьюстоне Чарльз Дьюк предупредил, что остаётся 60 секунд. В этот момент посадочный радар вновь на несколько секунд «потерял» поверхность. Частота пульса у Армстронга на завершающем этапе посадки достигла 150 ударов в минуту. На высоте 12 метров Олдрин доложил, что поднимается лунная пыль. Но он редко смотрел в иллюминатор. Армстронг же на послеполётном опросе говорил, что впервые заметил поднимающуюся пыль на высоте чуть меньше 30 м. Сначала это выглядело как прозрачный лист летящей пыли, который немного ухудшал видимость. По мере снижения корабля видимость становилась всё хуже. По словам Армстронга, визуальному определению высоты это не очень мешало, но в густой пелене движущейся летящей пыли было очень сложно следить за статичными камнями и, соответственно, определять вертикальную и горизонтальную скорости.

Посадка «Орла», снятая на 16-мм камеру через иллюминатор пилота лунного модуля
Как вспоминал Армстронг, на высоте около 9 метров «Орёл» по неизвестной причине начал перемещаться влево и назад. С движением назад справиться удалось, но полностью погасить перемещение влево не получилось. Ещё более замедлять снижение или зависать было нельзя, поскольку топлива оставалось совсем мало, и допустимый лимит времени до прерывания посадки был почти исчерпан (в одном из своих интервью в 2001 году Армстронг вспоминал, что ему хотелось, чтобы эта первая посадка прошла как можно более гладко, но в то же время он знал, что если погасить горизонтальную скорость и выровнять корабль, то можно было падать примерно с высоты 12 метров и даже больше, в условиях слабой лунной гравитации опоры посадочной ступени должны были выдержать удар). Вскоре после того, как Олдрин доложил, что высота 6 м, вертикальная скорость 0,15 м/с, а скорость горизонтального перемещения — 1,2 м/с, Дьюк из Хьюстона предупредил, что остаётся 30 секунд. Через 9 секунд после этого предупреждения Олдрин закричал: «Сигнал контакта!» Это произошло в 20:17:39 UTC 20 июля (102 ч 45 мин 39,9 с полётного времени). Синий сигнал контакта означал, что лунной поверхности коснулся как минимум один из щупов длиной 1,73 м, которые крепились к трём из четырёх опор (кроме той, где была лестница). Через 1,5 секунды после этого Армстронг заглушил двигатель. На послеполётном опросе он рассказал, что не смог точно определить момента посадки. По его словам, Базз закричал: «Контакт!», но сам он даже не видел загоревшегося сигнала, двигатель работал до самой посадки, потому что она была настолько мягкой, что момент, когда корабль стал на грунт, было сложно определить. После прилунения Армстронг передал Земле: «Хьюстон, говорит База Спокойствия. «Орёл» сел». Чарльз Дьюк ответил, от волнения оговорившись: «Понял вас, «Свок…», «Спокойствие». Вы прилунились. Мы тут все уже было посинели. Теперь мы снова дышим. Спасибо огромное!»

Лунный модуль стал на грунт с небольшим наклоном назад на 4,5° от вертикали, он так и остался повёрнутым на 13° влево от траектории полёта[84]. Послеполётный анализ показал, что в топливных баках посадочной ступени «Орла» осталось 349 кг топлива. Этого хватило бы на 25 секунд зависания, после чего осталось бы 20 секунд на запуск двигателя взлётной ступени и прерывание посадки (у следующих «Аполлонов» после посадки оставалось от 499 до 544 кг). Как выяснилось, предупреждение о критически малых остатках топлива загорелось раньше времени, потому что топливо в баках начало плескаться после того, как Армстронг наклонил лунный модуль, чтобы перелететь кратер Уэст. Во всех последующих моделях лунного модуля в баках были установлены дополнительные перегородки. Корабль прилунился в точке с координатами 0,67408° с. ш. 23,47297° в. д., в 6858 метрах западнее центра эллипса района посадки. Причиной этого стали мелкие неучтённые изменения ориентации «Колумбии» и «Орла» на орбите вследствие тестирования двигателей системы ориентации лунного модуля, которые затем нарастали в течение двух витков до начала торможения, а также неполная разгерметизация переходного тоннеля между кораблями, из-за чего импульс, который «Орёл» получил при расстыковке, оказался немного больше расчётного.

[источник]

Аполлон-8

image
Пока 4-летняя Лорен мирно спала на полу лаборатории, мама создавала программы, которые лягут в основу главного командного компьютера «Аполлона».

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

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

Software engineering


Успехи Маргарет в проекте SAGE открыли ей двери в NASA. Маргарет вспоминает:

«В этой компании принято давать новичкам программу, в которой никто не может разобраться и тем более запустить. Когда я была стажером, мне тоже дали такую задачку. Это была весьма заковыристая программа, и более того, автор кода находил удовольствие в написании комментариев к коду исключительно на греческом и латинском. Так, мне дали эту задачу, и, собственно (в общем — посмотри, какое слово симпатичнее тебе по оттенку в прямой речи), я заставила ее работать. Она даже результат выводила на печать на греческом и латинском. Я была первой, кто смог ее запустить.»


0798720f036949b5b594b136f7b93ab7.jpg

Гамильтон популяризовала термин «software engineering», которую ввел в употребление Anthony Oettinger.[пруф]

«Я начала использовать это название, чтобы выделить нашу работу среди других видов техники. Когда оно только появилось, все сочли его очень забавным и долго шутили по этому поводу: мол, какие у меня радикальные идеи», — рассказывает она.


В этой области она была одной из тех, кто разрабатывал концепты, такие как asynchronous software, priority scheduling, end-to-end testing and Human-in-the-loop decision capability, что послужило основой в разработке современного, устойчивого к сбоям программного обеспечения.

Свободное плавание

5baf9f1a6987450ba261fb9bfd26b8ab.jpg
В 1986 году она основала и стала генеральным директором Hamilton Technologies, в Кембридже, штат Массачусетс, компании разработчика языка программирования Universal Systems Language. «Язык универсальных систем», предупреждающем, а не исправляющем сбойные ситуации, который основывается на теории систем и опирается на уроки проекта по разработке бортового программного обеспечения кораблей «Аполлон».

Список клиентов
  • Abadon
  • ABB
  • Access Research
  • Adtranz Signal
  • Advanced Methods
  • AGS Nynex
  • Apogee Communications Technologies
  • Ariel Technologies
  • AT&T
  • Auburn University
  • BDM International Inc.
  • BMC3 Engineering
  • Boeing
  • Boston University
  • Bowe Software Solutions
  • CA (Ingres)
  • Cadeon Strategic Technologies, Inc.
  • Cambridge Resource Group
  • Canadian Government
  • Chemical Bank
  • Citibank
  • Codemakers Pty Ltd.
  • Computer Sciences Corporation
  • Construction Information Systems
  • Cross/Z International Inc.
  • CSIRO Institute of Information Science & Engineering.
  • Descartes
  • Digital / Compaq Computer Corporation
  • DoD
  • DOE
  • Eidisys
  • FEMA
  • Grumman
  • Hewlett Packard
  • Honeywell
  • Hughes
  • IBM
  • Independent Engineering
  • International Billing Services
  • Lockheed Martin
  • Logicon
  • Loral
  • Los Alamos National Laboratories
  • Massachusetts Institure of Technology (MIT)
  • McDonnell Douglas
  • Mitre
  • Motorola
  • MRJ, Inc.
  • NASA
  • Newbridge Networks
  • NR Pty, Ltd.
  • NRI & NCC Co. Ltd.
  • NSA
  • Pacific States Marine Fisheries Commission
  • Praxis International
  • Rexham Aerospace and Defense Group
  • SAIC
  • Scott Paper
  • SDIO
  • SEI, Carnegie Mellon
  • Select Computer Technologies
  • Software Productivity Consortium (SPC)
  • State of Massachusetts
  • Stratus Group, Inc.
  • Sun Microsystems
  • Systems Automation Technology Ltd. (SAT)
  • Terry Consulting
  • The Registry
  • Toldark Pty. Limited
  • U. of Arizona
  • U. of Florida
  • U. of Minnesota
  • US Air Force
  • US Army
  • US Navy
  • WPL Laboratories

Почитать еще:


Wiki:
Margaret_Hamilton_(scientist)
(на русском статьи нет)

GeekTimes:
Маргарет Гамильтон, ведущий инженер-программист проекта «Аполлон»

Wired:
Her Code Got Humans on the Moon—And Invented Software Itself
Software — and a Woman — at the Heart of Lunar Triumph

Переводы:
Ошибка «Аполлона-8» Как программистка NASA в 1968 году нашла уязвимость в космическом корабле
Бабушка программирования

P.S.

«Тогда я часто представляла себе, с какими заголовками выйдут газеты, если что-то пойдет не так. Все будут винить в неудаче меня», — вспоминает Гамильтон.

Помните, что тестировщик в ответе за все

P.P. S.
Отдельное спасибо Саше за помощь с переводом.

Вместе с компанией Edison продолжаем весенний марафон публикаций.

Я постараюсь докопаться до первоисточников IT-технологий, разобраться, как мыслили и какие концепции были в головах у первопроходцев, о чем они мечтали, каким видели мир будущего. Для чего задумывались «компьютер», «сеть», «гипертекст», «усилители интеллекта», «система коллективного решения задач», какой смысл они вкладывали в эти понятия, какими инструментами хотели добиться результата.

Надеюсь, что эти материалы послужат вдохновением для тех, кто задается вопросом, как перейти «от Нуля к Единице» (создать что-то, чего раньше и в помине не было). Хочется, чтобы IT и «программирование» перестали быть просто «кодингом ради бабла», и напомнить, что они задумывались как рычаг, чтобы изменить методы ведения войны образование, способ совместной деятельности, мышления и коммуникации, как попытка решить мировые проблемы и ответить на вызовы, вставшие перед человечеством. Как-то так.

0 марта. Сеймур Пейперт
1 марта. Xerox Alto
2 марта «Позвоните Джейк». История NIC и RFC
3 марта Грэйс «бабуля COBOL» Хоппер
4 марта Маргарет Гамильтон: «Пацаны, я вас на Луну отправлю»

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

© Habrahabr.ru