Technologie v současné době rostou závratnou rychlostí. Pokud se chcete v dnešní době prosadit, tak jednou z cest, kterou se můžete vydat, je programování. To samé si myslí například i Tim Cook, současný výkonný ředitel společnosti Apple. Ten nabádá k programování už malé děti prostřednictvím určitých programů, které jablečná společnost nabízí. Jedna věc je být programátorem a druhá věc je být dobrým programátorem. Je opravdu nutné sledovat poslední programovací trendy a neustále se zdokonalovat – jakmile vám ujede vlak, anebo jakmilel nebudete dostatečně dobří, tak o tuto příležitost stát se dobrým programátorem jednoduše přijdete.
Tohle platí snad ve všech společnostech a ganturách, které programování potřebují ke svému „životu“. Jednou z těchto agentur, která by se bez programování neobešla, je například NASA, tedy Národní úřad pro letectví a vesmír. V NASA dostávají programátoři velmi důležité úkoly, dá se říct, že ty nejsložitější na celém světě. Programátoři zde pro různé mise vyvíjejí naprosto kritické aplikace, na kterých často závisí hned několik lidských životů – na chyby a selhání tedy v tomto případě není prostor. NASA pro programátory vytvořila speciální pokyny s pravidly, které musí každý programátor dodržovat. Často je velmi důležité přesně určit, čím se programátor stává dobrým programátorem – NASA v tom má ale jasno. Speciální pokyny vznikly v rámci Jet Propulsion Laboratory, kde dochází k vývoji pohonných jednotek a sond pro NASA. Pokyny se nazývají The Power of Ten-Rules for Developing Safety Critical Code, volně přeloženo jakožto Síla deseti pravidel pro vývoj bezpečného kritického kódu. Tyto pokyny se zaměřují především na programování v jazycích C, mohou však být využity i pro jiné programovací jazyky.
Všech 10 pravidel, kterých se musí programátoři držet, najdete níže:
- Veškerý kód by měl být velice jednoduchý – nepoužívejte goto, setjmp, longjmp a přímou či nepřímou rekurzi.
- Všechny cykly musí mít pevnou horní hranici. Je nutné, aby nedošlo k překročení nastavené horní hranice pro opakování smyčky. Pokud nelze tohle při testování dokázat, tak dochází k porušení tohoto pravidla.
- Nepoužívejte dynamické přidělování paměti po inicializaci.
- Žádná funkce by neměla být delší než text, který se vleze na jeden list papíru ve standardním formátu. Obvykle to znamená maximálně okolo 60 řádků kódu na jednu funkci.
- Počet asercí v kódu jedné funkce by neměl být menší, než dvě. Aserce slouží ke kontrole anomálií, které by nikdy neměly v reálném životě nastat. Aserce nikdy nesmí mít žádný boční efekt a měly by být definované jako boolean. Když aserce selže, musí se provést zotavovací akce. Žádná aserce nesmí porušit tohle pravidlo.
- Datové objekty musí být deklarované v co nejmenší možné míře.
- Vrácené hodnota non-void funkcí musí být zkontrolována každou volající funkcí. Platnost parametrů musí být zkontrolování uvnitř každé funkce.
- Použití preprocesoru musí být omezeno na zahrnutí souborů záhlaví a jednoduchých definic maker.Vkládání tokenů, proměnných argumentů (elipsy) a rekurzivní volání maker nejsou povoleny. Všechna makra musí expandovat do úplných syntaktických jednotek…
- Používání ukazatelů by mělo být omezené. Konkrétně není povolena více než jedna úroveň dereferencí. Operace dereference ukazatele nemusí být skryté v definicích makra ani uvnitř deklarací typedef. Ukazatele funkcí nejsou povoleny.
- Celý kód musí být kompilován od prvního dne vývoje, se všemi varováními kompilátoru povolenými v nejpedantičtějším nastavení kompilátoru. Celý kód musí být zkompilován bez jakéhokoliv varování. Celý kód musí být denně kontrolován alespoň jedním, nejmodernějším analyzátorem statického kódu. Neměly by se zobrazit žádná varování.
NASA tato pravidla přirovnává k bezpečnostním pásům ve vozidle. Jsou možná lehce nekomfortní, ale pokud je nepoužijete, může se vám to škaredě vymstít.
Hlavně proboha neprogramujte jako programátoři NASA, protože vás vyrazí a já to pak budu muset celý přepisovat :D