Následující text pochází zřejmě z roku 1983, z doby nástupu strukturovaného programování a programovacího jazyka Pascal, který začal vytlačovat do té doby hojně používaný Fortran či Cobol. Osobní počítač kategorie IBM PC kompatibilní dosud nespatřil světlo světa.

Opravdoví programátoři nepoužívají Pascal

Ed Post, © 1983

Za starých dobrých časů - ve "zlaté éře" počítačů, bylo snadné odlišit muže od chlapců (v literatuře označovaných "Opravdoví muži" a "Pojídači koláčů"). Opravdoví muži byli ti, kteří skutečně rozuměli programování počítačů. Pojídači koláčů byli ti, kteří tomu nerozuměli. Opravdový počítačový programátor říkal věci jako DO 10 I=1,10 a ABEND (vyslovoval to velkými písmeny, abyste rozuměli) a zbytek světa říkal věci jako "Počítače jsou pro mne příliš komplikované" a nebo "Nemohu se s počítačem sžít, je tak neosobní". (V předchozí práci [1] jest ukázáno, že opravdoví muži nejsou vázáni na nic, nebojí se být neosobní).

Ovšem, jak je zvykem, časy se mění. Musíme se smířit se světem, v němž může získat počítač stará dáma ve své mikrovlnné troubě a 12-ti letý chlapec porazí opravdového muže v televizní hře na personálním počítači a personální počítač si může koupit každý, a také mu může rozumět. Opravdoví programátoři jsou ohroženi vyhynutím, existuje nebezpečí, že budou nahrazeni vysokoškolskými studenty s TRS-80.

Je zřejmé, že je potřeba ukázat rozdíl mezi typickým, vysokoškolsky vzdělaným hráčem videoher a opravdovým programátorem. Ukážeme-li tento rozdíl dostatečně jasně, dá se dětem šance, aby aspirovaly být podobni svým otcům. Pomůže to rovněž zaměstnavatelům opravdových programátorů tím, že jim to ozřejmí chybu, které se dopouštějí, když nahrazují opravdové programátory ve svém týmu mladými hráči her (a šetří tím platy).

Jazyky

Nejnadnější způsob, jak zjistit, kdo je v davu opravdový programátor, spočívá ve zjištění, jaký programovací jazyk používá. Používá Fortran. Pojídači koláčů používají Pascal. Niclaus Wirth, tvůrce Pascalu, při jedné své přednášce byl dotázán, jak vyslovovat jeho jméno. Odpověděl: "Můžete mne volat jménem (Vaert) a nebo hodnotou (Worth)". Z této poznámky je vidět, že N. Wirth je pojídač koláčů. Opravdový programátor uznává jediný mechanismus předávání parametrů - "voláním hodnotou při návratu - tj. referencí" tak, jak je to implementováno v kompilátorech IBM/370 Fortran G a H. Opravdový programátor nepotřebuje ke své práci všechny tyto abstraktní pojmy, je úplně šťastný, má-li děrovač štítků, kompilátor Fortan IV a pivo. Akademici v počítačových vědách v posledních letech tvoří vyjetou kolej strukturovaného programování.Tvrdí, že programům lze snáze porozumět, když se při jejich psaní používají některé speciální konstrukce a postupy. Ne všichni se přesně shodnou na tom, které konstrukce a příklady používat, aby ukázali jejich konkrétní pohled na věc. Téměř vždy se ale vejdou na jedinou stránku časopisu - jsou nepřesvědčivé. Když jsem opustil školu, myslel jsem si, že jsem nejlepším programátorem na světě. Uměl jsem psát nedostižné tic-tac-toe programy, používat 5 různých programovacích jazyků a psát programy o 1000 řádcích, které pracovaly. (Skutečně!!). Pak jsem přišel do skutečného světa. Mým prvým úkolem bylo přečíst si program ve Fortranu, který měl 200.000 řádků, porozumět mu a pak ho dvakrát urychlit. Každý opravdový programátor vám v takovém případě řekne, že veškeré strukturované kódování v celém světě vám v takovém případě nepomůže, chce to talent. Neboť: Abstraktní datové typy, struktury, ukazatele, seznamy, řetězce - to jsou pojmy, v jistých kruzích poměrně populární. Wirth (výše zmíněny pojídač koláčů) skutečně napsal celou knihu o tom, jak psát programy založené na datových strukturách (Algoritmy + datové struktury = Programy) a ne jinak. Jak ví každý opravdový programátor, jedinou užitečnou datovou strukturou je pole. Řetězce, seznamy, struktury, množiny - to vše jsou specielní případy polí a lze s nimi tak zacházet a není nutné váš programovací jazyk komplikovat. Nejhorší věc na představě datových typů je, že je nutné je deklarovat, zatímco jazyky pro opravdové programování, jak všichni víme, mají implicitní určení typu založené na prvním znaku šestiznakového jména proměnné.

Operační systémy

Jaký typ operačního systému používá opravdový programátor? CP/M? Bože chraň - CP/M je přes všechny jeho klady hračičkový operační systém. CP/M mohou pochopit dokonce i postarší dámy a absolventi základní školy.

Unix je ovšem poněkud komplikovanější - typický Unixácký pisálek si nikdy nevzpomene, jak se tento týden volá příkaz print - ale když systém má právo vypadnout z činnosti, pak je Unix pouze glorifikovanou televizní hrou. Lidé nepracují na Unixových systémech seriózně: posílají si vtipy kolem světa pomocí sítě UUCP a píší dokonalé hry a vědecké články.

Ne, váš opravdový programátor používá OS/370. Dobrý programátor ve svém manuálu JCL nalezne popis chyby IJK3051 a porozumí mu. Velký programátor umí psát JCL programy, aniž by se podíval do manuálu. Skutečně velmi dobrý programátor umí najít chybu i v 6 MB výpisu operační paměti, a to aniž by použil hexadecimální kalkulátor (viděl jsem to skutečně dělat).

OS je skutečně znamenitý systém. Lze na něm ztratit dny práce kvůli jedné chybějící mezeře, což podněcuje programátorský tým k ostražitosti. Nejlepší způsob styku se systémem je přes děrovač děrných štítků. Někteří lidé prohlašují, že na OS/370 běží vícepřístupový terminálový systém, ale po pečlivém studiu jsem dospěl k závěru, že se tito lidé mýlí.

Programovací prostředky

Jaký typ prostředků používá opravdový programátor? Teoreticky platí, že opravdový programátor může počítači zadávat svůj program klávesami na předním panelu počítače. V dávné minulosti, kdy počítače měly přední panel, se to tak skutečně občas dělalo. Váš typický opravdový programátor znal celý zavlékač v hexadecimálním vyjádření zpaměti a namačkal jej, kdykoliv jej váš program porušil (připomeňme si - paměť byla paměť, při vypnutí napájení jste nic nezapomněli. Dnes paměť zapomene věci, které jste zapomenout nechtěli, nebo si pamatuje věci dlouho poté, kdy by bylo lépe na ně zapomenout.) Legenda vypravuje, že Seymore Cray, tvůrce superpočítače Cray I a většiny počítačů firmy Control Data, skutečně namačkal první operační systém do počítače CDC 7600 při jeho prvním zapnutí do sítě přes jeho přední panel a to zpaměti. Nutno říci, že Seymore byl opravdový programátor.

Jedním  mých favoritů na opravdového programátora byl systémový programátor od Texas Instruments. Jednoho dne ho zavolal telefonem uživatel, jehož systém se zboural uprostřed úklidu vysoce důležité práce. Jim byl schopný opravit poruchu po telefonu, donutit uživatele, aby si namačkal diskové V/V operace z panelu, opravil systémové tabulky v hexadecimálním vyjádření a aby mu přečetl registry zpět do telefonu. Poučení z této příhody: zatímco opravový programátor obvykle zahrnuje do své opravářské brašny děrovač štítků a tiskárnu, téhož může dosáhnout telefonem a z předního panelu.

V některých společnostech už editování textů nespočívá v tom, že desítky inženýrů sedí u děrovačů děrných štítků. Skutečně. V budově, kde pracuji, není jediný děrovač děrných štítků. Opravdový programátor musí svoji práci v takovém případě vykonávat pomocí programu typu "text editor" ap. Většina systémů nabízí celou řadu textových editorů, opravdový programátor si musí pečlivě vybírat ten editor, který nejlépe odpovídá jeho životnímu stylu. Mnozí lidé věří, že nejlepší textové editory na světě byly napsány ve výzkumném středisku firmy Xerox v Palo Altu pro jejich počítače Alto a Dorado. Bohužel žádný opravdový programátor nikdy nepoužije počítač, jehož operační systém se jmenuje všední hovor a určitě nebude hovořit k počítači s myší.

Některé myšlenky použité v editorech firmy Xerox byly zahrnuty do editorů běžících pod mnohem vhodněji pojmenovaných systémech - příkladem může být emacs a vi. Problém s těmito editory spočívá v tom, že opravdoví programátoři považují vlastnost "Co vidíš je to, co dostaneš" za stejně špatnou jak u textových editorů, tak i u žen. Ne, opravdový programátor si žádá editor typu "dostaneš to, co žádáš" - editor komplikovaný, tajemný, mocný, neodpouštějící, nebezpečný. Takovým je třeba TECO.

Zjistilo se, že posloupnost příkazů TECO připomíná mnohem více poruchy na komunikční lince než čitelný text. Jednou ze vstupních her, které lze hrát s editorem TECO, spočívá v tom, že zadáte svoje jméno jako příkaz a zkusíte uhodnout, co to udělá. Zatímco budete rozprávět s TECO o chybě vstupních dat, váš program se pravděpodobně zruší a nebo - což je horší - se do již odladěného programu zavlečou nenápadné a tajemné chyby.

Z tohoto důvodu opravdoví programátoři nejsou ochotni editovat program, jenž už téměř chodí. Raději udělají záplatu přímo do binárního kódu programu na disku a to pomocí čarokrásného programu zvaného SUPERZAP (nebo pomocí jeho ekvivalentů na strojích jiných než jsou stroje IBM). Ten pracuje tak dobře, že mnohé činné programy IBM systémů nejsou v žádném vztahu ke svým původním Fortranovským textům. Mnohdy není už ani původní zdrojový text dostupný vůbec. Když vyvstane potřeba upravit takový program, žádný manažer či šéf nebude ani chvíli uvažovat, že by na tuto práci poslal někoho jiného než opravdového programátora - kterýkoliv strukturovaný programátor typu pojídač koláčů by ani nevěděl, kde má začít.

Co opravdový programátor nepoužívá:

Opravdový programátor při práci

Kde typický opravdový programátor pracuje? Jaký typ programů je pro vynaložení úsilí tak talentovaných jedinců dostatečně cenný? Můžete si být jisti, že žádný opravdový programátor neumře při psaní programů pro zpracování dat v Cobolu a nebo při třídění. Opravdový programátor si žádá úkolů světové důležitosti.

Někteří z nejděsivějších ze všech opravdových programátorů pracují v Kalifornii v Jet Propulsion Labs. Mnozí z nich znají celý operační systém kosmických lodí Pioneer a Voyager zpaměti. S kombinací ohromných pozemních Fortranovských programů a malých assemblerovských programů v kosmické lodi jsou schopni udělat neuvěřitelné navigační a improvizační výkony - strefit se do desetikilometrového okna v případě Saturnu a to po pěti letech pobytu ve vesmíru, opravit nebo obejít porouchané čidlo, bateria ap. Říká se, že jeden opravdový programátor zorganizoval v lodi Voyager doplnění programu pro rozpoznávání, a to do několika stovek nevyužitých slabik paměti. Doplněk programu naleznul, určil umístění a vyfotografoval nový měsíc Jupitera.

Stávající plán platný pro kosmickou loď Galileo je založen na využití pomoci gravitace Marsu při cestě k Jupiteru. Dráha této lodi prochází 80+/-3 km od povrchu Marsu. Nikdo nebude důvěřovat programu psanému v Pascalu (nebo pascalovskému programátoru) tak, aby mu svěřil navigaci v těchto tolerancích.

Můžeme říci, že mnozí ze světových opravdových programátorů pracují pro vládu USA - především pro ministerstvo obrany. Tak to má být. V poslední době se ovšem formuje na nebi opravdových programátorů černý mrak. Vypadá to, že někteří vysoce postavení pojídači koláčů v ministerstvu obrany rozhodli, že všechny obranné programy budou psány ve velkolepém unifikovaném jazyku zvaném Ada ( ©, DoD). Prozatím se zdá, že Ada byla orientována tak, aby se stala jazykem, který by bojoval proti poučkám opravdového programování - jazykem se strukturou, s datovými typy a středníky. Krátce, jazyk určený pro zmrzačení tvořivosti typického opravdového programátora. Naštěstí jazyk přijatý ministerstvem obrany má dost zajímavých vlastností, které ho nečiní nebezpečným - je neuvěřitelně složitý, zahrnuje metody, jak si vyměňovat zprávy s operačním systémem a jak přeuspořádat paměť a Edsgar Dijkstra ho nemiluje. (Dijkstra, jsem si jistý, že ho znáte, byl autorem Goto's Considered Harmful - základní práce programovací metodologie, opěvované jak pascalovskými programátory, tak pojídači koláčů). Mimo to, opravdový programátor umí psát Fortranovské programy v kterémkoliv jazyce.

Opravdový programátor může přistoupit ke kompromisům ve svých principech a může pracovat i na něčem méně triviálním, než je zničení lidstva ve formě, jak ho známe. To za předpokladu, že to přinese dost peněz. Existuje např. několik opravdových programátorů tvořících televizní hry u firmy Atari. (Ale nehrají je, opravdový programátor v každém okamžiku ví, jak nad strojem zvítězit - to není žádný problém.) Každý, kdo pracuje u firmy Lucas Film, je opravdový programátor. (Bylo by ztřeštěné odmítnout peníze od 50 milionů fanoušků hry Star Trek.) Množství opravdových programátorů pracujících v počítačové grafice je poněkud pod normou; to především proto, že dosud nikdo nenaleznul pro počítačovou grafiku vážné použití. Na druhé straně, veškerá počítačová grafika je psána ve Fortranu, takže existuje množství lidí, kteří raději dělají grafiku, než aby psali programy v Cobolu.

Opravdový programátor při hře

Obecně platí, že opravdový programátor si hraje stejným způsobem, jakým pracuje - to je s počítačem. Stále se diví, že ho jeho zaměstnavatel skutečně platí za to, aby dělal to, co by měl dělat, a to při jakékoliv legraci (i když pečlivě dbá na to, aby tento názor nevyjadřoval moc nahlas). Opravdový programátor občas opustí svůj úřad. Buď proto, aby vyšel na čerstvý vzduch nebo na pivo či na oboje. Mezi jisté typy pro rozpoznání opravdového programátora mimo výpočetní středisko patří:

Přirozený domov opravdového programátora

Jaké prostředí je pro opravového programátora nejlepší? Pro šéfa opravdových programátorů je to velmi důležitá otázka. Když uvážíme, kolik peněz stojí udržení jednoho jedince v týmu, je snažší dát ho (nebo ji) do prostředí, kde může dělat svoji práci pohodlně.

Typický opravdový programátor žije u terminálu. Mezi to, co obklopuje tento terminál, patří:

Opravdový programátor je schopen pod nátlakem ve stresu pracovat 30, 40 i 50 hodin. Je fakt, že tento způsob práce preferuje. Dlouhá doba odpovědi opravdového programátora neobtěžuje, dává mu šanci, aby si mezi kompilacemi zdřímnul. Není-li vyvinut na opravdového programátora dostatečný tlak, pak má snahu komplikovat věci tím, že pracuje stále na stejné, malé, ale zajímavé části problému prvních 9 týdnů a zbytek pak dodělá za týden. To nezpůsobuje peklo pouze jeho šéfovi, který zoufá nad tím, že se projekt nedokončí, ale vytváří to i vhodnou omluvu proč se nedělá dokumentace. Obecně platí:

Budoucnost

Jaká je budoucnost? Je v zájmu opravdových programátorů, aby poslední generace programátorů byla vychovávána se stejným názorem na život jako jejich starší kolegové. Mnozí z nich už neviděli přední panel počítače. Současní absolventi středních škol neumí řešit aritmetické operace v šestnáctkové soustavě bez použití kalkulačky. Současní absolventi vysokých škol jsou měkcí, jsou chráněni před programátorskou realitou ladícími systémy na úrovni zdrojového jazyka, editory, které počítají závorky a uživatelsky orientovanými operačními systémy. A co je nejhorší, mnozí z domnělých počítačových vědců dělají vše pro to, aby bylo možno absolvovat vysokou školu bez znalosti Fortranu. Jsme určeni k tomu, abychom se stali výrobci Unixových pisálků a Pascalovských programátorů?

Na základě mých zkušeností mohu říci, že budoucnost opravdových programátorů je světlá. Ani OS/370 ani Fortran neprokazují žádné znamení ústupů, a to navzdory veškerému úsilí Pascalovských programátorů na celém světě. Ztroskotaly i mnohé záludné triky jako je přidání strukturovaných řídicích konstrukcí do Fortranu. Samozřejmě, mnozí výrobci počítačů přicházejí s kompilátorem Fortran 77, ale každý takový kompilátor má způsob, jak vrátit sama sebe zpět do kompilátoru Fortranu 66 (zadáním příkazu na štítku) a kompilovat cyklus DO tak, jak Bůh mínil, že se to má dělat.

Unix už dále nemůže být tak nedobrý k opravdovým programátorům jako byl. Poslední verze Unixu je pro opravdové programátory z hlediska operačního systému vysoce cenná - nabízí dva různé a vzájemně nekompatibilní uživatelské interfejsy, tajemný a komplikovaný driver dálnopisu a virtuální paměť. Když pomineme skutečnost, že Unix je strukturovaný, programování v C mohou opravdoví programátoři ocenit: žádná kontrola typu, jména mohou mít 7 (10?, 8?) znaků a dodaný užitek datového typu ukazatel je k vyhození - podobně jako mít na jednom místě nejlepší části jazyka Fortran a assembleru (a to nemluvím o #define).

Ne, budoucnost není tak špatná. Proč v posledních několika letech dokonce i populární tisk komentuje jasnou novou úrodu počítačových hrdinů a pisálků opouštějících místa jako je Stanford či MIT [7, 8].

Ze všech důkazů plyne, že duch opravdového programování leží na těchto mladých mužích a ženách. Pokud existují špatně definované cíle, bizarní chyby a nereálné plány, jsou zde opravdoví programátoři, kteří přiskočí a problém vyřeší, dokumentaci nechají na později. Ať žije Fortran!

Literatura

[1]   Feierstein, B.: Real Man Don't Eat Quiche, N.Y. Pocket Books,1982.
[2] Wirth, N.: Algorithms + Data Structures = Programs, Prentice Hall, 1975.
[3] Xerox PARC Editors ...
[4] Finseth, C.: Theory and Practice of Text Editor - or - cookbook for Emacs, N. S. Thesis, MIT/LCS/TM-165, 1980.
[5] Weinberg, Q.: The Psychology of Computer Programming, N.Y., Van Nostrand Reinkold, 1971.
[6] Dijkstra, E.: On the Green language submitted to the DoD, Sigplan Notices, Vol. 3, No. 10, Oct. 1978.
[7] Rose, F.: Joy of Macking, Science 82, Vol. 3, No. 9, Nov. 1982.
[8] The Hacker Paper, Psychology Today, Aug. 1980.