У Станислава Лема в серии рассказов о пилоте Пирксе есть чудесная повесть «Ананке», вышедшая в печать в 71-м году . Кто не читал- советую почитать, а кто подзабыл- напомню. Там на Марс садится новый корабль, и, в момент посадки переклинивает мозг у Главного компьютера, который в самый неподходящий момент врубает главный двигатель. Корабль теряет ориентацию и падает. Пиркс, находящийся в тот момент в диспетчерской на космодроме кричит, чтоб капитан переходил на ручное управление и попытался садить корабль вручную. Этот совет выполнить либо не могут либо не успевают, и корабль разбивается. В процессе следствия Пиркс приходит к выводу , что причиной катастрофа есть неправильная " тренировка" компьютера на имитаторе, и конкретный виновный- его коллега, страдавший синдромом навязчивых состояний.
Собственно вот Лем. Собака- это не Белка, не Стрелка и не Пилот Пиркс.
То есть в сложной ситуации комп начинает поверку всех второ-и третьестепенных систем и у него просто не хватает мощности выполнять основную задачу. Конкретно в случае катастрофы- он начинает проверку на наличие по курсу посадка метеоритов, практически в атмосфере планеты, а так как наиболее близкой массой является сам Марс, то комп его и принимает за метеорит со всеми тяжелыми последствиями.
Отличная повесть в стиле Лема с типовыми для него философскими и нравственно-техническими вопросами..
Но.. но на самом деле все было нэ так…
1969 год, Аполлон-11 садится на Луну, в самый ответственный момент бортовой комп начинает тормозить, но в отличие от компа на фантастической ракете Лема- программа "осознает" наличие внештатной ситуации, отправляет на индикатор соответствующее сообщение и уходит в специально разработанную процедуру восстановления обработки основной задачи, т.е посадки., потом это повторяется . На экранах мелькают штатные сообщения, прерывающиеся сообщением об возникновении внештатной ситуации. У астронавтов есть некоторое время для выбора что делать- свернуть посадку, или все таки садится.
Сообщения на настоящем компе выглядят вот так, а не то что вы вот это вот все привыкли ..
Молодой инженер- программист Джон Ройер " Джек " Гарман (кстати слова тогда такого не было, т.е просто инженер ), сидящий за пультом в ЦУПе расшифровывает коды сигналов – периодическое переполнение программного стека, вызванное приходом абсолютно внештатных в этом режиме прерываний от ошибочно включенного и совершенно ненужного при посадке радара стыковки. Дальше, очевидно, что комп перезапускает задачу и нормально работает до следующего переполнения стека. Таким образом, между переполнениями система работала нормально, вопрос был только в периодичности сбоев.
Джек Гарман, он сказал- поехали, комп глючит, но это не страшно!
Оценив работоспособность программно -аппаратного комплекса, Джон дает рекомендации., ставшую исторической: "Go, go!". Дальше пошли рекомендации что и как можно изменить , но это уже были детали Апполон-11 сел, и Нейл Армстронг сделал свой маленький шаг для человека и громадный для человечества
Так а что же все таки произошло, что Аполлон 11 стал только объектом вдохновения Станислава Лема, а не объектом списка космических катастроф?
ну сама неисправность оказалась довольно прозаичной- комп и радар имели разные блоки питания, работающие на частоте 800 гц (надо же, какие частоты бывают в бортовой аппаратуре. Не знал!) Предполагалось, что они будут работать синхронно, но по факту произошла рассинхронизация. Кроме того, аппаратура синхронизировалась именно от частоты питающей сети (да , тогда это было модно, и не только в Омерике) , а рассинхронизация привела к потоку сознания от радара, который материализовался в поток запросов на прерывания с частотой почти 13 кгц, что отожрало у компа 15% производительности. Оставшихся 85% чуть-чуть- но не хватало для обработки задачи посадки, и поэтому данные запаздывали , накапливались и периодически переполнялся стек.
Но почему это не вызвало фатальных результатов? А вот это "почему" имеет конкретную Имя и Фамилию. Ее звали (да и до сих пор зовут) Маргарет Хифилд Гамильтон.
Да, да, это она! Справа- это описание ПО для Аполлона-11, созданное ее отделом (интересно, как много сегодняшних программистов осилят написать такое описание :-) ) .
а слева- это рабочее место Настоящего Программиста. Лежачее.
На том момент ей шел 31 год, она работала в должности директора и научного руководителя разработки ПО программы Аполлон. Характер- настойчивый, близок к нордическому, замужем, воспитывает дочь. Имеет опыт создания ПО для система глобального ПВО, и космических программ.Разумеется, она не сразу родилась с ̶з̶о̶л̶о̶т̶о̶й̶ ̶п̶е̶р̶ф̶о̶к̶а̶р̶т̶о̶й̶ ̶в̶ ̶р̶у̶к̶е̶, начальником . Краткая биография обычна для тех, кто хотел себя пробовать в технологиях в то время- колледж, бакалавр, начало работы. Причем начало в стиле других фантастов- АБС "он брал нас и бросал в самое пекло, если мы не сгорали- то признавал в нас равных... Как правило- мы не сгорали". Марго не сгорела ни при создании программ для перехвата воздушных целей (прообраз сегодняшнего ПРО), ни в начале работы в НАСА, когда ей поручили разобраться с метеорологическим ПО
"В этой компании принято давать новичкам программу, в которой никто не может разобраться и, тем более, запустить. Когда я была стажером, мне тоже дали такую задачку. Это была весьма заковыристая программа, и более того, автор кода находил удовольствие в написании комментариев к коду, исключительно на греческом и латинском. Так, мне дали эту задачу, и, собственно, я заставила ее работать. Она даже результат выводила на печать на греческом и латинском. Я была первой, кто смог ее запустить."
После упражнений результатами работы ̶и̶н̶д̶и̶й̶с̶к̶и̶х̶ ̶п̶р̶о̶г̶р̶а̶м̶м̶и̶с̶т̶о̶в̶ греческих и древнеримских программистов, она попадает на работу по созданию ПО для Аполло-8. Секретность там была своеобразная, и Маргарет периодически брала на работу дочь, которая игралась ̶в̶ ̶к̶о̶с̶м̶и̶ч̶е̶с̶к̶и̶е̶ ̶к̶о̶р̶а̶б̶л̶и̶к̶и̶ , запуская ПО на тренажерах. И ,естественно , однажды его подвесила самым что ни на сесть классическим методам- повторно запустив программу старта.
Первые программисты и первые тестеры. вторая половина 20 века. Унибром.
Портерт тестера, когда она в джуниорах в возрасте лет 7 совершила Самый Выдающийся Тестировочный подвиг, к сожалению, не сохранился.
Марго , разобравшись с нанесенным ущербом, предложила ввести в код запрет на подобные действия, однако руководство НАСА посчитало, что их джедаи дважды на одни грабли не наступают. Что было опровергнуто при первом же полете, когда Джеймс Ловелл решил, что неплохо было бы повторить запуск одной из рабочих программ. В результате чего были затерты данные по ориентации и много других интересных штучек. Джедаям пришлось ориентироваться по звездам, а наземной команде- извращаться, отправляя данные для восстановления статус-кво . Кстати, герою- джедаю профессия " штурман- программист" понравилось, и он применил свои навыки еще раз, при полете Апполона 13, который возвращался домой после реально аварийной ситуации.
Вот так и выглядят настоящие джедаи и штурманы- программисты..
Как бы там ни было, за Маргарет закрепилась репутация человека, умеющего делать надежное ПО, в ее отделе было две группы- одна занималась функционалом, а вторая- занималась отработкой внештатных ситуаций ( Ужас-ужас-ужас под названием "частично работоспособная система", ну кто в курсе, уже побежал за валерьянкой)
А вот так выглядят коды программного обеспечения Действительно Надежных Cистем, а не для форточек и всяких красных шапочек . В бутылке-валерьянка. Газированная...
После НАСА Маргарет стала соучредителем фирмы, ориентированной именно на создание высоконадежного ПО , а потом ( и до сегодня) возглавила компанию Hamilton Technologies, Inc в Кембридже, штат Массачусетс – разработчика языка программирования Universal Systems Language (Язык универсальных систем), который предупреждаeт, a не исправляeт сбойные ситуации. Oн основывается на теории систем и опирается на опыт как собственника компании, так и ее инженеров.
А вот тут Обама награждает Бабушку современного программного обеспечения.. И Волшебную Фею проекта Аполлон ..
Бонусы: Цитаты Великих людей О технологиях, философии и жизни.
Маргарет Гамильтон:
"Другого способа научиться программировать, кроме самообразования, тогда не существовало. Когда я только начинала работать в этой сфере, все это было для нас как Дикий Запад — мы были первооткрывателями неизведанных земель. Никто нас ничему не учил:"
"Я начала использовать словосочетание "software engineering" (разработка программного обеспечения), чтобы отделить наше дело от "железа" и других инженерных направлений,“Поначалу, оно казалось забавной фразой, и мы долгое время использовали его как шутку. Когда-то, меня любили подкалывать, по поводу моей уверенности в важности того, чем мы занимаемся ".
Станислав Лем:
"Возраст между тридцатью и сорока — ближе к сорока — это полоса тени.Полоса тени — это еще не преддверие смерти, но в некоторых отношениях период даже более трудный, ибо здесь уже видишь, что у тебя не осталось неиспробованых шансов. Иными словами, настоящее уже не является преддверием, предисловием, залом ожидания, трамплином великих надежд -ситуация незаметно изменилась. То, что ты считал подготовкой, обернулось окончательной реальностью; предисловие к жизни оказалось подлинным смыслом бытия; надежды — несбыточными фантазиями; все необязательное, предварительное, временное, какое ни на есть — единственным содержанием жизни. Что не исполнилось, то наверняка уже не исполнится; нужно с этим примириться молча, без страха и, если удастся, без отчаяния."
Пилот Пиркс:
"Уже засыпая, Пиркс усмехнулся в темноте, поняв, чем оправдано присутствие этого библиофильского старья под колпаком марсианского Проекта. Конечно, никому тут дела нет до этих книг, до всех этих отвергнутых евангелий и пророчеств. Но казалось справедливым, более того, необходимым, чтобы запечатленные мысли людей, отдавших лучшие силы души
загадке красной планеты, оказались тут, на Марсе, уже после полного примирения самых заядлых противников. Они это заслужили."