T H E    R E A L    P R O G R A M M E R Opravdový programátor
Ed Post, "Real Programmers Don't Use Pascal", DATAMATION, July 1983, pp. 263-265 (Readers' Forum).
Real Programmers Don't Use Pascal Opravdoví programátoři nepoužívají pascal
1 Introduction 1 Úvod
Back in the good old days - the "Golden Era" of computers - it was easy to separate the men from the boys (sometimes called "Real Men" and "Quiche Eaters" in the literature). During this period, the Real Men were the ones that understood computer programming, and the Quiche Eaters were the ones that didn't. A real computer programmer said things like "DO 10 I=1,10" and "ABEND" (they actually talked in capital letters, you understand), and the rest of the world said things like "Computers are too complicated for me" and "I can't relate to computers - they're so impersonal". (A previous work [1] points out that Real Men don't relate to anything and aren't afraid of being impersonal.) Za starých dobrých časů - ve "zlaté éře" počítačů bylo snadné odlišit muže od chlapců (v literatuře označený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, co tomu nerozuměli. Opravdový počítačový programátor říkal věci jako "DO 10 I=1,10" a "ABEND" (vyslovoval to s 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] je ukázáno, že opravdoví muži nejsou vázáni na nic, nebojí se být neosobní).
But, as usual, times change. We are faced today with a world in which little old ladies can get computers in their microwave ovens, 12-year old kids can blow Real Men out of the water playing Asteroids and Pac-Man, and anyone can buy and even understand their very own Personal Computer. The Real Programmer is in danger of becoming extinct, of being replaced by high-school students with TRASH-80's. 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č milá 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 porozumět. Opravdoví programátoři jsou ohroženi vyhynutím, existuje nebezpečí, že budou nahrazeni vysokoškolskými studenty s TRS-80.
There is a clear need to point out the differences between the typical high-school junior Pac-Man player and a Real Programmer. If this difference is made clear, it will give these kids something to aspire to - a role model, a Father Figure. It will also help to explain to the employers of Real Programmers why it would be a mistake to replace the Real Programmers on their staff with 12-year old Pac-Man players (at a considerable salary saving). Je zřejmé, že je potřeba ukázat rozdíl mezi typickým, vysokoškolsky vzdělaným hráčem vi-deo-her a opravdovým programátorem. Ukáže-li se tento rozdíl dostatečně jasně, dá se dětem šance, aby aspirovaly být podobní 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).
2 Languages 2 Jazyky
The easiest way to tell a Real Programmer from the crowd is by the programming language he (or she) uses. Real Programmers use FORTRAN. Quiche Eaters use PASCAL. Nicklaus Wirth, the designer of PASCAL, gave a talk once at which he was asked "How do you pronounce your name?". He replied "You can either call me by name, pronouncing it 'Veert', or call me by value, 'Worth'." One can tell immediately from this comment that Nicklaus Wirth is a Quiche Eater; the only parameter passing mechanism endorsed by Real Programmers is call-by-value-return, as implemented in the IBM/370 FORTRAM-G and H compilers. Real Programmers don't need all these abstract concepts to get their jobs done - they are perfectly happy with a keypunch, a FORTRAN IV compiler, and a beer. So, please note:
  1. Real Programmers do List Processing in FORTRAN.
  2. Real Programmers do String Manipulation in FORTRAN.
  3. Real Programmers do Accounting (if they do it at all) in FORTRAN.
  4. Real Programmers do Artificial Intelligence programs in FORTRAN.
If you can't do it in FORTRAN, do it in assembly language. If you can't do it in assembly language, it isn't worth doing.
Nejsnadně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. Nicolaus 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 mě volat jménem (Wirth) a nebo hodnotou (Worth)". Z této poznámky je zřejmé, ž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 FORTRAN 4 a pivo.
  1. Opravdový programátor zpracovává seznamy ve FORTRANu.
  2. Opravdový programátor pracuje s texty ve FORTRANu.
  3. Opravdový programátor řeší zpracování hromadných dat (když už to dělá) ve FORTRANu.
  4. Opravdový programátor řeší umělou inteligenci ve FORTRANu.
3 Structured programing 3 Strukturované programování
The academics in computer science have got into the "structured programming" rut over the past few years. They claim that programs are more easily understood if the programmers use some special language constructs and techniques. They don't all agree on exactly which constructs, of course, and the examples they use to illustrate their particular point of view invariably fit on a single page of some obscure journal or other - clearly not enough of an example to convince anyone. When I got out of school, I thought I was the best programmer in the world. I could write an unbeatable noughts and crosses program, use five different computer languages, and create 1,000 line programs that WORKED. (REALLY|) Then I got out into the Real World. My first task in the Real World was to read and understand a 200,000 line FORTRAN program, then speed it up by a factor of two. Any Real Programmer will tell you that all the Structured Coding in the world won't help you solve a problem like that - it takes actual talent. Some quick observations on Real Programmers and Structured Programming:
  1. Real Programmers aren't afraid to use GOTO's.
  2. Real Programmers can write five page long DO loops without getting confused.
  3. Real Programmers like Arithmetic IF statements - they make the code more interesting.
  4. Real Programmers write self-modifying code, especially if they can save20 nano-seconds in the middle of a tight loop.
  5. Since FORTRAN doesn't have a structured IF, REPEAT... UNTIL, or CASE statement, Real Programmers don't have to worry about not using them. Anyway, they can always be simulated when necessary, using assigned GOTO's.
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 snadno 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 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 200000 řádků, porozumět mu, a pak ho 2x urychlit. Každý opravdový programátor vám řekne, že veškeré strukturované programování v celém světě vám v takovém případě nepomůže, chce to talent. Neboť:
  1. Opravdovým programátorům nevadí používání GOTO
  2. Opravdový programátor může napsat cyklus DO na 5 stran a nesplete se.
  3. Opravdový programátor miluje aritmetické IF, program dělá zajímavější.
  4. 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.
  5. Opravdový programátor nepotřebuje poznámky - vlastní kód je zřejmý.
  6. Poněvadž FORTRAN neobsahuje strukturované IF, REPEAT, ..... UNITL ani CASE, opravdový programátor nezná starosti s jejich použitím.
Data Structures have also had a lot of attention lately. Abstract Data Types, Structures, Pointers, Lists and Strings have all become popular in certain circles. Wirth (the above-mentioned Quiche Eater) actually wrote a whole book [2] contending that you could write a program based on Data Structures, instead of the other way round. As all Real Programmers know, the only useful data structure is the Array. Strings, lists, structures, sets - these are all special cases of arrays and can be treated that way just as easily without messing up your programming language with all sorts of complications. The worst thing about fancy data structures is that you have to declare them, and Real Programming Languages, as we all know, have implicit typing based on the first letter of the (six character) variable name. 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ěný 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 speciální 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 nutno je deklarovat, zatímco jazyky pro opravdové programování, jak všichni známe, mají implicitní určování typu založené na 1. znaku 6-ti znakového jména proměnné.
4 Operating systems 4 Operační systémy
What kind of operating system is used by a Real Programmer? CP/M? God forbid - CP/M, after all, is basically a toy operating system. Even little old ladies and school kids can understand and use CP/M.

UNIX is a lot more complicated of course - the typical UNIX hacker never can remember what the PRINT command is called this week - but when it gets right down to it, UNIX is a glorified video game. People don't do Serious Work on UNIX systems: they send jokes around the world on UUCP-net and write adventure games and research papers.

No, your Real Programmer uses OS/370. A good programmer can find and understand the description of the IJK305I error he just got in his JCL manual. A great programmer can write JCL without looking at the manual at all. A truly outstanding programmer can find bugs buried in a 6 megabyte core dump without using a hex calculator. (I have actually seen this done.)

OS is a truly remarkable operating system. It"s possible to destroy days of work with a single misplaced space, so alertness in the programming staff is encouraged. The best way to approach the system is through a keypunch. Some people claim there is Time Sharing system that runs on OS/370, but after careful consideration I have come to the conclusion that they were mistaken.

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 IJK051 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 6MB 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í.

5 Programming tools 5 Programovací prostředky
What kind of tools does a Real Programmer use? In theory, a Real Programmer could run his programs by keying them into the front panel of the computer. Back in the days when computers had front panels, this was actually done on occasion. Your typical Real Programmer knew the entire bootstrap loader by memory in hex, and toggled it in whenever it got destroyed by his program. (Back then memory was memory - it didn't go away when the power was turned off. Today, memory either forgets things when you don't want it to, or remembers things long after they are best forgotten.) Legend has it that Seymour Cray, inventor of the Cray I and II supercomputers - and most of Control Data's computers - actually toggled the first operating system for the CDC7600 in on the front panel from memory when it was first powered on. Needless to say, Seymour Cray is a Real Programmer.

One of my favourite Real Programmers was a systems programmer for Texas Instruments. One day he got a long distance phone call from a user whose system had crashed in the middle of saving some important work. Jim was able to repair the damage over the phone, getting the user to toggle in disk I/O instructions at the front panel, repairing system tables in hex, reading register contents back over the phone. The moral of this story: while a Real Programmer usually includes a keypunch and lineprinter in his toolkit, he can get along with just a front panel and a telephone in emergencies.

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ý zavlekač v hexadecimálním vyjádření zpaměti a namačkal ho kdykoliv jej váš program porušil (připomeňme si - paměť byla paměť, při vypnutí napájení jste nic nezapomněli. Dnes paměť buďto 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 1 a většiny počítačů fy Control Data, skutečně namačkal první OS do počítače CDC7600 při jeho prvním zapnutí sítě přes jeho přední panel a to zpaměti. Nutno říci, že Seymore byl opravdový programátor.

Jedním z 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, donutil 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 opravdový 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.

In some companies, text editing no longer consists of ten engineers standing in line to use an 029 keypunch. In fact, the building I work in doesn't contain a single keypunch. The Real Programmer in this situation has to do his work with a "text-editor" program. Most systems supply several text editors to choose from, and the Real Programmer must take care to select the one which most reflects his personal style. Many people believe that the best text editors in the world are those developed at Xerox Palo Alto Research Centre for use on their Alto and Dorado computers [3]. Unfortunately, no Real Programmer would ever use a computer whose operating system is called SmallTalk, and would certainly never talk to a computer with a mouse.

Some of the concepts in these Xerox editors have been incorporated into editors running on more reasonably named operating systems - EMACS and VI being two. The problem with these editors is that the Real Programmer considers "what you see is what you get" to be as bad a concept in Text Editors as it is in women. No, the Real Programmer wants a "you asked for it, you got it" text editor - complicated, cryptic, powerful, unforgiving, dangerous. TECO, to be precise.

It has been observed that a TECO command sequence more closely resembles transmission line noise than readable text [4]. One of the more entertaining games to play with TECO is to type your name in as a command line and try to guess what it does. Just about any typing error whilst talking to TECO will probably destroy your program or, even worse, introduce subtle and mysterious bugs in a once working subroutine.

For this reason, Real Programmers are reluctant to actually edit a program that is close to working - they find it much easier to just patch the binary object code directly, using a wonderful program called SUPERZAP (or its equivalent on non-IBM machines). This works so well that many working programs on IBM systems bear no relation to the original FORTRAN code. In many cases, the original source code is no longer available. When it comes time to fix a program like this, no manager would ever think of sending anything less than a Real Programmer to do the job - no Quiche Eating structured programmer would even know where to start. This is called "Job Security". Some programming tools NOT used by Real Programmers:

  1. FORTRAN preprocessors like MORTRAN and RATFOR. The Cuisinarts of programming - great for making Quiche. See comments above on structured programming.
  2. Source language debuggers - Real Programmers can read core dumps.
  3. Compilers with array bounds checking. They stifle creativity, destroy most of the interesting uses for EQUIVALENCE and make it impossible to modify the operating system code with negative subscripts.
  4. Source code maintenance systems. A Real Programmer keeps his code locked up in a card file, because it implies that its owner cannot leave his important programs unguarded [5].
V některých společnostech už editování textu nespočívá v tom, že desítky inženýrů sedí u děrovače děrných štítků. Skutečně. V budově kde pracuji, není jediný děrovač děrných štítků. Opravdový programátor musí spoji 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ě vybrat 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 fy 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 fy XEROX byly zahrnuty do editorů běžících pod mnohem vhodněji pojmenovaných operačních systémech - příkladem může být EMANCE 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 komunikační lince, než čitelný text. Jednou ze vstupních her, která se dá 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ší 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 ekvivalentu na strojích jiných než jsou stroje IBM). Ten pracuje tak dobře, že mnohé činné programy IBM systému nejsou v žádném vztahu ke svým původním FORTRANovským textům. Mnohdy není už 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á?

  1. Fortranské pre-procesory typu MORTRAN či RAFTOR, kuchařské umění programovat - to je něco ohromného pro dělání koláčů.
  2. Ladicí program na úrovni symbolického jazyka. Opravdový programátor umí číst výpisy operační paměti.
  3. 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říkazu EQUIVALENCE a znemožňují dělat změny operačního systému zadáním záporného indexu. A co je nejhorší, kontrola překročení mezí snižuje efektivnost.
  4. 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].
6 The Real programmer at work 6 Opravdový programátor při práci
Where does the Real Programmer work? What programs are worthy of the efforts of such a talented individual? You can be sure that no Real Programmer would be caught dead writing accounts-receivable programs in COBOL, or sorting mailing lists for People magazine. A Real Programmer wants tasks of earth-shaking importance (literally|).
  1. Real Programmers work for Los Alamos National Laboratory, writing atomic bomb simulations to run on Cray I/II supercomputers.
  2. Real Programmers work for the National Security Agency, decoding the Russian transmissions.
  3. It was largely due to the efforts of thousands of Real Programmers that our boys got to the moon and back before the Russkies.
  4. Real Programmers are at work for Boeing, designing the operating systems for Cruise missiles ( - creativity at it's best|?|).
Some of the most awesome Real Programmers of all work at the Jet Propulsion Laboratory in California. Many of them know the entire operating system of the Pioneer and Voyager spacecraft by heart. With a combination of large ground-based FORTRAN programs and small spacecraft-based assembly language programs, they are able to do incredible feats of navigation and improvisation: hitting ten-kilometer wide windows on Saturn after six years in space, repairing or bypassing damaged sensor platforms, radios and batteries. Allegedly, one Real Programmer managed to tuck a pattern-matching program into a few hundred bytes of unused memory in a Voyager craft that searched for, located, and photographed a new moon of Jupiter.

The current plan for the Galileo spacecraft is to use a gravity-assist trajectory past Mars on the way to Jupiter. This trajectory passes within 80+/-3 kilometers of the surface of Mars. Nobody is going to trust a PASCAL program (or a PASCAL programmer) for navigation to these tolerances.

As you can tell, many of the world's Real Programmers work for the U.S. Government - mainly the Defence Department. This is as it should be. Recently, however, a black cloud has formed on the Real Programmer horizon. It seems that some highly placed Quiche Eaters at the Defence Department decided that all defence programs should be written in some grand unified language called "ADA" ((c) DoD). For a while, it seemed that ADA was destined to become a language that went against all the precepts of Real Programming - a language with structure, a language with data types, strong typing, and semicolons. In short, a language destined to cripple the creativity of the Real Programmer. Fortunately, the language adopted by the Defence Department has enough interesting features to make it approachable - its incredibly complex, includes methods for messing with the operating system and rearranging memory, and Edsgar Dijkstra doesn't like it [6]. (Dijkstra, as I'm sure you know, was the author of "GoTo's Considered Harmful" - a landmark work in programming methodology, applauded by PASCAL programmers and Quiche Eaters alike.) Besides, the determined Real Programmer can write FORTRAN programs in any language.

The Real Programmer might compromise his principles and work on something slightly more trivial than the destruction of life as we know it, providing there's enough money in it. There are several Real Programmers building video games at Atari, for example. (But not playing them - a Real Programmer knows how to beat the machine every time: no challenge in that.) Everyone working at LucasFilm is a Real Programmer. (It would be crazy to turn down the money of fifty million Star Trek fans.) The proportion of Real Programmers in Computer Graphics is somewhat lower than the norm, mostly because no-one has found a use for computer graphics yet. On the other hand, all computer graphics is done in FORTRAN, so there are a fair number of people doing graphics in order to avoid having to write COBOL programs.

Kde typický opravdový programátor pracuje? Jaký typ programu 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á úkoly světové důležitosti.
  1. Opravdový programátor pracuje pro Národní laboratoř v Los Alamos, kde píše programy simulující atomové bomby na superpočítači Cray 1.
  2. Opravdový programátor pracuje pro Národní bezpečnostní úřad a dekóduje odposlouchaný radiový provoz Sovětů.
  3. Bylo důležité, aby tisíce opravdových programátorů pracovalo pro NASA, aby se Američané dostali na Měsíc a zpět dříve než Sověti.
  4. Počítače v raketoplánu byly programovány opravdovými programátory.
  5. Opravdoví programátoři pracují pro Boeing, kde navrhují operační systémy pro křižující rakety.
Někteří nejděsivější 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 FORTRANský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 5-ti letech pobytu ve vesmíru, opravit nebo obejít porouchané čidlo, baterii ap. Říká se, že jeden opravdový programátor zorganizoval v lodi Voyager doplnění programu pro rozpoznání, a to do několika stovek nevyužitých bytů v paměti. Doplněk programu nalezl, určil umístění a vyfotografoval nový měsíc Jupitera.

Stávající plán platný pro kosmickou loď Gallileo 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 tak, že někteří vysoce postavení pojídači koláčů v ministerstvu obrany rozhodli, že všechny obranné programy budou psány ve stejném velkolepém unifikovaném jazyku zvaném ADA ((C), DoD). Prozatím se zdá, že ADA byla orientovaná 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 uspořádat paměť a Edgar Dijkstra ho nemiluje. (Dijkstra, jsem si jist, že ho znáte, byl auterem "GoTos 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 FORTRANské 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í života 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 fy 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 fy Lucas Film, je opravdový programátor. (Bylo by ztřeštěné odmítnout peníze od 50-ti 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 nenalezl pro počítačovou grafiku vážné použití. Na druhé straně, veškerá počítačová grafika je ve FORTRANu, takže existuje množství lidí, kteří raději dělají grafiku, než aby psali programy v COBOLu.

7 The Real programmer at play 7 Opravdový programátor při hře
Generally, the Real Programmer plays the same way as he works - with computers. He is constantly amazed that his employer actually pays him for doing what he would be doing for fun anyway (although he is careful not to express this opinion out loud). Occasionally, the Real Programmer does step out of the office for a breath of fresh air and a beer or two. Some tips on recognising Real Programmers away from the computer room:
  1. At a party, the Real Programmers are the ones sitting in the corner talking about operating systems security and how to get round it.
  2. At a football game, the Real Programmer is the one comparing each move against his simulations printed on 11 by 14 fanfold listing paper.
  3. At the beach, the Real Programmer is the one drawing flowcharts in the sand.
  4. At a funeral, the Real Programmer is the one saying "Poor George. And he almost had that sort routine working before the heart-attack."
  5. In a supermarket, the Real Programmer is the one who insists on running the tin cans past the laser checkout scanner himself, because he never could trust keypunch operators to get it right first time.
Obecně platí, že opravdový programátor si hraje stejným způsobem jako 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ď už proto, aby vyšel na čerstvý vzduch anebo na pivo či na oboje. Mezi jisté typy pro rozpoznání opravdového prográmatora mimo výpočetní středisko patří:
  1. 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.
  2. 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.
  3. V lázních u moře kreslí opravdový programátor do písku bloková schemata.
  4. 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, téměř chodil".
  5. V samoobsluze je opravdový programátor ten, který trvá na tom že si na pokladně namačká cenu konzerv sám, poněvadž nikdy neuvěří, že by děrovačka něco naděrovala napoprvé správně.
8 The Real programmer's natural habitat 8 Přirozený domov opravdového programátora
What sort of environment does the Real Programmer work best in? This is an important question for the managers of Real Programmers. Considering the amount of money it costs to keep one on the staff, its best to put him (or her) in an environment where he can get his work done. The typical Real Programmer lives in front of a computer terminal. Surrounding this terminal are:
  1. Listings of all programs the Real Programmer has ever worked on, piled inroughly chronological order on every flat surface in his office.
  2. Some half-dozen or so partly filled cups of cold coffee. Occasionally, there will be cigarette butts floating in the coffee (when the ashtray could not be found due to the listings). In some cases, the cups will contain Unsparkling Orange.
  3. Unless he is very good, there will be copies of the OS JCL manual and the Principles of Operation open to some particularly interesting pages.
  4. Taped to the wall is a lineprinter Snoopy calendar for the year 1969.
  5. Strewn about the floor are several wrappers for chocolate digestive biscuits and Twixes - the types made pre-stale at the factory so they don't get any worse while waiting in the vending machine.
  6. Hiding in the top left-hand drawer of the desk is a stash of Smarties for special occasions.
  7. Underneath the Smarties is a flowcharting template, left there by the previous occupant of the office. (Real Programmers write programs, not documentation. Leave that to the maintenance people.)
The Real Programmer is capable of working 30, 40 or even 50 hours at a stretch, under intense pressure. In fact, he prefers it that way. Bad response time doesn't bother the Real Programmer - it gives him a chance to catch a little sleep between compiles. If there is not enough schedule pressure on the Real Programmer, he tends to make things more challenging by working on some small but interesting part of the problem for the first nine weeks, then finishing the rest in the last week, in two or three 50-hour marathons. This not only impresses the hell out of his manager, who was despairing of ever getting the project done on time, but also creates a convenient excuse for not doing the documentation. In general:
  1. No Real Programmer works 9 to 5 (unless it's the ones at night).
  2. Real Programmers don't wear neckties.
  3. Real Programmers don't wear high-heeled shoes.
  4. Real Programmers arrive at work in time for lunch [7].
  5. A Real Programmer might or might not know his wife's name. He does, however, know the entire ASCII (or EBCDIC) code table.
  6. Real Programmers don't know how to cook. Supermarkets aren't open at three in the morning. Real Programmers survive on Mars Bars and coffee.
Jaké prostředí je pro opravdové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ří:

  1. 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.
  2. 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 obsahuje i slupky od pomeranče.
  3. 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ě.
  4. Na stěně visí kalendář pro rok 1969 tištěný tiskárnou počítače s obrázkem Snoopyho.
  5. 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).
  6. Na stole leží šablona pro kreslení blokových schemat. Tu 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 odezvy systému 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 devět 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í:
  1. Žádný opravdový programátor nepracuje od 9 do 5 (tedy ve dne).
  2. 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.
  3. Opravdový programátor neumí vařit. Obchody s potravinami nejsou otevřeny ráno ve 3 hodiny.
9 The future 9 Budoucnost
What of the future? It is a matter of some concern to Real Programmers that the latest generation of computer programmers are not being brought up with the same outlook on life as their elders. Many of them have never seen a computer with a front panel. Hardly anyone leaving school these days can do hex arithmetic without a calculator. Graduates these days are soft - protected from the realities of programming by source level debuggers, text editors that count parentheses, and "user friendly" operating systems. Worst of all, some of these so-called "computer scientists" manage to get degrees without ever having to learn FORTRAN| Are we destined to become an industry of UNIX hackers and PASCAL programmers?

From my experience, I can only report that the future is bright for Real Programmers everywhere. Neither OS/370 nor FORTRAN show any signs of dying out, despite all the efforts of PASCAL programmers the world over. Even more subtle tricks, like adding structured coding constructs to FORTRAN have failed.

Oh sure, some computer vendors have come out with FORTRAN 77 compilers, but every one of them has a way of converting itself back to FORTRAN 66 at the drop of an option card - to compile DO loops like God meant them to be.

Even UNIX might not be as bad on Real Programmers as it once was. The latest release of UNIX has the potential of an operating system worthy of any Real Programmer - two different and subtly incompatible user interfaces, an arcane and complicated teletype driver, and virtual memory. If you ignore the fact that it's "structured," even "C" programming can be appreciated by the Real Programmer: after all, there's no checking, variable names are seven (ten? eight?) characters long, and the added bonus of the Pointer data type is thrown in - like having the best parts of FORTRAN and assembly language in one place. (not to mention some of the more creative uses for Define.)

No, the future isn't all that bad. Why, in the past few years, the popular press has even commented on the bright new crop of computer nerds and hackers ([7], [8]) leaving places like Stanford and MIT for the Real World. From all evidence the spirit of Real Programming lives on in these young men and women. As long as there are ill-defined goals, bizarre bugs, and unrealistic schedules, there will be Real Programmers willing to jump in and Solve The Problem, saving the documentation for later. Long live FORTRAN.

Jaká je budoucnost? Je v zájmu opravdových programátorů, aby poslední generace programátorů byla vychována se stejným názorem na život jako jejich starší kolegové. Mnozí z nich už ani 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 vhodné kalkulačky. Současní absolventi vysokých škol jsou měkcí, jsou chráněni před programátorskou realitou ladicí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 domělých počítačových vědců dělají vše pro to, aby bylo možné absolvovat vysokou školu bez znalosti FORTRANu. Jsme určeni k tomu, abychom se stali výrobci UNIXovských pisálků a PASCALských programátorů?

Na základě svých zkušeností mohu říci, že budoucnost opravdových programátorů je světlá. Ani OS/370 ani FORTRAN neprokazují žádné znamení ústupu, a to navzdory veškerému úsilí PASCALský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 FORTRANu 77, ale každý takový kompilátor má způsob, jak vrátit sebe sama zpět do kompilátoru FORTRANu 68 (zadáním příkazu na štítku) a kompilovat cyklus DO tak, jak Bůh mínil, že se to dá 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 cenná - nabízí dva různé a vzájemně nekompatibilní uživatelské interfacy, 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 není k zahození - podobně jako mít na jednom místě nejlepší části jazyka FORTRAN a assembleru (a to nemluvíme 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, bizardní 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 !

Acknowledgments Acknowledgments
I would like to thank Jan E., Dave S., Rich G., Rich E., for their help in characterising the Real Programmer, Kathy E. for putting up with it, and atd|avsdS:mark for the initial inspiration. (And me - Dave N. - for typing it onto our machine - a worthy project||)  
References Literatura
[1] Feirstein, B.: "Real Men Don't Eat Quiche", New York, Pocket Books, 1982.
[2] Wirth, N.: "Algorithms + Data Structures = Programs", Prentice-Hall, 1976.
[3] Ilson, Awe.: "Recent Research in Text Processing", IEEE Trans. Prof. Commun., Vol PC-23, No. 4, Dec 4th 1980.
[4] Finseth, C.: "Theory and Practice of Text Editors - or - a Cookbook for An EMACS", B.S. thesis, MIT/LCS/TM-165, Massachusetts Institute of Technology, May 1980.
[5] Weinberg, G.: "The Psychology of Computer Programming", New York, Von Nostrand Reinhold, 1971, p.110.
[6] Dijkstra, E.: "On the GREEN Language submitted to the DoD", Sigplan notices, Vol 3 No. 10, Oct 1978.
[7] sdcarl|lin, "Real Programmers", UUcp-net, Thurs Oct 21 16:55:16 1982.
[8] Rose, Frank.: "Joy of Hacking", Science 82, Vol 3 No. 9, Nov 82, pp 58-66.
[9] "The Hacker Papers", Psychology Today, August 1980.
 
This text originated from this page humor1.html and here is copy Tento text pochází z této stránky pojidaci.kolacu.html a zde je kopie.
přebývající text
chybějící text
links:

Valid XHTML 1.0!

Aktualizace 2001.09.07 23:41