Real Programmers Don't Use Pascal


Real Programmers Don't Use Pascal

(humour)Back in the good old days - the "Golden Era" ofcomputers, it was easy to separate the men from the boys(sometimes called "Real Men" and "Quiche Eaters" in theliterature). During this period, the Real Men were the onesthat understood computer programming, and the Quiche Eaterswere the ones that didn't. A real computer programmer saidthings like "DO 10 I=1,10" and "ABEND" (they actually talkedin capital letters, you understand), and the rest of the worldsaid things like "computers are too complicated for me" and "Ican't relate to computers - they're so impersonal". (Aprevious work [1] points out that Real Men don't "relate" toanything, and aren't afraid of being impersonal.)

But, as usual, times change. We are faced today with a worldin which little old ladies can get computers in theirmicrowave ovens, 12-year-old kids can blow Real Men out of thewater playing Asteroids and Pac-Man, and anyone can buy andeven understand their very own Personal Computer. The RealProgrammer is in danger of becoming extinct, of being replacedby high-school students with TRASH-80s.

There is a clear need to point out the differences between thetypical high-school junior Pac-Man player and a RealProgrammer. If this difference is made clear, it will givethese kids something to aspire to -- a role model, a FatherFigure. It will also help explain to the employers of RealProgrammers why it would be a mistake to replace the RealProgrammers on their staff with 12-year-old Pac-Man players(at a considerable salary savings).

LANGUAGES

The easiest way to tell a Real Programmer from the crowd is bythe programming language he (or she) uses. Real Programmersuse Fortran. Quiche Eaters use Pascal. Nicklaus Wirth,the designer of Pascal, gave a talk once at which he was askedhow to pronounce his name. He replied, "You can either callme by name, pronouncing it 'Veert', or call me by value,'Worth'." One can tell immediately from this comment thatNicklaus Wirth is a Quiche Eater. The only parameter passingmechanism endorsed by Real Programmers iscall-by-value-return, as implemented in the IBM 370Fortran-G and H compilers. Real programmers don't need allthese abstract concepts to get their jobs done - they areperfectly 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) inFortran.

Real Programmers do Artificial Intelligence programs inFortran.

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.

STRUCTURED PROGRAMMING

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 theprogrammer uses some special language constructs andtechniques. They don't all agree on exactly which constructs,of course, and the examples they use to show their particularpoint of view invariably fit on a single page of some obscurejournal or another - clearly not enough of an example toconvince anyone. When I got out of school, I thought I wasthe best programmer in the world. I could write an unbeatabletic-tac-toe program, use five different computer languages,and create 1000-line programs that WORKED. (Really!) Then Igot out into the Real World. My first task in the Real Worldwas to read and understand a 200,000-line Fortran program,then speed it up by a factor of two. Any Real Programmer willtell you that all the Structured Coding in the world won'thelp you solve a problem like that - it takes actual talent.Some quick observations on Real Programmers and StructuredProgramming:

Real Programmers aren't afraid to use GOTOs.

Real Programmers can write five-page-long DO loops withoutgetting confused.

Real Programmers like Arithmetic IF statements - they make thecode more interesting.

Real Programmers write self-modifying code, especially if theycan 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 aboutnot using them. Besides, they can be simulated when necessaryusing assigned GOTOs.

Data Structures have also gotten a lot of press lately.Abstract Data Types, Structures, Pointers, Lists, and Stringshave become popular in certain circles. Wirth (theabove-mentioned Quiche Eater) actually wrote an entire book[2] contending that you could write a program based on datastructures, instead of the other way around. As all RealProgrammers know, the only useful data structure is the Array.Strings, lists, structures, sets - these are all special casesof arrays and can be treated that way just as easily withoutmessing up your programing language with all sorts ofcomplications. The worst thing about fancy data types is thatyou have to declare them, and Real Programming Languages, aswe all know, have implicit typing based on the first letter ofthe (six character) variable name.

OPERATING SYSTEMS

What kind of operating system is used by a Real Programmer?CP/M? God forbid - CP/M, after all, is basically a toyoperating system. Even little old ladies and grade schoolstudents can understand and use CP/M.

Unix is a lot more complicated of course - the typical Unixhacker never can remember what the PRINT command is calledthis week - but when it gets right down to it, Unix is aglorified video game. People don't do Serious Work on Unixsystems: they send jokes around the world on UUCP-net andwrite adventure games and research papers.

No, your Real Programmer uses OS 370. A good programmer canfind and understand the description of the IJK305I error hejust got in his JCL manual. A great programmer can write JCLwithout referring to the manual at all. A truly outstandingprogrammer can find bugs buried in a 6 megabyte core dumpwithout using a hex calculator. (I have actually seen thisdone.)

OS is a truly remarkable operating system. It's possible todestroy days of work with a single misplaced space, soalertness in the programming staff is encouraged. The bestway to approach the system is through a keypunch. Some peopleclaim there is a Time Sharing system that runs on OS 370, butafter careful study I have come to the conclusion that theywere mistaken.

PROGRAMMING TOOLS

What kind of tools does a Real Programmer use? In theory, aReal Programmer could run his programs by keying them into thefront panel of the computer. Back in the days when computershad front panels, this was actually done occasionally. Yourtypical Real Programmer knew the entire bootstrap loader bymemory in hex, and toggled it in whenever it got destroyed byhis program. (Back then, memory was memory - it didn't goaway when the power went off. Today, memory either forgetsthings when you don't want it to, or remembers things longafter they're better forgotten.) Legend has it that Seymore Cray, inventor of the Cray I supercomputer and most ofControl Data's computers, actually toggled the first operatingsystem for the CDC7600 in on the front panel from memory whenit was first powered on. Seymore, needless to say, is a RealProgrammer.

One of my favorite Real Programmers was a systems programmerfor Texas Instruments. One day he got a long distance callfrom a user whose system had crashed in the middle of savingsome important work. Jim was able to repair the damage overthe phone, getting the user to toggle in disk I/O instructionsat the front panel, repairing system tables in hex, readingregister contents back over the phone. The moral of thisstory: while a Real Programmer usually includes a keypunch andlineprinter in his toolkit, he can get along with just a frontpanel and a telephone in emergencies.

In some companies, text editing no longer consists of tenengineers standing in line to use an 029 keypunch. In fact,the building I work in doesn't contain a single keypunch. TheReal Programmer in this situation has to do his work with a"text editor" program. Most systems supply several texteditors to select from, and the Real Programmer must becareful to pick one that reflects his personal style. Manypeople believe that the best text editors in the world werewritten at Xerox Palo Alto Research Center for use on theirAlto and Dorado computers [3]. Unfortunately, no RealProgrammer would ever use a computer whose operating system iscalled SmallTalk, and would certainly not talk to the computerwith a mouse.

Some of the concepts in these Xerox editors have beenincorporated into editors running on more reasonably namedoperating systems - Emacs and VI being two. The problemwith these editors is that Real Programmers consider "what yousee is what you get" to be just as bad a concept in TextEditors 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 beprecise.

It has been observed that a TECO command sequence more closelyresembles transmission line noise than readable text [4]. Oneof the more entertaining games to play with TECO is to typeyour name in as a command line and try to guess what it does.Just about any possible typing error while talking with TECOwill probably destroy your program, or even worse - introducesubtle and mysterious bugs in a once working subroutine.

For this reason, Real Programmers are reluctant to actuallyedit a program that is close to working. They find it mucheasier to just patch the binary object code directly, usinga wonderful program called SUPERZAP (or its equivalent onnon-IBM machines). This works so well that many workingprograms on IBM systems bear no relation to the originalFortran code. In many cases, the original source code is nolonger available. When it comes time to fix a program likethis, no manager would even think of sending anything lessthan a Real Programmer to do the job - no Quiche Eatingstructured programmer would even know where to start. This iscalled "job security".

Some programming tools NOT used by Real Programmers:

Fortran preprocessors like MORTRAN and RATFOR. TheCuisinarts of programming - great for making Quiche. Seecomments above on structured programming.

Source language debuggers. Real Programmers can read coredumps.

Compilers with array bounds checking. They stifle creativity,destroy most of the interesting uses for EQUIVALENCE, and makeit impossible to modify the operating system code withnegative subscripts. Worst of all, bounds checking isinefficient.

Source code maintenance systems. A Real Programmer keeps hiscode locked up in a card file, because it implies that itsowner cannot leave his important programs unguarded [5].

THE REAL PROGRAMMER AT WORK

Where does the typical Real Programmer work? What kind ofprograms are worthy of the efforts of so talented anindividual? You can be sure that no Real Programmer would becaught dead writing accounts-receivable programs in COBOL,or sorting mailing lists for People magazine. A RealProgrammer wants tasks of earth-shaking importance(literally!).

Real Programmers work for Los Alamos National Laboratory,writing atomic bomb simulations to run on Cray Isupercomputers.

Real Programmers work for the National Security Agency,decoding Russian transmissions.

It was largely due to the efforts of thousands of RealProgrammers working for NASA that our boys got to the moon andback before the Russkies.

Real Programmers are at work for Boeing designing theoperating systems for cruise missiles.

Some of the most awesome Real Programmers of all work at theJet Propulsion Laboratory in California. Many of them knowthe entire operating system of the Pioneer and Voyagerspacecraft by heart. With a combination of large ground-basedFortran programs and small spacecraft-based assembly languageprograms, they are able to do incredible feats of navigationand improvisation - hitting ten-kilometer wide windows atSaturn after six years in space, repairing or bypassingdamaged sensor platforms, radios, and batteries. Allegedly,one Real Programmer managed to tuck a pattern-matching programinto a few hundred bytes of unused memory in a Voyagerspacecraft that searched for, located, and photographed a newmoon of Jupiter.

The current plan for the Galileo spacecraft is to use agravity assist trajectory past Mars on the way to Jupiter.This trajectory passes within 80 +/-3 kilometers of thesurface 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 forthe U.S. Government - mainly the Defense Department. This isas it should be. Recently, however, a black cloud has formedon the Real Programmer horizon. It seems that some highlyplaced Quiche Eaters at the Defense Department decided thatall Defense programs should be written in some grand unifiedlanguage called "ADA" ((C), DoD). For a while, it seemed thatADA was destined to become a language that went against allthe 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 thetypical Real Programmer. Fortunately, the language adopted byDoD has enough interesting features to make it approachable --it's incredibly complex, includes methods for messing with theoperating system and rearranging memory, and Edsgar Dijkstradoesn't like it [6]. (Dijkstra, as I'm sure you know, was theauthor of "GoTos Considered Harmful" - a landmark work inprogramming methodology, applauded by Pascal programmers andQuiche Eaters alike.) Besides, the determined Real Programmercan write Fortran programs in any language.

The Real Programmer might compromise his principles and workon something slightly more trivial than the destruction oflife as we know it, providing there's enough money in it.There are several Real Programmers building video games atAtari, for example. (But not playing them - a Real Programmerknows how to beat the machine every time: no challenge inthat.) Everyone working at LucasFilm is a Real Programmer.(It would be crazy to turn down the money of fifty millionStar Trek fans.) The proportion of Real Programmers inComputer Graphics is somewhat lower than the norm, mostlybecause nobody has found a use for computer graphics yet. Onthe other hand, all computer graphics is done in Fortran, sothere are a fair number of people doing graphics in order toavoid having to write COBOL programs.

THE REAL PROGRAMMER AT PLAY

Generally, the Real Programmer plays the same way he works -with computers. He is constantly amazed that his employeractually 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 officefor a breath of fresh air and a beer or two. Some tips onrecognizing Real Programmers away from the computer room:

At a party, the Real Programmers are the ones in the cornertalking about operating system security and how to get aroundit.

At a football game, the Real Programmer is the one comparingthe plays against his simulations printed on 11 by 14 fanfoldpaper.

At the beach, the Real Programmer is the one drawingflowcharts in the sand.

At a funeral, the Real Programmer is the one saying "PoorGeorge, he almost had the sort routine working before thecoronary."

In a grocery store, the Real Programmer is the one who insistson running the cans past the laser checkout scanner himself,because he never could trust keypunch operators to get itright the first time.

THE REAL PROGRAMMER'S NATURAL HABITAT

What sort of environment does the Real Programmer functionbest in? This is an important question for the managers ofReal Programmers. Considering the amount of money it costs tokeep one on the staff, it's best to put him (or her) in anenvironment where he can get his work done.

The typical Real Programmer lives in front of a computerterminal. Surrounding this terminal are:

Listings of all programs the Real Programmer has ever workedon, piled in roughly chronological order on every flat surfacein the office.

Some half-dozen or so partly filled cups of cold coffee.Occasionally, there will be cigarette butts floating in thecoffee. In some cases, the cups will contain Orange Crush.

Unless he is very good, there will be copies of the OS JCLmanual and the Principles of Operation open to someparticularly interesting pages.

Taped to the wall is a line-printer Snoopy calendar for theyear 1969.

Strewn about the floor are several wrappers for peanut butterfilled cheese bars - the type that are made pre-stale at thebakery so they can't get any worse while waiting in thevending machine.

Hiding in the top left-hand drawer of the desk is a stash ofdouble-stuff Oreos for special occasions.

Underneath the Oreos is a flowcharting template, left there bythe previous occupant of the office. (Real Programmers writeprograms, not documentation. Leave that to the maintenancepeople.)

The Real Programmer is capable of working 30, 40, even 50hours at a stretch, under intense pressure. In fact, heprefers it that way. Bad response time doesn't bother theReal Programmer - it gives him a chance to catch a littlesleep between compiles. If there is not enough schedulepressure on the Real Programmer, he tends to make things morechallenging by working on some small but interesting part ofthe problem for the first nine weeks, then finishing the restin the last week, in two or three 50-hour marathons. This notonly impresses the hell out of his manager, who was despairingof ever getting the project done on time, but creates aconvenient excuse for not doing the documentation. Ingeneral:

No Real Programmer works 9 to 5 (unless it's the ones atnight).

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. Hedoes, however, know the entire ASCII (or EBCDIC) code table.

Real Programmers don't know how to cook. Grocery storesaren't open at three in the morning. Real Programmers surviveon Twinkies and coffee.

THE FUTURE

What of the future? It is a matter of some concern to RealProgrammers that the latest generation of computer programmersare not being brought up with the same outlook on life astheir elders. Many of them have never seen a computer with afront panel. Hardly anyone graduating from school these dayscan do hex arithmetic without a calculator. College graduatesthese days are soft - protected from the realities ofprogramming by source level debuggers, text editors that countparentheses, and "user friendly" operating systems. Worst ofall, some of these alleged "computer scientists" manage to getdegrees without ever learning Fortran! Are we destined tobecome an industry of Unix hackers and Pascal programmers?

From my experience, I can only report that the future isbright for Real Programmers everywhere. Neither OS 370 norFortran show any signs of dying out, despite all the effortsof Pascal programmers the world over. Even more subtletricks, like adding structured coding constructs to Fortranhave failed. Oh sure, some computer vendors have come outwith Fortran 77 compilers, but every one of them has a way ofconverting itself back into a Fortran 66 compiler at the dropof an option card - to compile DO loops like God meant them tobe.

Even Unix might not be as bad on Real Programmers as it oncewas. The latest release of Unix has the potential of anoperating system worthy of any Real Programmer - two differentand subtly incompatible user interfaces, an arcane andcomplicated teletype driver, virtual memory. If you ignorethe fact that it's "structured", even 'C' programming can beappreciated by the Real Programmer: after all, there's no typechecking, variable names are seven (ten? eight?) characterslong, and the added bonus of the Pointer data type is thrownin - like having the best parts of Fortran and assemblylanguage in one place. (Not to mention some of the morecreative uses for #define.)

No, the future isn't all that bad. Why, in the past fewyears, the popular press has even commented on the bright newcrop of computer nerds and hackers ([7] and [8]) leavingplaces like Stanford and M.I.T. for the Real World. From allevidence, the spirit of Real Programming lives on in theseyoung men and women. As long as there are ill-defined goals,bizarre bugs, and unrealistic schedules, there will be RealProgrammers willing to jump in and Solve The Problem, savingthe documentation for later. Long live Fortran!

ACKNOWLEGEMENT

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

REFERENCES

[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", IEEETrans. Prof. Commun., Vol. PC-23, No. 4, Dec. 4, 1980.

[4] Finseth, C., "Theory and Practice of Text Editors - or - aCookbook 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 theDoD", 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 2116:55:16 1982.

Ed Post, "Real Programmers Don't Use Pascal", DATAMATION, July1983, pp. 263-265 (Readers' Forum).