Za starych dobrych casu - ve "zlate ere" pocitacu bylo snadne odlisit muze od chlapcu (v literature oznacenych "Opravdovi muzi" a "Pojidaci kolacu"). Opravdovi muzi byli ti, kteri skutecne rozumeli programovani pocitacu. Pojidaci kolacu byli ti, co tomu nerozumeli. Opravdovy pocitacovy programator rikal veci jako "DO 10 I=1,10" a "ABEND" (vyslovoval to s velkymi pismeny, abyste rozumeli) a zbytek sveta rikal veci jako "Pocitace jsou pro mne prilis komplikovane" a nebo "Nemohu se s pocitacem szit, je tak neosobni". (V predchozi praci [1] je ukazano, ze opravdovi muzi nejsou vazani na nic, neboji se byt neosobni). Ovsem, jak je zvykem, casy se meni. Musime se smirit se svetem, v nemz muze ziskat pocitac mila stara dama ve sve mikrovlnne troube a 12-ti lety chlapec porazi opravdoveho muze v televizni hre na perzonalnim pocitaci a perzonalni pocitac si muze koupit kazdy, a take mu muze porozumet. Opravdovi programatori jsou ohrozeni vyhynutim, existuje nebezpeci, ze budou nahrazeni vysokoskolskymi studenty s TRS-80. Je zrejme, ze je potreba ukazat rozdil mezi typickym, vysokoskolsky vzdelanym hracem video-her a opravdovym programatorem. Ukaze-li se tento rozdil dostatecne jasne, da se detem sance, aby aspirovaly byt podobni svym otcum. Pomuze to rovnez zamestnavatelum opravdovych programatoru tim, ze jim to ozrejmi chybu, ktere se dopousteji, kdyz nahrazuji opravdove programatory ve svem tymu mladymi hraci her (a setri tim platy). 1.0 Jazyky Nejsnadnejsi zpusob, jak zjistit, kdo je v davu opravdovy programator, spociva ve zjisteni, jaky programovaci jazyk pouziva. Pouziva FORTRAN. Pojidaci kolacu pouzivaji Pascal. Nicolaus Wirth, tvurce Pascalu, pri jedne sve prednasce byl dotazan, jak vyslovovat jeho jmeno. Odpovedel: "Muzete me volat jmenem (Wirth) a nebo hodnotou (Worth)". Z teto poznamky je zrejme, ze N.Wirth je pojidac kolacu. Opravdovy programator uznava jediny mechanismus predavani parametru "volanim hodnotou pri navratu - tj. referenci" tak, jak je to implementovano v kompilatorech IBM/370 FORTRAN G a H. Opravdovy programator nepotrebuje ke sve praci vsechny tyto abstraktni pojmy, je uplne stastny, ma-li derovac stitku, kompilator FORTRAN 4 a pivo. Opravdovy programator zpracovava seznamy ve FORTRANu. Opravdovy programator pracuje s texty ve FORTRANu. Opravdovy programator resi zpracovani hromadnych dat (kdyz uz to dela) ve FORTRANu. Opravdovy programator resi umelou inteligenci ve FORTRANu. Akademici v pocitacovych vedach v poslednich letech tvori vyjetou kolej strukturovaneho programovani. Tvrdi, ze programum lze snadno porozumet, kdyz se pri jejich psani pouzivaji nektere specialni konstrukce a postupy. Ne vsichni se presne shodnou na tom, ktere konstrukce a priklady pouzivat, aby ukazali jejich konkretni pohled na vec. Temer vzdy se vejdou na jedinou stranku casopisu - jsou nepresvedcive. Kdyz jsem opustil skolu, myslel jsem si, ze jsem nejlepsim programatorem na svete. Umel jsem psat nedostizne tic-tac-toe programy, pouzivat 5 ruznych programovacich jazyku a psat programy o 1000 radcich, ktere pracovaly. (Skutecne!!) Pak jsem prisel do skutecneho sveta. Mym prvym ukolem bylo precist si program ve FORTRANU, ktery mel 200000 radku, porozumet mu, a pak ho 2x urychlit. Kazdy opravdovy programator vam rekne, ze veskere strukturovane programovani v celem svete vam v takovem pripade nepomuze, chce to talent. Nebot: Opravdovym programatorum nevadi pouzivani GOTO Opravdovy programator muze napsat cyklus DO na 5 stran a nesplete se. Opravdovy programator miluje aritmeticke IF, program dela zajimavejsi. Opravdovy programator pise samomodifikujici se programy, zvlaste v tom pripade, kdyz muze usetrit 20 ns v nejvnitrnejsim cyklu. Opravdovy programator nepotrebuje poznamky - vlastni kod je zrejmy. Ponevadz FORTRAN neobsahuje strukturovane IF, REPEAT, ..... UNTIL ani CASE, opravdovy programator nezna starosti s jejich pouzitim. Abstraktni datove typy, struktury, ukazatele, seznamy, retezce - to jsou pojmy v jistych kruzich pomerne popularni. Wirth (vyse zmineny pojidac kolacu) skutecne napsal celou knihu o tom, jak psat programy zalozene na datovych strukturach (Algoritmy + Datove struktury = Programy) a ne jinak. Jak vi kazdy opravdovy programator, jedinou uzitecnou datovou strukturou je pole. Retezce, seznamy, struktury, mnoziny - to vse jsou specialni pripady poli a lze s nimi tak zachazet a neni nutne vas programovaci jazyk komplikovat. Nejhorsi vec na predstave datovych typu je, ze je nutno je deklarovat, zatimco jazyky pro opravdove programovani, jak vsichni zname, maji implicitni urcovani typu zalozene na 1.znaku 6-ti znakoveho jmena promenne. 2.0 Operacni systemy Jaky typ operacniho systemu pouziva opravdovy programator? CP/M? Boze chran - CP/M je pres vsechny jeho klady hracickovy operacni system. CP/M mohou pochopit dokonce i postarsi damy a absolventi zakladni skoly. UNIX je ovsem ponekud komplikovanejsi - typicky UNIXacky pisalek si nikdy nevzpomene, jak se tento tyden vola prikaz PRINT - ale kdyz system ma pravo vypadnout z cinnosti, pak je UNIX pouze glorifikovanou televizni hrou. Lide nepracuji na UNIXovych systemech seriozne: posilaji si vtipy kolem sveta pomoci site UUCP a pisi dokonale hry a vedecke clanky. Ne, vas opravdovy programator pouziva OS/370. Dobry programator ve svem manualu JCL nalezne popis chyby IJK051 a porozumi mu. Velky programator umi psat JCL programy, aniz by se podival do manualu. Skutecne velmi dobry programator umi najit chybu i v 6MB vypisu operacni pameti, a to aniz by pouzil hexadecimalni kalkulator (videl jsem to skutecne delat). OS je skutecne znamenity system. Lze na nem ztratit dny prace kvuli jedne chybejici mezere, coz podnecuje programatorsky tym k ostrazitosti. Nejlepsi zpusob styku se systemem je pres derovac dernych stitku. Nekteri lide prohlasuji, ze na OS/370 bezi vicepristupovy terminalovy system, ale po peclivem studiu jsem dospel k zaveru, ze se tito lide myli. 3.0 Programovaci prostredky Jaky typ prostredku pouziva opravdovy programator? Teoreticky plati, ze opravdovy programator muze pocitaci zadavat svuj program klavesami na prednim panelu pocitace. V davne minulosti, kdy pocitace mely predni panel, se to tak skutecne obcas delalo. Vas typicky opravdovy programator znal cely zavlekac v hexadecimalnim vyjadreni zpameti a namackal ho kdykoliv jej vas program porusil (pripomenme si - pamet byla pamet, pri vypnuti napajeni jste nic nezapomeli. Dnes pamet budto zapomene veci, ktere jste zapomenout nechteli, nebo si pamatuje veci dlouho pote, kdy by bylo lepe na ne zapomenout). Legenda vypravuje, ze Seymore Cray, tvurce superpocitace Cray 1 a vetsiny pocitacu fy Control Data, skutecne namackal prvni OS do pocitace CDC7600 pri jeho prvnim zapnuti site pres jeho predni panel a to zpameti. Nutno rici, ze Seymore byl opravdovy programator. Jednim z mych favoritu na opravdoveho programatora byl systemovy programator od Texas Instruments. Jednoho dne ho zavolal telefonem uzivatel, jehoz system se zboural uprostred uklidu vysoce dulezite prace. Jim byl schopny opravit poruchu po telefonu, donutil uzivatele, aby si namackal diskove V/V operace z panelu, opravil systemove tabulky v hexadecimalnim vyjadreni a aby mu precetl registry zpet do telefonu. Pouceni z teto prihody: zatimco opravdovy programator obvykle zahrnuje "do sve opravarske brasny" derovac stitku a tiskarnu, tehoz muze dosahnout telefonem a z predniho panelu. V nekterych spolecnostech uz editovani textu nespociva v tom, ze desitky inzenyru sedi u derovace dernych stitku. Skutecne. V budove kde pracuji, neni jediny derovac dernych stitku. Opravdovy programator musi svoji praci v takovem pripade vykonavat pomoci programu typu "text editor" ap. Vetsina systemu nabizi celou radu textovych editoru, opravdovy programator si musi peclive vybrat ten editor, ktery nejlepe odpovida jeho zivotnimu stylu. Mnozi lide veri, ze nejlepsi textove editory na svete byly napsany ve vyzkumnem stredisku fy XEROX v Palo Altu pro jejich pocitace ALTO a DORADO. Bohuzel zadny opravdovy programator nikdy nepouzije pocitac, jehoz operacni system se jmenuje Vsedni hovor a urcite nebude hovorit k pocitaci s mysi. Nektere myslenky pouzite v editorech fy XEROX byly zahrnuty do editoru bezicich pod mnohem vhodneji pojmenovanych operacnich systemech - prikladem muze byt EMANCE a VI. Problem s temito editory spociva v tom, ze opravdovi programatori povazuji vlastnost "Co vidis je to, co dostanes" za stejne spatnou jak u textovych editoru, tak i u zen. Ne, opravdovy programator si zada editor typu "dostanes to, co zadas" - editor komplikovany, tajemny, mocny, neodpoustejici, nebezpecny. Takovym je treba TECO. Zjistilo se, ze posloupnost prikazu TECO pripomina mnohem vice poruchy na komunikacni lince, nez citelny text. Jednou ze vstupnich her, ktera se da hrat s editorem TECO spociva v tom, ze zadate svoje jmeno jako prikaz a zkusite uhodnout, co to udela. Zatimco budete rozpravet s TECO o chybe vstupnich dat, vas program se pravdepodobne zrusi nebo - coz je horsi - se do jiz odladeneho programu zavlecou nenapadne a tajemne chyby. Z tohoto duvodu opravdovi programatori nejsou ochotni editovat program, jenz uz temer chodi. Radeji udelaji zaplatu primo do binarniho kodu programu na disku a to pomoci carokrasneho programu zvaneho SUPERZAP (nebo pomoci jeho ekvivalentu na strojich jinych nez jsou stroje IBM). Ten pracuje tak dobre, ze mnohe cinne programy IBM systemu nejsou v zadnem vztahu ke svym puvodnim FORTRANovskym textum. Mnohdy neni uz puvodni zdrojovy text dostupny vubec. Kdyz vyvstane potreba upravit takovy program, zadny manazer ci sef nebude ani chvili uvazovat, ze by na tuto praci poslal nekoho jineho nez opravdoveho programatora - kterykoliv strukturovany programator typu pojidac kolacu by ani nevedel, kde ma zacit. 4.0 Co opravdovy programator nepouziva? Fortranske pre-procesory typu MORTRAN ci RAFTOR, kucharske umeni programovat - to je neco ohromneho pro delani kolacu. Ladici program na urovni symbolickeho jazyka. Opravdovy programator umi cist vypisy operacni pameti. Kompilator provadejici kontrolu prekroceni mezi poli. Takove kompilatory dusi tvorivost, znemoznuji vetsinu zajimavych pouziti prikazu EQUIVALENCE a znemoznuji delat zmeny operacniho systemu zadanim zaporneho indexu. A co je nejhorsi, kontrola prekroceni mezi snizuje efektivnost. Knihovni systemy zdrojovych programu. Opravdovy programator ma svuj program zamceny na dernych stitcich, coz mu znemoznuje ponechat svuj program nestrezeny [5]. 5.0 Opravdovy programator pri praci Kde typicky opravdovy programator pracuje? Jaky typ programu je pro vynalozeni usili tak talentovanych jedincu dostatecne cenny? Muzete si byt jisti, ze zadny opravdovy programator neumre pri psani programu pro zpracovani dat v COBOLu a nebo pri trideni. Opravdovy programator si zada ukoly svetove dulezitosti. Opravdovy programator pracuje pro Narodni laborator v Los Alamos, kde pise programy simulujici atomove bomby na superpocitaci Cray 1. Opravdovy programator pracuje pro Narodni bezpecnostni urad a dekoduje odposlouchany radiovy provoz Sovetu. Bylo dulezite, aby tisice opravdovych programatoru pracovalo pro NASA, aby se Americane dostali na Mesic a zpet drive nez Soveti. Pocitace v raketoplanu byly programovany opravdovymi programatory. Opravdovi programatori pracuji pro Boeing, kde navrhuji operacni systemy pro krizujici rakety. Nekteri nejdesivejsi ze vsech opravdovych programatoru pracuji v Kalifornii v Jet Propulsion Labs. Mnozi z nich znaji cely operacni system kosmickych lodi Pioneer a Voyager zpameti. S kombinaci ohromnych pozemnich FORTRANskych programu a malych assemblerovskych programu v kosmicke lodi jsou schopni udelat neuveritelne navigacni a improvizacni vykony - strefit se do desetikilometroveho okna v pripade Saturnu a to po 5-ti letech pobytu ve vesmiru, opravit nebo obejit porouchane cidlo, baterii ap. Rika se, ze jeden opravdovy programator zorganizoval v lodi Voyager doplneni programu pro rozpoznani, a to do nekolika stovek nevyuzitych bytu v pameti. Doplnek programu nalezl, urcil umisteni a vyfotografoval novy mesic Jupitera. Stavajici plan platny pro kosmickou lod Gallileo je zalozen na vyuziti pomoci gravitace Marsu pri ceste k Jupiteru. Draha teto lodi prochazi 80 +/-3 km od povrchu Marsu. Nikdo nebude duverovat programu psanemu v PASCALu (nebo Pascalovskemu programatoru) tak, aby mu sveril navigaci v techto tolerancich. Muzeme rici, ze mnozi ze svetovych opravdovych programatoru pracuji pro vladu USA - predevsim pro ministerstvo obrany. Tak to ma byt. V posledni dobe se ovsem formuje na nebi opravdovych programatoru cerny mrak. Vypada to tak, ze nekteri vysoce postaveni pojidaci kolacu v ministerstvu obrany rozhodli, ze vsechny obranne programy budou psany ve stejnem velkolepem unifikovanem jazyku zvanem ADA ((C), DoD). Prozatim se zda, ze ADA byla orientovana tak, aby se stala jazykem, ktery by bojoval proti pouckam opravdoveho programovani - jazykem se strukturou, s datovymi typy a stredniky. Kratce, jazyk urceny pro zmrzaceni tvorivosti typickeho opravdoveho programatora. Nastesti jazyk prijaty ministerstvem obrany ma dost zajimavych vlastnosti, ktere ho necini nebezpecnym - je neuveritelne slozity, zahrnuje metody, jak si vymenovat zpravy s operacnim systemem a jak usporadat pamet a Edgar Dijkstra ho nemiluje. (Dijkstra, jsem si jist, ze ho znate, byl auterem "GoTos Considered Harmful" - zakladni prace programovaci metodologie, opevovane jak pascalovskymi programatory, tak pojidaci kolacu). Mimo to, opravdovy programator umi psat FORTRANske programy v kteremkoliv jazyce. Opravdovy programator muze pristoupit ke kompromisum ve svych principech a muze pracovat i na necem mene trivialnim, nez je zniceni zivota ve forme, jak ho zname. To za predpokladu, ze to prinese dost penez. Existuje napr. nekolik opravdovych programatoru tvoricich televizni hry u fy Atari. (ale nehraji je, opravdovy programator v kazdem okamziku vi, jak nad strojem zvitezit - to neni zadny problem). Kazdy kdo pracuje u fy Lucas Film, je opravdovy programator. (Bylo by ztrestene odmitnout penize od 50-ti milionu fanousku hry Star Trek). Mnozstvi opravdovych programatoru pracujicich v pocitacove grafice je ponekud pod normou; to predevsim proto, ze dosud nikdo nenalezl pro pocitacovou grafiku vazne pouziti. Na druhe strane, veskera pocitacova grafika je ve FORTRANu, takze existuje mnozstvi lidi, kteri radeji delaji grafiku, nez aby psali programy v COBOLu. 6.0 Opravdovy programator pri hre Obecne plati, ze opravdovy programator si hraje stejnym zpusobem jako pracuje - to je s pocitacem. Stale se divi, ze ho jeho zamestnavatel skutecne plati za to, aby delal to, co by mel delat, a to pri jakekoliv legraci (i kdyz peclive dba na to, aby tento nazor nevyjadroval moc nahlas). Opravdovy programator obcas opusti svuj urad. Bud uz proto, aby vysel na cerstvy vzduch anebo na pivo ci na oboje. Mezi jiste typy pro rozpoznani opravdoveho programatora mimo vypocetni stredisko patri: Na vecirku opravdovi programatori v koutku hovori o bezpecnosti operacnich systemu a o tom, jak ji obejit. Pri fotbalu opravdovy programator porovnava hru proti sve simulaci natistene na 11 az 14 stranach skladaneho papiru. V laznich u more kresli opravdovy programator do pisku blokova schemata. Pri pohrbu je opravdovy programator jedinec, ktery rika: "Ubohy Jiri. A ten tridici program mu tesne pred tim, nez dostal infarkt, temer chodil". V samoobsluze je opravdovy programator ten, ktery trva na tom ze si na pokladne namacka cenu konzerv sam, ponevadz nikdy neuveri, ze by derovacka neco naderovala napoprve spravne. 7.0 Prirozeny domov opravdoveho programatora Jake prostredi je pro opravdoveho programatora nejlepsi? Pro sefa opravdovych programatoru je to velmi dulezita otazka. Kdyz uvazime, kolik penez stoji udrzeni jednoho jedince v tymu, je snazsi dat ho (nebo ji) do prostredi, kde muze delat svoji praci pohodlne. Typicky opravdovy programator zije u terminalu. Mezi to, co obklopuje tento terminal patri: Vypisy vsech programu, na kterych opravdovy programator kdy delal, nakupene v priblizne chronologickem poradi na kazdem volnem miste podlahy kancelare. Nekolik temer ci uplne plnych salku studene kavy. Obcas v teto kave plave spacek nedokourene cigarety. Nekdy takovy salek obsahuje i slupky od pomerance. Pokud neni velmi dobrym programatorem, pak zde budou kopie manualu JCL a Principu operaci otevrene na nekterem zajimavem miste. Na stene visi kalendar pro rok 1969 tisteny tiskarnou pocitace s obrazkem Snoopyho. Po koberci jsou pohazeny obaly od masla a plnenych syrovych tycinek (takovych, ktere se nechaji zvetrat a vyschnout jeste v obchode, aby se uz nemohly vice pokazit v automatu). Na stole lezi sablona pro kresleni blokovych schemat. Tu zde nechal predchozi majitel kancelare. (Opravdovi programatori pisi programy, ne dokumentaci. To nechavaji na lidech od udrzby). Opravdovy programator je schopen pod natlakem ve stresu pracovat 30, 40 i 50 hodin. Je fakt, ze tento zpusob prace preferuje. Dlouha doba odezvy systemu opravdoveho programatora neobtezuje, dava mu sanci, aby si mezi kompilacemi zdrimnul. Neni-li vyvinut na opravdoveho programatora dostatecny tlak, pak ma snahu komplikovat veci tim, ze pracuje stale na stejne, male, ale zajimave casti problemu prvnich devet tydnu a zbytek pak dodela za tyden. To nezpusobuje peklo pouze jeho sefovi, ktery zoufa nad tim, ze se projekt nedokonci, ale vytvari to i vhodnou omluvu, proc se nedela dokumentace. Obecne plati: Zadny opravdovy programator nepracuje od 9 do 5 (tedy ve dne). Opravdovy programator muze, ale nemusi znat jmeno sve zeny. Zna ovsem zpameti celou kodovou tabulku ASCII ci EBCDIC. Opravdovy programator neumi varit. Obchody s potravinami nejsou otevreny rano ve 3 hodiny. 8.0 Budoucnost Jaka je budoucnost? Je v zajmu opravdovych programatoru, aby posledni generace programatoru byla vychovana se stejnym nazorem na zivot jako jejich starsi kolegove. Mnozi z nich uz ani nevideli predni panel pocitace. Soucasni absolventi strednich skol neumi resit aritmeticke operace v sestnactkove soustave bez vhodne kalkulacky. Soucasni absolventi vysokych skol jsou mekci, jsou chraneni pred programatorskou realitou ladicimi systemy na urovni zdrojoveho jazyka, editory, ktere pocitaji zavorky a uzivatelsky orientovanymi operacnimi systemy. A co je nejhorsi, mnozi z domelych pocitacovych vedcu delaji vse pro to, aby bylo mozne absolvovat vysokou skolu bez znalosti FORTRANu. Jsme urceni k tomu, abychom se stali vyrobci UNIXovskych pisalku a PASCALskych programatoru? Na zaklade svych zkusenosti mohu rici, ze budoucnost opravdovych programatoru je svetla. Ani OS/370 ani FORTRAN neprokazuji zadne znameni ustupu, a to navzdory veskeremu usili PASCALskych programatoru na celem svete. Ztroskotaly i mnohe zaludne triky jako je pridani strukturovanych ridicich konstrukci do FORTRANu. Samozrejme, mnozi vyrobci pocitacu prichazeji s kompilatorem FORTRANu 77, ale kazdy takovy kompilator ma zpusob, jak vratit sebe sama zpet do kompilatoru FORTRANu 68 (zadanim prikazu na stitku) a kompilovat cyklus DO tak, jak Buh minil, ze se to da delat. UNIX uz dale nemuze byt tak nedobry k opravdovym programatorum jako byl. Posledni verze UNIXu je pro opravdove programatory z hlediska operacniho systemu cenna - nabizi dva ruzne a vzajemne nekompatibilni uzivatelske interfacy, tajemny a komplikovany driver dalnopisu a virtualni pamet. Kdyz pomineme skutecnost, ze UNIX je strukturovany, programovani v C mohou opravdovi programatori ocenit: zadna kontrola typu, jmena mohou mit 7 (10?, 8?) znaku a dodany uzitek datoveho typu ukazatel je k vyhozeni - podobne jako mit na jednom miste nejlepsi casti jazyka FORTRAN a assembleru (a to nemluvime o define). Ne, budoucnost neni tak spatna. Proc v poslednich nekolika letech dokonce i popularni tisk komentuje jasnou novou urodu pocitacovych hrdinu a pisalku opoustejicich mista jako je Stanford ci MIT [7,8]. Ze vsech dukazu plyne, ze duch opravdoveho programovani lezi na techto mladych muzich a zenach. Pokud existuji spatne definovane cile, bizardni chyby a nerealne plany, jsou zde opravdovi programatori, kteri priskoci a problem vyresi, dokumentaci nechaji na pozdeji. At zije FORTRAN !