Počítačové programy musia počítať s tým, že im niekto dá zlé alebo neúplné údaje. Keď omylom zadáte miesto telefónu e-mail, počítač to musí spoznať a upozorniť vás na to. Nesmie havarovať len preto, že sa na "Táto e-mailová adresa je chránená pred spamovacími robotmi. Na jej zobrazenie potrebujete mať nainštalovaný JavaScript." nemôže dovolať. Každý programátor sa veľmi skoro naučí, že musí tzv. ošetriť vstupy od užívateľa a pripraviť svoj program na nečakané udalosti i nezmyselné situácie.
A to je obyčajné políčko vo formulári. Čo však potom keď sa znášate v pristávacom module k mesačnému povrchu a váš riadiaci počítač, na ktorom závisí váš život, zrazu zahlási sériu neočakávaných chýb a zahltenie systému?
Je až neuveriteľné, že taká samozrejmosť ako "predpokladajme, že ľudia robia chyby" bola svojho času úplnou novinkou. Vynálezom, ktorý sa presadil až za dramatických okolností. A vďačíme za neho okrem iného mladej programátorke, Margaret Hamiltonovej, ktorá so svojím tímom dôvtipne zachránila misiu Apollo 11 a umožnila tak bezpečné pristátie prvých ľudí na Mesiaci. Nehovoriac o tom, že zmenila spôsob, akým programátori premýšľajú.
Programovať sme sa učili za pochodu
Na programovanie sa Margaret Hamiltonová dostala ako množstvo prvých programátorov okľukou cez matematiku, ktorú začala študovať na University of Michigan a dokončila na Earlham College. Pridala k tomu doplnkové zameranie v odbore filozofia a krátko tiež živila seba a svojho študujúceho manžela ako stredoškolská učiteľka.
Na prestížnom Massachusetts Institute of Technology (MIT) sa vo dvadsiatich štyroch rokoch dostala k svojej prvej "programátorskej pozícii", hoci vtedy sa tomu ešte tak nehovorilo. "V začiatkoch neboli programátori braní úplne vážne, nebola to svojbytná disciplína," spomínala po troch desaťročiach Hamiltonová.
"Bola to skôr taká vedľajšia odnož, hlavnú úlohu hral hardware. Programovanie sa tiež považovalo skôr za umenie a kúzlenie, nie za vedu." Dnes bežný termín softvérové inžinierstvo, ktorý Hamiltonová razila, aby svojmu odboru získala rešpekt, vtedy vzbudzoval skôr úsmev.
Ona sa ale do softvéru zamilovala a počas práce na projekte SAGE, detekujúcom nepriateľské strely, preukázala, že si poradí s neobvyklými výzvami. Aj preto si ju všimla NASA a Hamiltonová začala pracovať na softvéri pre projekt Apollo s vizionárskym cieľom poslať človeka na Mesiac a vrátiť ho späť na Zem.
Ženy vyvíjajúce softvér vraj neboli v NASA tak neobvyklé ako dnes. V čerstvom odbore sa na to toľko nehľadelo. "Na projekte sme pracovali vedľa seba, muži aj ženy. Mužov bola väčšina. Ale riešili sme zákerné problémy v šibeničných termínoch a sústredili sme sa skôr na prácu ako na to, či je niekto muž, alebo žena," hovorí Hamiltonová.
Počítačové riadenie bolo pre misiu Apollo úplne zásadné. Bol to práve autopilot, ktorý počítal zážihy raketových motorov, aby umožnil stretnutie veliteľského a pristávacieho modulu. Zároveň ale ešte prevládal názor, že počítač by nemal mať "na svedomí" ľudské životy, a všetky kľúčové výpočty sa preto overovali ručne. A ešte stále prevládala predstava, že astronaut - povolaním pilot - urobí v osudný moment lepšie rozhodnutie ako elektronický mozog.
"Väčšine z nás programátorov bolo dvadsať až tridsať rokov. Brali sme svoju prácu vážne, naprostá oddanosť práci sa automaticky predpokladala. A všetci sme sa navzájom rešpektovali," hovorí Hamiltonová. "Softvér bol pre našich nadriadených veľká neznáma, bola to čierna skrinka. Management nám teda zvyčajne dával úplnú slobodu. Museli sme nájsť spôsob, ako to urobiť."
Neomylní astronauti? Leda vo sne
Riadiaci počítač Apollo mal na starosti celý rad funkcií, z toho niektoré z nich vyžadovali vývoj úplne nových algoritmov a postupov. Nebol tu žiadny repozitár, z ktorého by si programátori mohli skopírovať moduly a knižnice. "Učili sme sa za pochodu. Problémy, na ktoré sme narazili, sme museli vyriešiť, pretože nikto iný ich vyriešiť nemohol," spomína Hamiltonová. "A veci museli zvyčajne fungovať hneď na prvýkrát."
Hamiltonová bola obzvlášť fascinovaná situáciami, ktoré sa vymykali nepredvídateľnému scenáru. Hovorila im "neočakávane neočakávané" situácie, na ktoré podľa nej musel byť počítač napriek tomu pripravený.
Pre príklad nemusela chodiť ďaleko. Jej štvorročná dcéra, ktorá s ňou trávila víkendy v laboratóriách NASA, raz počas testu programu pre Apollo 8 nedopatrením spustila program, ktorý nemal byť v tú chvíľu spustený. Výsledkom bol pád systému. Hamiltonová si uvedomovala, že na podobnú chybu by mal byť počítač pripravený.
Margaret Hamiltonová a zdrojový kód operačného softwaru misie Apollo.
Ale u nadriadených s touto požiadavkou narazila. Vedenie NASA si skrátka nedokázalo predstaviť, že vytrénovaní astronauti by urobili niečo tak nezmyselné. Astronaut predsa nie je štvorročné decko. A tak Apollo 8 odštartovalo bez tejto subrutiny, ktorá by počítala s neočakávaným príkazom.
Lenže nešťastnou, alebo možno vlastne aj šťastnou náhodou sa práve toto stalo. V decembri 1968 astronaut Jim Lovell omylom spustil program P01 v inú chvíľu, ako mal byť spustený. Tým vymazal všetky navigačné dáta z pamäti počítača a spôsobil tak na jeden z najhorších problémov, ktorý NASA musela počas misie riešiť. Počítač zrazu nemal dáta pre navedenie na pristátie na Zem.
Inžinieri na Zemi, vrátane Hamiltonovej, strávili deväť nervy drásajúcich hodín štúdiom zdrojových kódov, aby astronautom poslali náhradné dáta. Všetko nakoniec dobre dopadlo a astronauti sa vrátili živí a zdraví. Po tomto incidente dostala Hamiltonová povolenie venovať sa svojej "obľúbenej" činnosti - príprave na chyby, ktoré sa nedajú predpovedať.
Zavarený počítač a odvrátená katastrofa
"Počítač nám hlási poplach!"
"Číslo 1202! Čo to znamená?" Pýtal sa Neil Armstrong, veliteľ lunárneho modulu. Pár minút pred očakávaným pristátím Apolla 11 na mesačnom povrchu sa objavil nečakaný zádrhel.
"Je to v jadre ..." doplnil po chvíľke Ed Aldrin.
"Dajte nám informácie o chybe číslo 1202," opakoval Neil Armstrong.
V tú chvíľu astronauti netušili, že práve unikli veľmi prekérnej, možno životu nebezpečnej situácii. Chyba 1202 znamenala, že je počítač preťažený. Kvôli chybe na jednom z desiatok zoznamov úloh (checklist), ktoré astronauti museli za letu starostlivo prechádzať, dostal počítač chybnú inštrukciu, aby sa pokúšal nadviazať "stretávacie" spojenie s veliteľským modulom. Táto komunikácia nebola v daný moment pre lunárny modul nijako užitočná, ale zahlcovala už aj tak plne vyťažený procesor ďalšími nadbytočnými úlohami.
V dnešnej dobe považujeme za bežné, že počítač zvláda viac úloh zároveň, ale v tej dobe bol multitasking horúca novinka a programátori sa ešte len učili, ako s úlohami vo fronte zaobchádzať. Hamiltonová a jej tím presadili systém priorít (asynchrónne spúšťanie) tak, aby v prípade, kedy je procesor zahltený, dostali prednosť úlohy s vysokou prioritou. V tomto prípade úlohy potrebné pre pristátie. Počítač sa tak ubránil "útoku prebytočných dát" a posádku iba upozornil, že nestíha, a niektoré úlohy teda nesplní.
"Počítač robil viac než len identifikáciu chyby," napísala neskôr Hamiltonová. "Softvér v takom okamihu dokázal vykonať reštart, zachovať dôležité funkcie a ignorovať funkcie nedôležité. Keby softvér túto situáciu nerozpoznal ako chybu, pochybujem, že by sa Apollu podarilo na Mesiaci pristáť."
Hamiltonová odišla z NASA v sedemdesiatych rokoch a založila firmu Higher Order Software, kde ďalej rozvíjala myšlienky prevencie porúch a ošetrenie chýb v software. V roku 1986 odišla zo svojej firmy HOS a založila novú firmu, Hamilton Technologies, ktorú riadi 79-ročná programátorka dodnes.
V roku 2003 bola Margaret Hamiltonová ocenená za svoj prínos organizácii NASA, okrem iného menovite práve za naprogramovanie systému priorít, ktoré zachránili palubný počítač pred zahltením. "Bol som prekvapený, keď som zistil, že sme jej za to nikdy formálne nepoďakovali," uviedol vtedy Paul Curto, zástupca NASA pre technológie a inovácie. "Jej poňatie asynchrónneho softvéru, plánovanie priorít, dôkladného testovania a ošetrovanie chýb spôsobených chybným zadaním sa stali základom pre ultra-spoľahlivý softvér."