Desatero přikázání pro programátory v C
(komentovaná verze)

Autor: Henry Spencer
Překlad: Přemek Brada
Originál desatera a copyright překladu. Budu vděčný za vaše připomínky a opravy.

STOP Software Patents!


  1. Budeš hojně lint (*1) používati a jeho výrokům bedlivě naslouchati, neboť vpravdě jeho pozornost a úsudek často převyšují tvůj.
    Toto je i dnes platná moudrá rada, ačkoli mnohé moderní překladače umí odhalit množství hříchů stejně dobře a lint začíná mít problémy způsobené stářím a zesláblostí, a v četných nových neznámých krajinách se nevyskytuje. K podobným účelům sloužít také jiné nástroje, například Saber C.

    "Hojnému používání" rozuměj tak, že jeho radami jest záhodno nechati se vést každodenně, spíše než doufat požehnání tvého kódu v záchvatu pozdní kajícnosti. Odlintování programu nikdy dříve nelintovaného podobá se často čištění stájí, jakého bys nepřál ani svým nejzavilejším nepřátelům. Zkušenost některých také praví, že pečlivé naslouchání lintovým slovům je často velikou pomocí při ladění programu.

    "Bedlivé naslouchání" pak neznamená bezhlavou snahu odstranit každičký byte lintových výstupů -- už jen pro to, že jest pro tebe nemožné jej umlčet v některých věcech -- nýbrž porozumění důvodům jeho nespokojenosti a rozpoznávání znepokojujících znamení, o nichž se snaží tě zpravit.

  2. Nebudeš se s NULL ukazatelem přáteliti, neboť toto přátelství vede k hrozným koncům, chaosu a zatemnění mysli.

    Toto jest zjevná známka chybného opisu písem, neboť zde mělo stát "neinicializovaným ukazatelem" jako obrana proti zmatení konceptu prázdných (neinicializovaných) ukazatelů a makra NULL, o němž se píše dále. Jinak ovšem je význam přikázání zřejmý -- neinicializovaný ukazatel ukazuje do krajin obývaných draky, démony a core dumpy, jejichž největším potěšením je začít skotačit ve tvých programech, vyrušíš-li je ze spánku. Neinicializovaný (prázdný) ukazatel neukazuje na nulu jakéhokoli druhu, přestože se vyskytují rouhačské kusy kódu, které s tím neuctivě počítají.

  3. Přetypuješ každý parametr předávaný funkci na očekávaný typ, pokud toho typu již není, ačkoli jsi přesvědčen o zbytečnosti svého úsilí. Odplata krutá totiž nečekaně zaskočí ty, kdo opomenou.
    Programátor by měl rozumět typové struktuře svého jazyka, jinak jej může stihnout veliké neštěstí. Jakkoli se tak někteří osídlenci Západního pobřeží mylně domnívají, int a long jsou rozdílné typy. Doba jejich stejnosti co do velikosti a reprezentace byla krátká, však agónie jež stihne zastánce jejich vzájemné zaměnitelnosti bude trvat navěky, až se 64-bitové stroje stanou běžnými.

    Dále pak, na rozdíl od přesvědčení rozšířenému mezi zpátečnickými obyvateli Zkažených východních bažin, není NULL žádného typu ukazatel a musí být správně přetypován pokaždé, když je použit jako parametr funkce.

    (Slova proroka Ansiho, který dovolil definovat NULL jako by byl typu void * , jsou často vytrhávána z kontextu a špatně chápána. Byla totiž míněna jako zvláštní dispens pro případy velikých soužení v divokých končinách. Vpravdě pak každý program musí nalézt svoji cestu Houštinou typů a nespoléhat, že pomocí tohoto zřídka dostupného osvobození vyřeší všechny své problémy. Tak či tak velký bůh Dmr, stvořitel C, moudře vybavil jazyk mnoha druhy ukazatelů, ne jen jedním, a tak bude vždy potřeba konvertovat prorokův NULL na žádaný typ.)

    Možná se někteří domnívají, že nové požehnání v podobě "prototypů" odstraní nutnost obezřetnosti v otázce typů argumentů. Nikoli, bratří! Za prvé, problém se objeví pokaždé, stojíme-li před podivnými zákonitostmi proměnného počtu parametrů... a ten, kdo neposiloval svoji víru častým cvičením, bude do této léčky zajisté lapen. Za druhé, zkušenost moudrých praví, že spoléhání se na prototypy otevírá dveře mnoha podivným chybám, a proto si někteří dokonce přáli aby použití prototypů bylo určeno pouze k účelům kontroly chyb, nikoli však k implicitním typovým konverzím. Konečně pak spoléhání se na prototypy přináší veliké složitosti v dnešním Reálném světě, kdy mnozí stále lnou ke starým překladačům z rozmaru či z nezbytí, a nikdy nevíš, na jakých strojích bude tvůj kód nucen běhat zítra.

  4. Jestliže hlavičkové soubory, jež používáš, nemají nadeklarovány návratové typy knihovních funkcí, nadeklaruješ je sám s velikou pečlivostí, abys nedošel újmy ty ani programy tvé.
    Moudrý prorok Ansi k tomu dodává, že bys měl své Dodavatele nutit pod pohrůžkou exkomunikace, aby ke svým knihovnám poskytovali hlavičkové soubory s deklaracemi funkcí. Neboť vpravdě jen oni mohou znát přesné formule zaříkávadel, která vyvolávají jejich kouzla tím nejlepším způsobem.

    Prorok také poznamenává, že je nemoudré a do jam zatracení a podivných chyb vedoucí, aby ses pokoušel cizí knihovní funkce deklarovat sám, jestliže hlavičkové soubory slouží dobře a spolehlivě.

  5. Meze všech polí i řetězců budeš kontrolovati, neboť tam, kde ty pouziješ slovo ``test'', jiný zajisté napíše ``naprostoneuveritelnedlouhoublbost''.
    Skutky Velkého červa nás přesvědčily o jednom důsledku této věty, a sice že robustní software nemá nikdy používat gets() kteréžto je vpravdě nástrojem Ďáblovým. Tvá rozhraní by měla vždy informovat tvé služebníky o mezích tvých polí; a ti z nich, kdo na tyto rady shlížejí spatra či je potichu obcházejí, nechť jsou odkázáni do Krajin Rm, kde ti nebudou moci již nikdy škodit.

  6. Vrací-li funkce chybový kód jako znamení potíží, budeš sledovati její návratovou hodnotu, ano i tehdy, když kontroly ztrojnásobí délku tvého kódu a způsobí puchýře na tvých prstech. Neboť jestliže se domníváš, že ``se to nemůže stát'', budeš zajisté potrestán za svou domýšlivost.
    Jest přáním každého pravověrného, mít po ruce lepší systém pro zpracování chyb, neboť explicitní kontrola návratových kódů je unavující a pokušení kontrolu vynechat je veliké. Leč dokud onen vzdálený den vysvobození nepřijde, nezbývá nám než jít po klikaté a dlouhé cestě s trpělivostí a pozorností, neboť tvůj Dodavatel, Počítač i Software mají zálibu v překvapeních a nerozpakují se vyrobit podivně nesmyslné výsledky den před tvou Obhajobou diplomové práce nebo Velkou dodávkou zákazníkovi.

    Někdy je možné, jako v případě ferror() ve stdio, odložit kontrolu chyb až do chvíle, kdy lze otestovat kumulativní výsledek -- což často vede ke kratšímu a průhlednějšímu kódu. A ovšem také každý, i ten nejhorlivější, přívrženec by měl s rozmyslem přistupovat k ošetřování funkcí, jejichž selhání je naprosto nepodstatné ... leč pozor, přetypování na void je dvousečná zbraň, která bez výčitky prolije tvou vlastní krev.

  7. Dostupné knihovny budeš studovati a snažit se nevymýšleti je znovu bez příčiny, aby tvůj kód byl stručný a čitelný, a tvé dny radostné a produktivní.
    Je bezpočet nečistých pohanů, kteří pohrdají knihovnami z různých nerozumných a pochybných důvodů jako je vzývání Cínových bůžků (také známých jako 'efektivita' a 'rychlost'). Jest zajisté pravdou, že některé vlastnosti knihoven jazyka C byly nedobře navrženy, ovšem v naprosté většině je lepší a levnější použít výtvorů jiných lidí než se vytrvale snažit znovu vynalézt hranaté kolo. Měl by ses však usilovně snažit porozumět tomu, co tvé knihovny slibují a co nikoli, abys nespoléhal na takové jejich vlastnosti, které ti v budoucnu mohou zmizet pod rukama.

  8. Budeš se snažiti, aby tvé programy měly strukturu a účel zřejmý i pro tvého bližního, a budeš proto používati Pravou Štábní Kulturu, i když ji nemáš v lásce. Neboť učiníš lépe, když svoji tvořivost využiješ pro rešení problémů, než pro vymýšlení báječných novot bránících čitelnosti a porozumění.
    Tato slova naneštěstí působí nejistotu mezi novici a konvertity, kteří neznají starých moudrostí. Ona Pravá Štábní Kultura, o níž se zde hovoří, pochází ze spisů Prvních proroků, Kernighana a Ritchieho. Časté a neutuchající jsou její kritiky od neznalých, dle kterých jest těžké ji používati, zatímco ve skutečnosti je jen poněkud obtížné se ji naučit a poté se stane průzračně čistou a jasnou, byť snad poněkud citlivou na drobné chyby.

    A tak zatímco ty se domníváš, že tvé způsoby štábní kultury vedou k čitelnějším programůmu, tvoji následovníci za ně nebudou vděčni neboť budou nuceni přepisovat tvá díla a proklínat tvé jméno, a ozvěna jejich slov se může dostat až k tvému příštímu zaměstnavateli. Jest mnoho zvyků stále dodržovaných v tomto světě, které odstraňují třenice a zlepšují produktivitu skrze jejich všeobecné přijetí, a proto zdaleka není tak důležité jsou-li to optimální řešení. Stejně tak to je i s Pravou Štábní Kulturou.

    Nutno jest učititi jednu politování hodnou poznámku na okraj. Fanatičtí přívrženci Zájmenného gestapa způsobili rozruch kolem použití mužského rodu v těchto Přikázáních, neboť věří že veliké snažení a hlasitý křik za účelem rituální očisty jazyka jakýmsi způsobem přispějí k dobru utiskovaných (na jejichž opravdové a bolavé bědnosti se v tom křiku a rozčilení zapomíná). Budou-li tato slova hlásána lidem jednoduché mysli a rychlým k rozčilení, je možné v takových případech používat neutrální výrazy jako 'bytost' apod. jakožto vhodné pseudobiblické termíny očištěné od nákazy Politické nekorektnosti. (*2)

  9. Tvé externí identifikátory budou rozlišitelné podle prvních šesti znaků, i když ti toto tvrdé omezení bude ztěžovat život a doba, kdy bylo nutné, se ti bude zdát nekonečně vzdálena. Jinak si budeš rvát vlasy a rozum tvůj tě opustí v onen soudný den, kdy zatoužíš přeložit svůj program na starém systému.
    Někteří unáhlení horlivci ovšem volají "nikoli, milénium přichází a toto učení je zastaralé a není třeba ho dále poslouchat" -- leč vpravdě jsou ve světě mnohé historické systémy a jest znám výrok obávaného boha Murphyho, že právě ve tvé příští práci můžeš takový systém potkat. Zatímco spíš, kuje proti tobě pikle; a proto se probuď a buď bdělý.

    Povšimni si přitom, že není nutné aby tvé identifikátory byly pouze šest znaků dlouhé. Jediné, co podle svatého přikázání musíš zachovat, je jedinečnost v rámci prvních šesti znaků. To často není zdaleka tak těžké, jak mnozí tvrdí.

  10. Navěky se pod přísahou zřekneš toho zcestného a zavrženíhodného učení, že ``Všude je VAX'' *3 a nebudeš mít nic společného s nevědomými pohany, kteří jej vyznávají. Jen pak budou dny tvých programů dlouhé, ač tvůj dnešní počítač brzy pomine.
    Tato zcestná myšlenka může mít podobný tvar ``Všude je Sun'' nebo ``Všude je 386'' (tento poslední je přitom obzvláště odporný vynález Satanův), leč slova přikázání platí pro všechny podobné případy stejně. Dej zvláště pozor na nenápadné ale hrozivé ``Všude jsou 32-bitové stroje'', což je téměř úplně pravdou dnes ale přestane jí být dříve, než se tvůj odborný životopis jen o málo prodlouží.

Poznámky

  1. lint je utilita UNIXu kontrolující syntaktickou a částečně i sémantickou správnost zdrojových textů. Na systémech Linux lint jako takový nenajdete, ale můžete použít jeho (lepší) náhradu splint (dříve zvaný lclint).
  2. Poznámka překladatele: můj názor na věci kolem 'politicky korektní' mluvy v angličtině je vyjádřen v článku o politicky korektním přístupu ke studentům na univerzitě.
  3. VAX je značka počítačových systémů, které v 80. a 90. letech 20. století vyráběla firma Digital (v současné době, po peripetiích, součást Hewlett-Packard). Počítače VAX byly velmi populární pro dobrý poměr cena/výkon.

Doporučujeme přečíst také komentovaný originál desatera, a knihu Pavla Herouta Učebnice jazyka C, 2. díl (nakladatelství Kopp, 1995), kde se tento překlad (v nekomentované verzi) vyskytuje na papíře.


Copyright

Tento text je v originále Copyright © Henry Spencer , překlad je Copyright © 1997 Přemek Brada, . Dávám svolení k libovolnému nekomerčnímu šíření a používání této české verze textu; jeho uveřejnění v článku nebo publikaci bez mého vědomí by mě ale rozčililo a navíc by bylo porušením autorského zákona. Zkuste se zeptat profesionálních překladatelů, kolik by si za překlad takto dlouhého odborného textu účtovali. Pokud na Desatero uděláte odkaz na svém serveru, budu vděčný za oznam, zvlášť pokud jde o server kvalitní, navštěvovaný či jinak význačný ;-)