Margaret Hamiltonová ve velitelském modulu Apollo

Margaret Hamiltonová ve velitelském modulu Apollo | foto: NASA

Programátorka dostala první muže na Měsíc. Věděla, že nejsou dokonalí

  • 109
Lidé jsou omylní a počítače s tím musí počítat. Tato jednoduchá myšlenka zachránila život astronautům v dramatických minutách před prvním přistáním na Měsíci. Programátorka, jejíž kód jim zachránil život, zasvětila svůj život propagaci „počítačové vědy“ a „očekávání neočekávatelného“.

Počítačové programy musejí počítat s tím, že jim někdo dá špatné nebo neúplné údaje. Když omylem zadáte místo telefonu e-mail, počítač to musí poznat a upozornit vás na to. Nesmí havarovat jen proto, že se na „+420 honza@mail.to“ nemůže dovolat. Každý programátor se velmi brzy naučí, že musí tzv. ošetřit vstupy od uživatele a připravit svůj program na nečekané události i nesmyslné situace.

A to je pouhé políčko ve formuláři. Co teprve když se snášíte v přistávacím modulu k měsíčnímu povrchu a váš řídicí počítač, na kterém závisí váš život, najednou zahlásí sérii neočekávaných chyb a zahlcení systému?

Je až neuvěřitelné, že taková samozřejmost jako „předpokládejme, že lidé chybují“ byla svého času naprostou novinkou. Vynálezem, který se prosadil až za dramatických okolností. A vděčíme za něj mimo jiné mladé programátorce, Margaret Hamiltonové, která se svým týmem důvtipně zachránila misi Apollo 11 a umožnila tak bezpečné přistání prvních lidí na Měsíci. Nemluvě o tom, že změnila způsob, jakým programátoři přemýšlejí.

Programovat jsme se učili za pochodu

K programování se Margaret Hamiltonová dostala jako řada prvních programátorů oklikou přes matematiku, kterou začala studovat na University of Michigan a dokončila na Earlham College. Přidala k tomu doplňkové zaměření v oboru filozofie a krátce také živila sebe a svého studujícího manžela jako středoškolská učitelka.

Na prestižním Massachusetts Institute of Technology (MIT) se ve čtyřiadvaceti letech dostala ke svojí první „programátorské pozici“, ačkoli tehdy se tomu ještě tak neříkalo. „V počátcích nebyli programátoři bráni úplně vážně, nebyla to svébytná disciplína,“ vzpomínala po třech desetiletích Hamiltonová. „Byla to spíš taková vedlejší odnož, hlavní roli hrál hardware. Programování se také považovalo spíše za umění a kouzlení, nikoli za vědu.“ Dnes běžný termín softwarové inženýrství, který Hamiltonová razila, aby svému oboru získala respekt, tehdy vzbuzoval spíše úsměv.

Ale ona se ale do softwaru zamilovala a při práci na projektu SAGE, detekujícím nepřátelské střely, prokázala, že si poradí s neobvyklými výzvami. I proto si jí všimla NASA a Hamiltonová začala pracovat na softwaru pro projekt Apollo s vizionářským cílem poslat člověka na Měsíc a vrátit jej zpět na Zem.

Cesta do 60. let

Zdrojové kódy na GitHub

Software, který spadal pod tým Margaret Hamiltonové, si můžete prohlédnout na repozitáři GitHub, včetně původních komentářů a narážek.

Ženy vyvíjející software prý nebyly v NASA tak neobvyklé jako dnes. V čerstvém oboru se na to tolik nehledělo. „Na projektu jsme pracovali vedle sebe, muži i ženy. Mužů byla většina. Ale řešili jsme záludné problémy v šibeničních termínech a soustředili jsme se spíš na práci než na to, jestli je někdo muž, nebo žena,“ říká Hamiltonová.

Počítačové řízení bylo pro misi Apollo zcela zásadní. Byl to právě autopilot, který počítal zážehy raketových motorů, aby umožnil setkání velitelského a přistávacího modulu. Zároveň ale ještě převládal názor, že počítač by neměl mít „na svědomí“ lidské životy, a všechny klíčové výpočty se proto ověřovaly ručně. A stále ještě převládala představa, že astronaut - povoláním pilot - udělá v osudný moment lepší rozhodnutí než elektronický mozek.

„Většině z nás programátorů bylo dvacet až třicet let. Brali jsme svou práci vážně, naprostá oddanost práci se automaticky předpokládala. A všichni jsme se navzájem respektovali,“ říká Hamiltonová. „Software byl pro naše nadřízené velká neznámá, byla to černá skříňka. Management nám tedy obvykle dával naprostou svobodu. Museli jsme najít způsob, jak to udělat.“

Neomylní astronauti? Leda ve snu

Řídicí počítač Apollo měl na starosti celou řadu funkcí, z toho některé z nich vyžadovaly vývoj zcela nových algoritmů a postupů. Nebyl zde žádný repozitář, ze kterého by si programátoři mohli zkopírovat moduly a knihovny. „Učili jsme se za pochodu. Problémy, na které jsme narazili, jsme museli vyřešit, protože nikdo jiný je vyřešit nemohl,“ vzpomíná Hamiltonová. „A věci musely obvykle fungovat hned napoprvé.“

Margaret Hamiltonová a (podle některých zdrojů údajně) zdrojový kód (cca 1969)

Hamiltonová byla obzvláště fascinována situacemi, které se vymykaly předvídanému scénáři. Říkala jim „neočekávaně neočekávané“ situace, na které podle ní musel být počítač přesto připraven.

Pro příklad nemusela chodit daleko. Její čtyřletá dcera, která s ní trávila víkendy v laboratořích NASA, jednou během testu programu pro Apollo 8 nedopatřením spustila program, který neměl být v tu chvíli spuštěn. Výsledkem byl pád systému. Hamiltonová si uvědomovala, že na podobnou chybu by měl být počítač připraven.

Ale u nadřízených s tímto požadavkem narazila. Vedení NASA si zkrátka nedokázalo představit, že vytrénovaní astronauti by udělali něco tak nesmyslného. Astronaut přece není čtyřleté děcko. A tak Apollo 8 odstartovalo bez této „subrutiny“, která by počítala s neočekávaným příkazem.

Jenže nešťastnou, nebo možná vlastně i šťastnou náhodou se právě toto stalo. V prosinci 1968 astronaut Jim Lovell omylem spustil program P01 v jinou chvíli, než měl být spuštěn. Tím vymazal veškerá navigační data z paměti počítače a zadělal tak na jeden z nejhorších problémů, který NASA musela během mise řešit. Počítač najednou neměl data pro navedení k přistání na Zemi.

Inženýři na Zemi, včetně Hamiltonové, podle vzpomínek Hamiltonové strávili devět nervy drásajících hodin studiem zdrojových kódů, aby astronautům poslali náhradní data. Vše nakonec dobře dopadlo a astronauti se vrátili živí a zdraví. Po tomto incidentu měla Hamiltonová svolení věnovat se své „oblíbené“ činnosti - přípravě na chyby, které se nedají předpovědět.

Zavařený počítač a katastrofa, která se nestala

Transkript komunikace Apollo 11 před přistáním

„Počítač nám hlásí poplach!“

„Číslo 1202! Co to znamená?“ ptal se Neil Armstrong, velitel lunárního modulu. Pouhé minuty před očekávaným přistáním Apolla 11 na měsíčním povrchu se objevil nečekaný zádrhel.

„Je to v jádru...“ doplnil po chvilce Ed Aldrin.

„Dejte nám informace o chybě číslo 1202,“ opakoval Neil Armstrong.

V tu chvíli astronauti netušili, že právě unikli velmi prekérní, možná životu nebezpečné situaci. Chyba 1202 znamenala, že je počítač přetížený. Kvůli chybě na jednom z desítek seznamů úkolů (checklist), které astronauti museli za letu pečlivě procházet, dostal počítač chybnou instrukci, aby se pokoušel navázat „setkávací“ spojení s velitelským modulem. Tato komunikace nebyla v daný moment pro lunární modul nijak užitečná, ale zahlcovala už tak plně vytížený procesor dalšími nadbytečnými úkoly.

Otázka priorit

Systém pro rozdělování priorit vyvinul Hal Laning, doktor matematiky z MIT. Pracoval na něm ještě před tím, než NASA spustila projekt Apollo. Laning nebyl v týmu, který pracoval na Apollu, ale systém rozdělování priorit, použitý v navigačním počítači Apolla 11, je mu často i tak připisován.

V dnešní době považujeme za běžné, že počítač zvládá více úloh zároveň, ale v té době byl multitasking žhavá novinka a programátoři se teprve učili, jak s úkoly ve frontě zacházet. Hamiltonová a její tým prosadili systém priorit (asynchronní spouštění) tak, aby v případě, kdy je procesor zahlcen, dostaly přednost úkoly s vysokou prioritou. V tomto případě úkoly nezbytné pro přistání. Počítač se tak ubránil „útoku přebytečných dat“ a posádku pouze upozornil, že nestíhá, a některé úkoly tedy nesplní.

„Počítač dělal více než jen identifikaci chyby,“ napsala později Hamiltonová. „Software v takovém okamžiku dokázal provést restart, zachovat důležité funkce a ignorovat funkce nedůležité. Kdyby software tuto situaci nerozpoznal jako chybu, pochybuji, že by se Apollu podařilo na Měsíci přistát.“

Hamiltonová odešla z NASA v sedmdesátých letech a založila firmu Higher Order Software, kde dále rozvíjela myšlenky prevence chyb a ošetření chyb v software. V roce 1986 odešla ze své firmy HOS a založila novou firmu, Hamilton Technologies, kterou řídí 79letá programátorka dodnes.

Margaret Hamiltonová (1989, oficiální foto NASA)

V roce 2003 byla Margaret Hamiltonová oceněna za svůj přínos organizaci NASA, mimo jiné jmenovitě právě za naprogramování systému priorit, které zachránily palubní počítač před přehlcením. „Byl jsem překvapen, když jsem zjistil, že jsme jí za to nikdy formálně nepoděkovali,“ uvedl tehdy Paul Curto, zástupce NASA pro technologie a inovace. „Její pojetí asynchronního softwaru, plánování priorit, důkladného testování a ošetřování chyb způsobených chybným zadáním se staly základem pro ultra-spolehlivý software.“

Aktualizace: Doplnili jsme informace o systému přidělování priorit. Doplnili jsme odkaz na současnou firmu Hamiltonové.