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.
- Opravdový programátor zpracovává seznamy ve Fortranu
- Opravdový programátor pracuje s texty ve Fortranu
- Opravdový programátor řeší zpracování hromadných dat (když už to musí dělat)
ve Fortranu
- Opravdový programátor řeší umělou inteligenci ve Fortranu
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ť:
- Opravdovým programátorům nevadí používání goto.
- Opravdový programátor může napsat cyklus do na 5 stran a
nesplete se.
- Opravdový programátor miluje aritmetické if,
program dělá zajímavější.
- Opravdový programátor píše samomodifikující se programy;
zvláště v tom případě, když může ušetřit 20 ns
v nejvnitřnějším cyklu.
- Opravdový programátor nepotřebuje poznámky - vlastní kód je zřejmý.
- Poněvadž Fortran neobsahuje strukturované if,
repeat ... until ani case,
opravdový programátor nemá starosti s jejich použitím.
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á:
- Fortranovské pre-procesory typu Mortran či Raftor. Kuchařské
umění programovat - to je něco ohromného pro dělání koláčů.
- Ladicí program na úrovni symbolického jazyka. Opravdový
programátor umí číst výpisy operační paměti.
- Kompilátor provádějící kontrolu překročení mezí polí. Takové
kompilátory dusí tvořivost, znemožňují většinu zajímavých použití
příkazů EQUIVALENCE a znemožňují dělat změny do operačního
systému zadáním záporného indexu. A co je nejhorší,
kontrola překročení mezí snižuje efektivnost.
- Knihovní systémy zdrojových programů. Opravdový programátor má
svůj program zamčený na děrných štítcích, což mu znemožňuje
ponechat svůj program nestřežený [5].
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.
- Opravdový programátor pracuje pro Národní laboratoř v Los
Alamos, kde píše programy simulující atomové bomby na superpočítači
Cray I.
- Opravdový programátor pracuje pro Národní bezpečnostní úřad
a dekóduje odposlouchaný radiový provoz Sovětů.
- Bylo důležité, aby tisíce opravdových programátorů pracovaly pro NASA,
aby se američané dostali na Měsíc a zpět dříve než sověti.
- Počítače v raketoplánu byly programovány opravdovými programátory.
- Opravdoví programátoři pracují pro Boeing a navrhují operační systém
pro křižující rakety.
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ří:
- Na večírku opravdoví programátoři v koutku hovoří o bezpečnosti
operačních systémů a o tom, jak ji obejít.
- Při fotbalu opravdový programátor porovnává hru proti své simulaci
natištěné na 11 až 14 stranách skládaného papíru.
- V lázních u moře kreslí opravdový programátor do písku bloková schemata.
- Při pohřbu je opravdový programátor jedinec, který říká: "Ubohý Jiří.
A ten třídicí program mu těsně před tím, než dostal infarkt, skoro chodil."
- V samoobsluze je opravdový programátor ten, který trvá na tom, že si
na pokladně namačká cenu konzervy sám, poněvadž nikdy neuvěří,
že by děrovačka něco vyděrovala napoprvé správně.
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ří:
- Výpisy všech programů, na kterých opravdový programátor kdy dělal,
nakupené v přibližně chronologickém pořadí na každém volném
místě podlahy kanceláře.
- Několik téměř či úplně plných šálků studené kávy. Občas v této
kávě plave špaček nedokouřené cigarety. Někdy takový šálek obklopují i
slupky z pomeranče.
- Pokud není velmi dobrým programátorem, pak zde budou kopie manuálů
JCL a Principů operací otevřené na některém zajímavém místě.
- Na stěně visí kalendář pro rok 1969 tištěný tiskárnou počítače
s obrázkem Snoopyho.
- Po koberci jsou poházeny obaly od másla a plněných sýrových tyčinek
(takových, které se nechají zvětrat a vyschnout ještě v obchodě, aby se
už nemohly více pokazit v automatu).
- Na stole leží šablona pro kreslení blokových schemat. Ty zde nechal předchozí
majitel kanceláře. (Opravdoví programátoři píší programy, ne dokumentaci.
To nechávají na lidech od údržby).
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í:
- Žádný opravdový programátor nepracuje od 9 do 5 (tedy ve dne).
- Opravdový programátor může, ale nemusí znát jméno své ženy.
Zná ovšem zpaměti celou kódovou tabulku ASCII či EBCDIC.
- Opravdový programátor neumí vařit. Obchody s potravinami
nejsou otevřeny ráno ve 3 hodiny.
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. |