english  francais 
Real Programmers.

"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."


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.)
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-80s.
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 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 savings).


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 to pronounce his 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 Fortran-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.
Real Programmers do List Processing in Fortran.
Real Programmers do String Manipulation in Fortran.
Real Programmers do Accounting (if they do it at all) in Fortran.
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.


The academics in computer science have gotten into the "structured programming" rut over the past several years.
They claim that programs are more easily understood if the programmer uses some special language constructs and techniques.
They don't all agree on exactly which constructs, of course, and the examples they use to show their particular point of view
invariably fit on a single page of some obscure journal or another - 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 tic-tac-toe program,
use five different computer languages, and create 1000-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:
Real Programmers aren't afraid to use GOTOs.
Real Programmers can write five-page-long DO loops without getting confused.
Real Programmers like Arithmetic IF statements - they make the code more interesting.
Real Programmers write self-modifying code, especially if they can save 20 nanoseconds in the middle of a tight loop.
Real Programmers don't need comments - the code is obvious.
Since Fortran doesn't have a structured IF, REPEAT ... UNTIL, or CASE statement, Real Programmers don't have to worry about not using them. Besides, they can be simulated when necessary using assigned GOTOs.
Data Structures have also gotten a lot of press lately. Abstract Data Types, Structures, Pointers, Lists, and Strings have become
popular in certain circles. Wirth (the above-mentioned Quiche Eater) actually wrote an entire book [2] contending that you could write
a program based on data structures, instead of the other way around. 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 programing language with all sorts of complications. The worst thing about fancy data types 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.


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 grade school students 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 referring to 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 a Time Sharing system that runs on OS 370, but after careful study I have come to the conclusion that they were mistaken.


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 occasionally.
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 went off. Today, memory either forgets things when you don't want it to,
or remembers things long after they're better forgotten.)
Legend has it that Seymore Cray, inventor of the Cray I supercomputer 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.
Seymore, needless to say, is a Real Programmer.
One of my favorite Real Programmers was a systems programmer for Texas Instruments.
One day he got a long distance 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.
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 select from, and the Real Programmer must be careful to pick one that reflects his personal style.
Many people believe that the best text editors in the world were written at Xerox Palo Alto Research Center 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 not talk to the 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 Real Programmers consider "what you see is what you get" to be just 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 possible typing error while talking with 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 even 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:
Fortran preprocessors like MORTRAN and RATFOR. The Cuisinarts of programming - great for making Quiche. See comments above on structured programming.
Source language debuggers. Real Programmers can read core dumps.
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. Worst of all, bounds checking is inefficient.
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].


Where does the typical Real Programmer work ?
What kind of programs are worthy of the efforts of so talented an 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!).
Real Programmers work for Los Alamos National Laboratory, writing atomic bomb simulations to run on Cray I supercomputers.
Real Programmers work for the National Security Agency, decoding Russian transmissions.
It was largely due to the efforts of thousands of Real Programmers working for NASA that our boys got to the moon and back before the Russkies.
Real Programmers are at work for Boeing designing the operating systems for cruise missiles.
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 at 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 spacecraft 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 Defense 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 Defense Department decided that all Defense 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 designed to cripple the creativity of the typical Real Programmer.
Fortunately, the language adopted by DoD has enough interesting features to make it approachable -- it's 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 "GoTos 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 nobody 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.


Generally, the Real Programmer plays the same way he works - with computers.
He is constantly amazed that his employer actually pays him to do 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 recognizing Real Programmers away from the computer room:
At a party, the Real Programmers are the ones in the corner talking about operating system security and how to get around it.
At a football game, the Real Programmer is the one comparing the plays against his simulations printed on 11 by 14 fanfold paper.
At the beach, the Real Programmer is the one drawing flowcharts in the sand.
At a funeral, the Real Programmer is the one saying "Poor George, he almost had the sort routine working before the coronary."
In a grocery store, the Real Programmer is the one who insists on running the cans past the laser checkout scanner himself, because he never could trust keypunch operators to get it right the first time.


What sort of environment does the Real Programmer function 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, it's 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:
Listings of all programs the Real Programmer has ever worked on, piled in roughly chronological order on every flat surface in the office.
Some half-dozen or so partly filled cups of cold coffee.
Occasionally, there will be cigarette butts floating in the coffee. In some cases, the cups will contain Orange Crush.
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.
Taped to the wall is a line-printer Snoopy calendar for the year 1969.
Strewn about the floor are several wrappers for peanut butter filled cheese bars
- the type that are made pre-stale at the bakery so they can't get any worse while waiting in the vending machine.
Hiding in the top left-hand drawer of the desk is a stash of double-stuff Oreos for special occasions.
Underneath the Oreos 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, 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 creates a convenient excuse for not doing the documentation.
In general:
No Real Programmer works 9 to 5 (unless it's the ones at night).
Real Programmers don't wear neckties.
Real Programmers don't wear high-heeled shoes.
Real Programmers arrive at work in time for lunch [9].
A Real Programmer might or might not know his wife's name. He does, however, know the entire ASCII (or EBCDIC) code table.
Real Programmers don't know how to cook. Grocery stores aren't open at three in the morning. Real Programmers survive on Twinkies and coffee.


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 graduating from school these days can do hex arithmetic without a calculator.
College 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 alleged "computer scientists" manage to get degrees without ever learning 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 into a Fortran 66 compiler 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, 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 type 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] and [8])
leaving places like Stanford and M.I.T. 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 !


I would like to thank Jan E., Dave S., Rich G., Rich E., for their help in characterizing the Real Programmer, Heather B. for the illustration, Kathy E. for putting up with it, and atd!avsdS:mark for the initial inspiration.


[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, R., "Recent Research in Text Processing", IEEE Trans. Prof. Commun., Vol. PC-23, No. 4, Dec. 4, 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, Van 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] Rose, Frank, "Joy of Hacking", Science 82, Vol. 3 No. 9, Nov 82, pp. 58-66.
[8] "The Hacker Papers", Psychology Today, August 1980.
[9] sdcarl!lin, "Real Programmers", UUCP-net, Thu Oct 21 16:55:16 1982.
Ed Post, "Real Programmers Don't Use Pascal", DATAMATION, July 1983, pp. 263-265 (Readers' Forum).

english  francais 
Les Veritables Programmeurs.

"Tant qu'il existera des objectifs mal definis,
des plannings irrealistes et des bugs bizarres,
il y aura des Veritables prets a foncer dans le tas
pour resoudre les problemes."


Au bon vieux temps, durant ce qu'on appelle l'age d'or de l'informatique, il etait facile de distinguer les Hommes des Jeunots.
La tradition les designe aussi respectivement par les denominations de Veritables et de Visages-pales.
A cette epoque, les Veritables etaient ceux qui connaissaient la programmation des ordinateurs, et les Visages-pales etaient ceux qui ne la connaissaient pas.
Les Veritables preferaient des mots comme "DO 10 I=1,10" ou encore "ABEND". Ils ne parlaient d'ailleurs qu'en majuscules.
Le reste du monde disait des choses du genre "Les ordinateurs sont trop compliques pour moi" ou bien encore "Les ordinateurs ne me disent rien, ils sont trop impersonnels".
Des recherches recentes ont d'ailleurs montre que les Veritables n'ont besoin de rien dire a personne, et qu'en plus ils n'ont pas peur d'etre impersonnels.

Cependant, comme toujours, les choses evoluent. Nous sommes dans un monde oł les braves memes peuvent disposer d'un ordinateur dans leur four a micro-ondes,
ou les gosses de 12 ans peuvent ridiculiser un Veritable aux Asteroids ou au Pac-Man, et oł n'importe qui peut acheter et meme comprendre son propre ordinateur personnel.
Les Veritables risquent fortement l'extinction, sous la concurrence des lyceens avec leurs Mac Intosh.
Il est donc clairement urgent de mettre en evidence les differences entre un lyceen joueur de Pac-Man typique et un Veritable.
En soulignant cette difference, nous montrons ainsi a des gosses un modele a suivre, une aspiration de perfection, une figure paternelle.
Cela contribuera a montrer aux employeurs de Veritables, pourquoi ce serait une erreur de remplacer ceux-ci par des lyceens joueurs de Pac-Man (quelques en soient les economies de salaires realisees).

Les langages de programmation:

Le critere le plus simple pour reperer un Veritable dans la foule est son langage de programmation. Les Veritables utilisent le Fortran, les Visages-pales utilisent le Pascal.
Niklaus Wirth, le concepteur de Pascal participait a une conference. On lui demanda comment il fallait prononcer son nom.
Il repondit "Vous pouvez soit faire un appel par nom en prononcant 'Wiirt', ou faire un appel par valeurs, en prononcant 'Woort'".
Visiblement, on peut detecter par cette reponse que Niklaus Wirth est un Visage-pale. Les Veritables, eux, ne connaissent qu'un seul mecanisme de passage de parametres,
le passage par adresse, qui est implemente dans les compilateurs Fortran-G et -H des IBM/370.
Les Veritables n'ont pas besoin de tous ces concepts abstraits pour effectuer leur boulot, ils se contentent d'une perfo, d'un compilo Fortran et d'un cafe.

  • Un Veritable fait du traitement de listes en Fortran.
  • Un Veritable fait des manipulations de chaines de caracteres en Fortran.
  • Un Veritable fait de la comptibilite (pour autant qu'il en fait) en Fortran.
  • Un Veritable fait des programmes d'intelligence artificielle en Fortran.
  • S'il ne peut le faire en Fortran, il le fait en Assembleur,
  • S'il ne peut le faire en Assembleur, c'est que cela ne vaut vraiment pas la peine d'etre programme.

    La programmation structuree :

    Ces derniers temps, les autorites academiques en informatiques sont tombees d'accord sur la manie de la programmation structuree.
    Elles pretendent que les programmes sont plus faciles a comprendre quand leurs auteurs pratiquent des techniques ou langages speciaux de programmation.
    Ces savants ne sont pas tous d'accord sur quels langages ou quelles techniques il faut utiliser, et leurs exemples en general sont faits de maniere a tenir sur une page de publication scientifique,
    visiblement insuffisant pour convaincre qui que ce soit. Quand j'etais sorti de l'ecole, je pensais etre le meilleur programmeur au monde. Mon programme de morpion etait imbattable,
    je programmais en 5 langages differents et j'etais cap d'aligner un programme de 1000 lignes qui marchait du premier coup (Oui !).
    Mon premier boulot dans le monde Veritable fut de lire et de comprendre un programme de 200.000 instructions Fortran, puis de diviser par deux son temps d'execution.
    Tout Veritable vous dira que la programmation structuree ne vous est pas d'un grand secours pour resoudre ce genre de probleme. Il faut du talent.
    Voici quelques operations sur l'attitude des Veritables vis a vis de la programmation structuree.

  • Un Veritable ne craint pas d'utiliser les GOTOs.
  • Un Veritable peut ecrire une boucle DO de cinq pages sans se melanger les pinceaux.
  • Un Veritable prefere les IF arithmetiques, ca prend moins de place memoire.
  • Un Veritable est capable d'ecrire du code auto-modifiant si cela fait gagner 20 nanosecondes.
  • Un Veritable n'a pas besoin de commentaires, il prefere se fier au code.
  • Un Veritable n'a pas besoin de IF structures, de REPEAT, de CASE ... OF, tout cela peut se simuler en Fortran, au besoin en faisant des ASSIGN, GOTO.

    Les structures de donnees recoivent aussi beaucoup de publicite ces temps-ci.
    Les types de donnees abstraits, les pointeurs, les listes et les chaines de caracteres sont devenus populaires pour certains milieux.
    Wirth, le Visage-pale sus-nomme, a meme ecrit un bouquin pretendant que vous pouvez ecrire des programmes partant de structures de donnees, au lieu de faire l'inverse.
    Ainsi que le sait tout Veritable, la seule structure de donnees reellement utiles est le tableau. Les listes, les structures, les chaines de caracteres, les ensembles,
    tout ca sont des varietes de tableaux qui peuvent se programmer comme tels sans se compliquer la vie avec des distinguos subtils.
    La pire des contraintes avec cette fantaisie de types de donnees est que vous etes obliges de les declarer, et vous savez bien qu'un Veritable langage de programmation
    doit reconnaitre implicitement le type de donnees sur le premier des six caracteres du nom de la variable.

    Les systemes d'exploitation :

    Quel est le type de systeme d'exploitation qui est utilise par les Veritables ? MS-DOS ? Dieu merci non !
    Apres tout, MS-DOS est un systeme d'exploitation joujou. Meme les petites memes et les lyceens peuvent comprendre et utiliser MS-DOS.
    Unix est bien un peu plus complique. Un hacker typique sous Unix n'arrive jamais a se souvenir quel est le nom de la commande PRINT valable pour la semaine.
    Mais quand on y pense un peu, Unix n'est qu'un jeu video un peu mis en valeur. On ne travaille pas serieusement sous Unix, on se borne a envoyer des vannes au monde entier par UUCP,
    a ecrire des jeux d'aventure ou a rediger des articles scientifiques pour publication. Non, un Veritable travaille sous OS/370. Un bon Veritable peut arriver a trouver dans son manuel JCL
    la signification de l'erreur IJK305I qu'il vient d'avoir. Un Veritable fortiche peut ecrire du JCL sans consulter ce manuel du tout.
    Un Veritable carrement extra peut trouver des bugs enfouis dans un dump memoire de 6 Megaoctets sans utiliser une calculatrice hexadecimale.
    OS/370 est veritablement un systeme d'exploitation remarquable. Il est possible la dessus de detruire des journees de travail avec un blanc mal place,
    ce qui incite les equipes de programmation a une plus grande concentration mentale. La meilleure maniere pour aborder le systeme OS/370 est par une perforatrice de cartes.
    Certains pretendent qu'il existe un time-sharing sur OS/370, mais une etude minutieuse a montre le contraire.

    Les outils de programmation :

    Quels outils un Veritable emploie-t-il ? En theorie, il pourrait rentrer ses programmes directement par les cles du panneau frontal de son ordinateur.
    C'etait effectivement le cas a l'occasion du temps oł les machines avaient encore cet accessoire.
    Il fut un temps ou un Veritable connaissait typiquement par coeur son boot en hexa et le rentrait a chaque fois qu'il lui arrivait de l'ecraser avec son programme.
    C'etait aussi le temps oł la memoire etait veritable, et ne s'en allait pas quand on coupait le jus. De nos jours, les memoires oublient ce qu'on leur demande de retenir
    et gardent des choses qu'elles feraient mieux d'ecraser. La legende dit que Seymour Cray, le pere du super ordinateur Cray I et de la plupart
    des Control Data a rentre aux cles le premier systeme d'exploitation du CDC-7600 quand celui-ci a demarre pour la premiere fois.
    Inutile de preciser que Seymour Cray est un Veritable. Un de mes Veritables favoris etait un ingenieur Texas Instruments.
    Un jour, il recut un appel longue distance d'un utilisateur dont le systeme avait crashe au milieu d'une sauvegarde importante.
    Jim avait alors repare les dommages au telephone en faisant rentrer par l'utilisateur les instructions de disk I/O aux cles,
    en patchant les tables systemes en hexa et en se faisant relire les contenus des registres a l'ecouteur. La morale de cette histoire est :
    Meme si un Veritable utilise en general une perfo ou une imprimante comme outil de genie logiciel, il peut s'en sortir en cas d'urgence avec juste un tableau frontal et une ligne telephonique.
    Dans certaines societes, "edition de texte" ne signifie plus de nos jours 10 ingenieurs faisant la queue devant une perfo en code 29.
    D'ailleurs mon lieu de travail n'a plus aucune perfo. Dans une telle situation, un Veritable doit se resigner a utiliser un editeur de texte.
    La plupart des systemes permettent le choix entre plusieurs editeurs, et il s'agit d'en choisir un qui soit compatible avec votre style de travail.
    Beaucoup de personnes croient que les meilleurs editeurs de textes du monde proviennent des laboratoires XEROS a Palo-Alto, sur les systemes ALTO et DORADO.
    Malheureusement, comment voulez vous qu'un Veritable puisse utiliser un systeme d'exploitation au nom aussi ridicule que SMALLTALK, et encore moins manipuler une souris ?
    Quelques-un des concepts de ces editeurs de XEROS se sont retrouves dans des editeurs tournant sur des systemes aux noms plus raisonnables (comme EMACS, VI).
    Le probleme avec ces editeurs de texte est que le concept "Vous obtenez ce que vous voyez" est aux yeux d'un Veritable aussi vicieux chez un editeur qu'il peut l'etre chez une femme.
    En realite, un Veritable prefere du "Vous l'aviez voulu, tant pis pour vous", du complique, de l'enigmatique, du mysterieux, puissant et impitoyable comme TECO pour tout dire.
    On a fait remarquer qu'une sequence de commande TECO ressemble plus a un bruit de teletransmission qu'a du texte lisible.
    Un jeu bien connu sur TECO consiste a taper votre nom en tant que commande et a voir ce que cela donne.
    N'importe quelle erreur de frappe dans TECO recele une forte probabilite de destruction de votre programme, ou mieux encore, d'introduction des erreurs dans un sous programme qui fonctionnait dans le passe.
    C'est ce qui explique pourquoi un Veritable rechigne a editer un programme qui tourne presque. Il prefere patcher directement le binaire a l'aide d'un merveilleux outil appele Superzap
    (ou son equivalent sur une machine non-IBM). Cela marche tellement bien, que beaucoup de programmes IBM n'ont que peu de ressemblances avec le source Fortran.
    En realite, dans de nombreux cas, on ne dispose plus du tout du source.
    Quand il s'agit de corriger un tel programme, aucun patron ne penserait a un autre recours qu'un Veritable :
    un Visage-pale structure ne saurait meme pas par quoi commencer. On appelle ca : "La protection de l'emploi".

    Voici quelques outils de genie logiciel NON employes par les Veritables :

    Les preprocesseurs Fortran comme RAFTOR ou MORTRAN. C'est bon pour les Visages-pales. Voir ci-dessus a propos de la programmation structuree.
    Les aides au debogage en langage source. Un Veritable travaille uniquement sur des dumps memoire.
    Les compilateurs avec des protections de debordement de tableaux. Ils brident la creativite, empeche les usages les plus interessants de l'instruction EQUIVALENCE.
    Ils rendent impossible la modification des instructions systeme avec des indices negatifs. Et le pire de tout, c'est que cela ralentit l'execution.
    La gestion centralisee du code. Un Veritable garde toujours ses sources dans des bacs de cartes personnels fermes a cle.

    Les Veritables au travail (1) :

    Ou travaille un Veritable ? Quels genres de programmes requierent l'attention de cet individu aussi talentueux ?
    Vous n'en trouverez pas en train d'ecrire une paie-compta en Cobol, ou encore faisant du tri d'adresses pour un club de micro.
    Un Veritable ne s'attelle qu'a des taches extra-ordinaires (au sens etymologique).

  • Un Veritable travaille au laboratoire national de Los Almos et ecrit des simulations de bombes nucleaires sur Cray I.
  • Un Veritable travaille au centre national de securite, pour decoder des messages russes.
  • Pour que la NASA puisse envoyer des gars sur la lune et les ramener avant les russes, il a fallu des milliers de Veritables.
  • Les Veritables travaillent chez Boeing pour concevoir des missiles de croisiere.
  • Les Veritables les plus formidables travaillent au Jet Propulsion Laboratory en Californie.

    Beaucoup d'entre eux connaissent par coeur le logiciel de pilotage des sondes Pioneer et Voyager. En combinant des gros programmes Fortran au sol avec un petit programme en langage machine la haut,
    ils sont capables de prodiges de navigation et d'improvisation, comme taper dans une fenetre de dix kilometres de large sur Saturne apres six ans dans l'espace.
    Ou bien encore de reparer des radios et batteries endommagees. Il paraitrait qu'un Veritable a reussi a fourrer un programme de reconnaissance de formes de quelques centaines d'octets
    dans un coin de memoire libre, ce qui a permis de decouvrir une nouvelle lune de Jupiter !

    Il est actuellement prevu pour le programme GALILEO de balancer la sonde vers Jupiter au moyen d'une assistance gravitationnelle de Mars.
    Cette trajectoire va passer a 80 kilometres (plus ou moins 3 kilometres) de la surface de Mars. Personne ne ferait confiance a un programme Pascal
    (ou a un programmeur Pascal) pour naviguer avec une telle precision. Comme vous le voyez, beaucoup de Veritables existant au monde travaillent pour le gouvernement Americain,
    et specialement pour le Departement de la Defense (DoD). Et c'est tres bien ainsi. Recemment, cependant, un nuage noir a obscurci l'horizon des Veritables.
    Il semblerait que quelques Visages-pales haut places du DoD aient decide que tous les programmes de la Defense devront etres ecrits dans un grand langage unifie appele Ada.
    Pendant un temps, il semblait que Ada allait a l'encontre de la programmation Veritable (un langage avec des structures, des types de donnees, des points-virgules,
    bref un langage qui etiolerait la creativite des Veritables). Heureusement, le langage qui fut finalement adopte par le DoD comporte suffisamment de possibilites interessantes pour le rendre potable.
    Il est d'une effroyable complexite, et il contient des outils pour tripoter le systeme d'exploitation et reordonner la memoire. Edsger Dijkstra ne l'aime pas.
    (Vous connaissez Dijkstra, c'est celui qui a ecrit le livre "GOTOs consideres comme nuisibles". Une oeuvre remarquable applaudie par tous les programmeur Pascal et les Visages-pales).
    En tout cas rassurons-nous : Un Veritable peut programmer en Fortran dans n'importe quel langage.
    Il semblerait cependant que certains Veritables peuvent condescendre a faire un compromis dans leurs principes et a oeuvrer sur des choses plus triviales que la destruction de la terre,
    a condition que ce boulot puisse rapporter des sous. Atari, par exemple, emploie plusieurs Veritables pour ecrire ses jeux videos
    (pas pour y jouer, un Veritable connait toutes les astuces pour battre la machine a chaque coup et ce ne serait pas glorieux).
    Les gens de chez Lucas-Films sont aussi des Veritables, il faudrait etre fou pour refuser des millions de dollars des fanas de "L'Empire contre-attaque".
    En CAO, il n'y a pour le moment pas assez de Veritables. Ils n'ont pas encore trouve le filon.
    On y trouve en general des gens qui y sont uniquement pour faire du Fortran et eviter de faire du Cobol.

    Les Veritables au travail (2) :

    En general, un Veritable joue comme il travaille, avec des ordinateurs. Il trouve d'ailleurs incroyable que son boss puisse le payer pour faire quelque chose qu'il ferait de toute maniere gratos.
    (Bien qu'il fasse attention de ne pas le dire trop fort). De temps en temps, il arrive que le Veritable sorte de son bureau pour respirer un bol d'air et prendre un verre de biere.
    Pour le reconnaitre a ces moments, voici quelques trucs :
    Dans un pot, les Veritables sont ceux qui sont dans un coin en train de discuter des protections des systemes d'exploitation et des moyens pour les planter.
    Dans un match de foot, le Veritable est celui en train de comparer le jeu avec sa simulation sur un listing.
    A la plage, le Veritable est celui qui dessine des arbres programmatiques sur le sable.
    Aux enterrements, le Veritable est celui qui dit "Pauvre Tim, son tri tournait presque quand il a eu son attaque".
    Au supermarche, le Veritable est celui qui insiste pour faire passer lui-meme les canettes de biere devant le lecteur optique, si la caissiere l'a mal fait la premiere fois.

    L'habitat naturel du Veritable :

    Dans quel biotope se plait le mieux le Veritable ? C'est une question importante pour les patrons de Veritables, car vu le cout d'un tel specimen,
    il est preferable de leur donner un environnement tel qu'il puisse accomplir efficacement son travail.
    Un Veritable typique vit devant un terminal d'ordinateur. Autour de ce terminal, on peut trouver :
    Les listings de tous les programmes sur lequel le Veritable a eu a travailler, empiles par ordre chronologique et ce sur toute la surface plane du bureau.
    Environ une demi-douzaine de tasses de cafe froid.
    Occasionnellement, il peut y avoir des megots flottants dans les tasses.
    Quelques fois aussi, les tasses contiennent des restes de jus d'orange.
    A moins d'un specimen tres fort, il y aura des exemplaires des manuels du JCL-OS et des principes de base ouverts a une page particulierement interessante.
    Scotche au mur, on trouvera bien sur un listing calendrier Snoopy.
    Jonchant le sol, des emballages Mars, Bounty ou tout autre equivalent du genre qu'on vend dans les distributeurs et pre-rancis pour resister a leur long sejour.
    Cache dans le tiroir superieur gauche du bureau, un paquet de cigarillos pour les grandes occasions.
    Sous les cigarillos, un Normographe laisse la par l'occupant precedent.
    Un Veritable, lui, n'ecrit que des programmes, pas de la doc, il laisse ca aux gens de la maintenance.
    Un Veritable est capable de travailler 30, 40 et meme 50 heures d'une traite, sous pression intense.
    Les temps de reponse lents ne derangent pas le Veritable, ils lui donnent la possibilite de faire un petit somme entre deux compiles.
    Si le planning n'est pas trop serre, le Veritable s'arrange en general pour rendre les choses plus palpitantes en passant les neuf premieres semaines sur un point reduit mais interessant du projet,
    puis en finissant le reste du projet la derniere semaine en quelques marathons de 50 heures. Non seulement cela contribue a impressionner diablement son patron,
    qui desesperait de voir le projet finir dans les temps, mais cela lui fournit aussi une excellente excuse pour ne pas faire la doc.
    En general, on peut dire :

  • Aucun Veritable ne travaille de 9 a 5 heures (A moins que ce ne soit l'autre part de la journee).
  • Un Veritable ne porte pas de cravates.
  • Un Veritable ne porte pas de chaussures a talons.
  • Un Veritable arrive au travail a temps pour le dejeuner.
  • Un Veritable ne connait pas ou ne se souvient pas du nom de sa femme. Mais il peut reciter par coeur la table ASCII ou EBCDIC.
  • Un Veritable ne sait pas cuisiner, les epiceries etant fermees a trois heures du matin, il survit avec des barres de Mars et des tasses de cafe.

    L'avenir du Veritable :

    Que nous reserve l'avenir ? C'est un sujet de preoccupation pour les Veritables que les nouvelles generations de programmeurs ne soient pas elevees avec la meme conception de la vie que leurs aines.
    Beaucoup de ces jeunes n'ont jamais vu un ordinateur avec un panneau frontal. On peut a peine trouver un nouveau diplome qui sache calculer en hexa sans une calculette.
    De nos jours, les diplomes sont des pieds tendres, proteges des realites de la programmation par des debuggers symboliques, des editeurs de textes qui comptent les parentheses,
    et des systemes d'exploitations "conviviaux". Pire que tout, ces soi-disant "chercheurs" du logiciel recoltent des diplomes sans meme avoir jamais appris le Fortran !
    Sommes-nous destines a devenir une industrie de programmeurs Pascal ou de maniaques d'Unix ?

    Heureusement, mon experience vecue me dit que le futur reste radieux pour les Veritables, Ni OS/370 ni Fortran ne montrent de signes de faiblesses, malgre les tentatives des programmeurs Pascal du monde entier.
    Meme les ruses les plus subtiles comme l'introduction de la structuration dans le Fortran ont echoue. Bien sur, quelques constructeurs ont bien sorti des compilos Fortran-77,
    mais tous offrent la possibilite de revenir au Fortran-66 moyennant une option de compile, et permettant ainsi de compiler des boucles DO comme Dieu les a creees pour.
    Mais l'avenir de Unix peut ne pas etre aussi mauvais pour les Veritables qu'on le disait avant.
    La derniere release de Unix contient des potentialites dignes de n'importe quel Veritable : Deux interfaces utilisateurs differentes et subtilement incompatibles,
    un driver TTY tortueux et complique, de la memoire virtuelle. Si vous laissez de cote qu'il soit un langage structure, le C peut se faire apprecier d'un Veritable.
    Apres tout, il ne verifie pas les types des variables, les noms ont seulement sept caracteres (ou dix ? ou huit ?) et vous avez en plus les pointeurs
    (Comme si on avait les avantages du Fortran et de l'Assembleur conjugues). Et sans oublier toutes les applications creatives et interessantes qu'on peut faire avec le #DEFINE.
    Non, l'avenir n'est pas si mal. Et meme, ces derniers temps, la presse populaire a mentionne que les brillantes promos d'hackers quittent des temples comme le MIT ou Stanford pour envahir le monde.
    L'esprit est de toute evidence en eux. Tant qu'existent encore des objectifs mals-definis, des bugs bizarres et des plannings irrealistes,
    il y aura des Veritables prets a foncer dans le tas et a resoudre les problemes en laissant la doc pour plus tard.


    I would like to thank Jan E., Dave S., Rich G., Rich E., for their help in characterizing the Real Programmer, Heather B. for the illustration, Kathy E. for putting up with it, and atd!avsdS:mark for the initial inspiration.


    [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, R., "Recent Research in Text Processing", IEEE Trans. Prof. Commun., Vol. PC-23, No. 4, Dec. 4, 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, Van 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] Rose, Frank, "Joy of Hacking", Science 82, Vol. 3 No. 9, Nov 82, pp. 58-66.
    [8] "The Hacker Papers", Psychology Today, August 1980.
    [9] sdcarl!lin, "Real Programmers", UUCP-net, Thu Oct 21 16:55:16 1982.
    Ed Post, "Real Programmers Don't Use Pascal", DATAMATION, July 1983, pp. 263-265 (Readers' Forum).