Нет ничего более постоянного, чем непредвиденное (Поль Валери)

Маргарет Хэмилтон - прародительница современного программирования

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

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

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

Люди говорили мне — «Как ты можешь оставлять свою дочь без присмотра?!», вспоминала Гамильтон. Но ее увлекала волшебная новизна ее работы. Она любила чувство товарищества — и посиделки в клубе факультета MIT, и их странные шутки, которых не понимали посторонние. Но в лаборатории она говорила — «Я одна из этих парней!».

Маргарет Гамильтон внутри макете командного модуля Apollo
Тогда, как и сейчас — «эти парни» доминировали в области технологий и инженерии. В дни начала карьеры Гамильтон, мир программного обеспечения был на грани гигантского рывка, благодаря одобренной Джоном Кеннеди в 1961 космической программе «Аполлон».

В Инструментальной лаборатории MIT, Гамильтон и ее коллеги создавали принципы компьютерного программирования при написании кода первого в мире портативного компьютера. Она сама стала экспертом системного программирования. «Когда мы впервые этим занялись, никто в этом не разбирался. Это был Дикий Запад, без известных направлений. Нас никто не учил» — вспоминала она.

Гамильтон с одним из своих бывших коллег 19 апреля 1962 года. Она разрабатывала программное обеспечение на первом компьютер AN / FSQ-7 в Lincoln Labs. Программа Гамильтон использовалась в радаре, который отслеживал самолеты потенциального противника.

До Майкрософт было еще десять лет, и 50 лет до того как Марк Андерсен заявил, что «программное обеспечение покоряет весь мир». Мир тогда вообще не задумывался о программном обеспечении. Такого слова даже не было в техническом задании программы «Аполлон». Профессор аэронавтики Дэвид Минделл написал в своей книге «Цифровой Аполлон» : «в рабочем распорядке программного обеспечения не было. На него даже бюджет не выделялся.»

Но при реализации проекта стала очевидной роль программного обеспечения для успешной реализации миссии. В 1965 Гамильтон стала ответственной за полетное программное обеспечение комьпьютеров «Аполлона». Это было восхитительное время, и все Соединенные Штаты зависели от результатов ее работы — но самой Гамильтон иногда приходилось из-за этого работать и по ночам.

Однажды, после поздней вечеринки, она поспешила обратно в лабораторию — исправить несколько строк кода. «Я представила себе, к чему могли привести эти ошибки — об этом написали бы во всех газетах, а виноватой была бы я!». В середине 1968го написанием программного обеспечения «Аполлона» занимались уже 400 человек — именно так Соединенные Штаты планировали выиграть Лунную гонку. Но, как потом выяснилось, программы могли помочь миру и во многом другом. Когда Гамильтон и ее коллеги программировали космический корабль, они и не подозревали, что стоят у истоков 400-миллиардной индустрии программного обеспечения.

Гамильтон, в нижнем ряду крайняя слева, со своими коллегами
в MIT во время поддержки миссии Apollo 8.
Для Гамильтон программирование было пробиванием дырочек в перфокартах, которые обрабатывались по ночам, пачками закладываясь в громадный компьютер Хонивелл, изображавший посадочный модуль Аполлона. «Нам нужно было симулировать все еще до полета» — вспоминала Гамильтон. Как только код был отлажен — его отправляли на завод Рэйтеон, где группа женщин-ткачей продевала медные проводки в ферритовые коллечки. Проводок, идущий через колечки, был единицей, снаружи колечка — нулем. Забудьте об оперативной памяти и дисковых накопителях — на «Аполлоне» память была соткана вручную и была практически неуязвимой.

В полетах «Аполлонов» участвовали две практически идентичные машины — одна на посадочном лунном модуле «Орел», и вторая на командном модуле, который доставлял астронавтов с Земли на Луну и обратно. Это были 30-килограммовые портативные компьютеры, аналогов которым тогда не существовало. Детище инженеров MIT, это были одни из первых компьютеров на интегральных микросхемах вместо транзисторов.Это была первая система бортовой навигации с возможностью дистанционного управления — предшественник компьютеризованной системы навигации современных пассажирских самолетов.

Система хранила более 12 000 «слов» в постоянной памяти — медных проводах, сотканных рабочими Рэйтеона — и 1 024 «слов» во временной, очищаемой памяти. «Это был первый случай применения компьютера в космическом корабле, и от него зависел успех миссии» — вспоминал Дон Айлз, работавший над лунным модулем. «Мы доказали, что это можно сделать. Мы сделали это на том по современным меркам крохотном обьеме памяти и медленной скорости вычислений». Без этого Нил Армстронг не попал бы на Луну.А без программ, написанных Гамильтон, Айлзом и другими инженерами MIT — компьютер был бы хламом.

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

С дочерью Лоран.

Однажды, когда ее дочь Лорин играла с имитатором компьютера посадочного модуля и нажимала кнопки, появилось сообщение об ошибке. Она «завесила» компьютер, выполнив предварительную программу подготовки к старту P01 во время самого полета. Не было причин, по которым это могли бы сделать взрослые, подготовленные астронавты, но Гамильтон захотела добавить пару строк кода, чтобы избежать этого. Эта идея не получила поддержки в NASA, так как «Нам сказали много раз, что астронавты не совершают ошибок. Система их подготовки совершенна. Это совершенно излишне». Тогда Гамильтон добавила в документацию отдельный пункт — «Не запускайте P01 во время полета». Все говорили «Этого никогда не случится!».

Но это произошло. На Рождество 1968 года, на пятый день полета «Аполлона-8», который в первый раз вывел людей на орбиту Луны — астронавт Джим Лоуэлл случайно запустил P01 во время полета.Запуск этой программы обнулил все навигационные данные, которые собирал Лоуэлл. Это была серьезная проблема — ведь без этих данных бортовой компьютер не мог рассчитать траекторию возвращения домой, на Землю! Гамильтон и программисты MIT должны были найти решение, и это решение должно было быть безукоризненным. После девяти часов чтения 20-сантиметровой распечатки программы, у них появился план. Хьюстон загрузит новые навигационные данные, и все будет хорошо. Благодаря Гамильтон — и ее дочери Лорин — астронавты вернулись на Землю.

Также благодаря Гамильтон и ее работе, изменилось многое не только в стратосфере, но и на Земле. Программная инженерия, концепцию которой закладывала Гамильтон, прошла путь от высадки на Луну до практически всех занятий человечества. В 1970х годах, Гамильтон ушла из NASA. Она основала и возглавила несколько компаний по производству программного обеспечения. Сегодня ее компания «Гамильтон Технолоджиз» расположена в нескольких кварталах от MIT, где начиналась ее карьера — этот центр революции программного обеспечения по-прежнему обращен лицом к звездам.

Работа Маргарет Хэмилтон и ее коллег по программированию космического корабля «Аполлон» легла в основу нынешней IT-индустрии с оборотом в $400 миллиардов.

Но работа программиста в 60-х в корне отличалась от современной. Ежедневно Хэмилтон пробивала отверстия в тысячах перфокарт, которые затем сутками обрабатывались в гигантской ЭВМ Honeywell — эта машина моделировала прилунение посадочного модуля «Аполлона». «Сначала все нужно было отработать на земле», — вспоминает Хэмилтон. Готовый код каждый день отправлялся в лабораторию компании Raytheon, где группа женщин-сотрудниц, которых между собой называли «старушками», вручную обматывали магнитные катушки медной проволокой (проволока, пропущенная через кольцо, — 1, проволока, обмотанная вокруг кольца, — 0). Никаких жестких дисков тогда и в помине не было. Вся память компьютера была вот таким образом буквально «связана» вручную. Но этот способ записи информации имел и свои преимущества — он практически не был подвержен случайному удалению.
Сотрудница компании Raytheon (крупная компания, работающая в сфере ВПК),
наматывающая медную проволоку на магнитные катушки.
Фото: Jack Poundstone/Raytheon.

Корабли «Аполлон» были оборудованы двумя практически одинаковыми бортовыми компьютерами: один был установлен на спускаемом лунном модуле «Орел» (Eagle), другой — на основном модуле, который доставлял экипаж с Земли до лунной орбиты и обратно. Это были первые в истории портативные компьютеры. Вес каждого составлял почти 32 килограмма. Созданные инженерами МТИ Хэлом Лэнингом и Диком Баттоном, это были первые компьютеры, в которых использовались не транзисторы, а интегральные схемы. Дэвид Минделл в своей книге пишет, что по сути это была первая в мире бортовая компьютерная навигационная система, с помощью которой пилот мог управлять летательным аппаратом — предшественник нынешних навигационных систем, установленных на всех самолетах.

В постоянной памяти системы — в намотанных вручную медных катушках — могло храниться до 12 тысяч «слов». Во временной, энергозависимой памяти, хранилось до 1024 машинных слов. «Впервые в истории компьютер был установлен на борту летательного аппарата, и на компьютер была возложена значительная часть работы по обеспечению полета, — говорит Дон Айлс, один из разработчиков ПО лунного модуля в МТИ. — Мы первыми доказали, что это возможно. Причем мы сделали это, имея мизерный по нынешним меркам объем памяти и медленную вычислительную скорость».

Произведенные в Raytheon магнитные катушки с медным оплетением.
Фото: Jack Poundstone/Raytheon.
Но без этого Нил Армстронг просто не ступил бы на поверхность Луны. А без кода, написанного Маргарет Хэмилтон, Доном Айлсом и сотнями других инженеров МТИ, компьютер был бы бесполезной грудой железа.

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

Так и произошло, вспоминает Хэмилтон. В последний момент компьютер проигнорировал сообщения об ошибке и успешно посадил модуль на поверхность. Хотя все могло закончиться гораздо хуже.
Хэмилтон рядом со стопкой распечатанного исходного кода
Главного командного компьютера миссии «Аполлон». Фото: NASA.

К началу 1970-х Хэмилтон оставила работу в НАСА и космической программе «Аполлон». Позже она успешно основала несколько компаний по разработке ПО. Офис ее нынешней компании — Hamilton Technologies — находится недалеко от главного корпуса родного для нее Массачусетского технологического института. Здесь начиналась ее карьера, и здесь же ее последователи по-прежнему помогают прокладывать дорогу к звездам.

Источник:
  1. Her Code Got Humans on the Moon — And Invented Software Itself
  2. How Margaret Hamilton Programmed the Apollo 11 Moon Landing