Aktuální vydání

celé číslo

12

2021

Automatizace v chemickém a petrochemickém průmyslu

Průtokoměry a regulační ventily

celé číslo

Recenze: Dokonalý kód

číslo 7/2006

Recenze: Dokonalý kód

McConnell, S.: Dokonalý kód (Umění programování a techniky tvorby softwaru). Computer Press, Brno, 2005, 894 stran, náklad neuveden, cena 990 Kč, ISBN 80-251-0849-X.

Kniha je překladem druhého vydání anglického originálu z roku 2004 s názvem Code Complete, k němuž vlastní autorská práva Micrisoft Corporation a autor. Český vydavatel ji určuje spíše pokročilým studentům, programátorům, analytikům a specialistům z oblasti výpočetní techniky. Pro čtenáře časopisu Automa je podobné zaměření jen částí jejich profese, a nemohou tedy počítat s tak komplexním pohledem, na jaký jsou zvyklí v publikacích zaměřených na automatizaci a její souvislosti s výpočetní technikou. Následující hodnocení je tudíž poněkud ovlivněno recenzentovým vyrovnáváním se s touto skutečností.

Jde o knihu velmi rozsáhlou, jak dosvědčuje počet stránek i cena, a také tematicky obsáhlou. Publikace je rozdělena do sedmi částí: 1. Základy, 2. Tvorba vysoce kvalitního kódu, 3. Proměnné, 4. Příkazy, 5. Vylepšení kódu, 6. Systémové úvahy, 7. Softwarové úvahy (poznamenejme, že kódem se zde myslí zdrojový text programu). Do těchto sedmi částí je rozčleněno celkem 35 průběžně číslovaných kapitol. První dvě části poskytují vcelku užitečný pohled na problematiku tvorby softwaru jako projektu. Vlastní programovací postupy jsou obsaženy v částech 3 až 5. Příklady jsou zde uváděny převážně v jazyce C++. Poslední dvě části jsou spíše esejisticky laděné úvahy, zčásti snad vhodné jako odlehčující příloha. Nalezneme zde kapitoly o zvědavosti, duševní upřímnosti, lenosti. Obsahují však i cenné informace o normách IEEE, rady o dokumentování softwaru apod.

Odhlédneme-li od detailů a specifických požadavků dílčích specializací, je to kniha zajímavá, která by mohla přinést zajímavé poznatky všem, kteří mají k problematice tvorby softwaru nějaký vztah.

Přes tyto klady nejde ani zdaleka o dílo dokonalé. Autorem je kniha definována jako příručka, která může sloužit zkušeným programátorům, technickým vedoucím, samoukům i studentům. To poněkud neladí se záměrem vést výklad nezávisle na konkrétním programovacím jazyku. Na jiném místě knihy vyjádřený předpoklad, že programátor ovládá několik programovacích jazyků, je dosti nereálný. Ale jen takový ideální čtenář může plně využít nabízené poučení. Také test datové gramotnosti na straně 251 usvědčuje autora z nevyjasněnosti jeho záměrů. Kdo si totiž není jist významem méně než 20 z 32 víceméně základních pojmů, měl by si, podle autora, předem prostudovat některou z doporučených knih. Pročteme-li v knize i ostatní tematické okruhy, přesvědčíme se, že v nich je výklad veden v podobném duchu. U příručky ovšem očekáváme, že sama obsahuje definice základních pojmů a že odkazy na literaturu pouze dokládají prameny, ze kterých autor čerpal, popř. ukazují cestu k vedlejším a podrobným poznatkům.

Autor doporučuje způsob, jak knihu číst. Od první možnosti, číst ji jako román, jistě čtenáře odradí již její rozsah, a jestliže se do čtení pustí, brzy i způsob výkladu. Další dvě možnosti doporučují dva volitelné vstupní body a další postup podle globálních odkazů. To je systém sice přijatelnější, ale čtenář brzy zjistí, že tyto odkazy křižují knihu z jednoho konce na druhý, vedou vždy jen ke kousku informace a jen někdy umožňují dobrat se jasné a srozumitelné definice. Velmi časté jsou odkazy na skutečně velký počet dalších publikací. Jejich použití je jistě nereálné i v autorově vlasti, natož v našich podmínkách. Vesměs jde o publikace v angličtině.

Autor považuje za přednost své knihy „absenci vycpávek„ (str. 21) a kritizuje „‚určité‘ knihy o softwaru obsahující užitečné informace k vycpávkám v poměru 1 : 9„, avšak tvrzení o přemíře vycpávek bohužel platí pro něj samotného vrchovatě. Mnohého čtenáře odradí mnoho „vaty„, rozvláčnost výkladu a mnoho rádoby výstižných příměrů a příkladů ze života. Mimo to se autor zřejmě nedokáže vyjádřit stručně, jasně a srozumitelně. Někdy čtenář jen tuší, oč běží, a někdy jen bezradně kroutí hlavou – např. v kapitole 12. Základní typy se píše: „Musíte-li sčítat nekonečné posloupnosti, začněte vždy u nejmenší hodnoty a sčítejte hodnoty od konce.„ Podobných námětů na přemýšlení je v knize mnoho.

Odborná a intelektuální úroveň, kterou autor u čtenáře předpokládá, je značně rozkolísaná. Určité primitivní věci, např. počítání s reálnými čísly, rozebírá detailně a na nepřiměřeném rozsahu. Jindy do speciálních problémů vázaných na určitý programovací jazyk nebo metodu vstupuje jaksi zprostředka. Pojednává např. o PPP (proces programování v pseudokódu, str. 228), což je metoda algoritmizace stará nejméně 40 let (u nás se nikdy neujala) a již dávno nahrazená nesrovnatelně účinnějšími graficky založenými metodami. Ty však autor zcela pomíjí. Dále některé problémy sice podrobně rozebírá a ilustruje příklady, avšak co s tím dále, nechává na čtenáři. Spíše než o výklad vhodný pro příručku tak jde o ne zcela závaznou diskusi se čtenářem, ovšem jednostrannou (např. téma dědičnosti a vícenásobné dědičnosti nebo problém příkazu goto).

Tolik jen stručně jako náznak toho, co případného čtenáře čeká. Dospíváme tak k závěru, že kniha, na rozdíl od tvrzení autora, není vhodná pro začínající či méně zběhlé programátory. Může být zajímavá, jak předesílá český vydavatel, především pro skutečné odborníky. Ti dokážou oddělit zrno od plev a ocení snahu zachytit, i když nepříliš podařenou formou, problém v celém rozsahu. A v tom je kniha skutečně originální. Autor má přehled, více než průměrným spisovatelem však není.

Překlad do češtiny má solidní úroveň. Překladatel se ale nevyvaroval některých významových posunů („vložené životně důležité systémy„ jsou nám dobře známé vestavné systémy, „kontrolní seznamy„ by byly pochopitelnější jako kontrolní otázky apod.). Některé nejasně formulované věty lze i při absenci originálního textu připsat spíše na vrub autora. Bývá však dobrým zvykem, že v takovém případě je připojena poznámka překladatele. Knize by jistě prospělo uvádění anglických ekvivalentů odborných výrazů. Programátoři běžně pracují s anglickými příručkami a bylo by pro ně mnohem snazší, kdyby nemuseli spekulovat, o jaký původní anglický termín vlastně jde. Jistě by také bylo užitečné doplnit bohaté odkazy na vesměs anglickou literaturu doporučovanou k detailnímu objasnění diskutovaného problému o odkazy na literaturu u nás běžně dostupnou.

K vydavateli směřuje poznámka k rejstříku, který je pouze český, dosti neúplný a lze říci, že jen velmi omezeně využitelný (např. již citovaná zkratka PPP: v rejstříku je pouze heslo proces programování, vedoucí na str. 53, kde toto sousloví sice nalezneme, avšak ve zcela bezvýznamném kontextu, a dále se již nedostaneme). Knize by jistě prospěl obsáhlý výklad základních pojmů (index), přestože jeho sestavení by při autorově způsobu výkladu bylo obtížné.

Knihu nelze v žádném případě, přes autorovu deklaraci, považovat za příručku. Užitností, přehledností a srozumitelností ji nelze porovnávat např. s Kryštoufkovou oborovou encyklopedií věnovanou výpočetní a řídicí technice, která v tehdy aktuálním zaměření byla ve své době skutečně kvalitní příručkou. Vydavatel se při rozhodování zřejmě opíral i o kvalitu velmi vehementně prosazovanou v úvodu knihy a dokládanou citacemi. Bylo vzato v úvahu, zda takto rozsáhlá a mnohomluvná publikace bude stravitelná pro současnou střední a mladou nečtenářskou generaci?

Jiří Cendelín