Real Programmers Don't Use PASCAL Back in the good old days -- the "Golden Era" of computers, it was easy to separate the men from the boys (some- times 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" (theyactually 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). LANGUAGES 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 pronounceyourname?". Hereplied, "Youcan either call me by name, pronouncing it 'Veert', or call me by value, 'Worth'." One cantellimmediatelyfrom this comment that Nicklaus Wirth is a Quiche Eater. The only parameter passing mechanism endorsed by Real Programmersis call-by-value-return,as implemented in the IBM/370 FORTRAN G and H compilers. Real programmers don'tneedallthese abstractconceptstogettheirjobsdone--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 itatall) in FORTRAN. * Real Programmers do Artificial Intelligence programs in FORTRAN. If you can't do it in FORTRAN, do it inassemblylanguage. Ifyoucan'tdoitin assembly language, it isn't worth doing. STRUCTURED PROGRAMMING The academics in computer science have gotten intothe "structuredprogramming"rutover the past several years. They claim that programs are more easily understoodifthe programmerusessome special language constructs and techniques. They don't all agree on exactly which constructs, of course,andthe examples they use to show their particular point of view invariablyfitonasinglepageofsome obscure journal or another -- clearly not enough of an example to convince anyone. When I got out of school, Ithought Iwasthebestprogrammer in the world. I could write an unbeatable tit-tac-toe program, use five differentcomputer languages,andcreate1000lineprogramsthatWORKED. (Really!) Then I got out into the Real World. My firsttask inthe Real World was to read and understand a 200,000 line FORTRAN program, then speed it up by a factoroftwo. Any Real Programmer will tell you that all the Structured Coding in the world won't help you solve a problem like that --it takesactualtalent. Some quick observations on Real Programmers and Structured Programming: * Real Programmers aren't afraid to use GOTOs. * Real Programmers can writefivepagelongDOloopswithoutgetting confused. * Real Programmers like Arithmetic IF statements --theymake the code more interesting. * Real Programmers write self-modifying code,especiallyifthey cansave20nanoseconds in the middle of atight loop. * Real Programmers don't need comments--thecodeisobvious. * Since FORTRAN doesn't have a structured IF, REPEAT...UNTIL,orCASE statement, Real Programmers don't haveto worry about not using them. Besides,theycanbesimulated when necessary using assigned GOTOs. Data structures have also gotten a lot of press lately. Abstract DataTypes,Structures,Pointers,Lists,and Strings have become popular in certain circles. Wirth(the above-mentionedQuiche Eater) actually wrote an entire book [2] contending that you could write a program based ondata structures,insteadoftheother way around. As all Real Programmers know, the onlyusefuldatastructureisthe Array. Strings,Lists,Structures,Sets -- these are all special cases of arrays and can be treated that way justas easilywithout messing up your programming language with all sorts of complications. The worstthingaboutfancydata 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. OPERATING SYSTEMS What kind of operating system is used byaRealProgrammer? CP/M? God forbid -- CP/M, after all, is basically a toy operating system. Even little oldladiesandgrade school students can understand and use CP/M. Unix is a lot more complicated of course -- the typical Unixhackernevercanremember what the PRINT command is called this week -- but when it gets right down to it,Unix isaglorified video game. People don't do Serious Work on Unix systems: they send jokes around the worldonUUCP-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 JCLwithoutreferringtothe manual at all. A truly out- standing programmer can find bugs buriedina6megabyte coredumpwithout using a hex calculator. (I have actually seen this done.) OS is a truly remarkable operating system. It's possibletodestroy days of work with a single misplaced space, so alertness in the programmingstaffisencouraged. The best way to approach the system is through a keypunch. Some people claim there is a Time Sharingsystemthatrunson OS/370, butaftercarefulstudyIhavecometothe conclusion that they were mistaken. PROGRAMMING TOOLS What kind of toolsdoesaRealProgrammeruse?In theory,aReal Programmer could run his programs by keying them into the front panel of the computer. Back in thedays whencomputershadfrontpanels,this was actually done occasionally. Your typical Real Programmer knewtheentire bootstraploaderby memory in hex, and toggled it in when- ever 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 itto,or remembersthingslongafterthey'rebetterforgotten.) Legend has it that Seymour Cray,inventoroftheCrayI supercomputer and most of Control Data's computers, actually toggled the first operating system for the CDC7600 in on the frontpanelfrom memory when it was first powered on. Sey- mour, needless to say, is a Real Programmer. One of my favorite Real Programmers was a systemsprogrammerforTexas Instruments. One day, he got a long distance call from a user whose system had crashed in themiddleofsavingsome important work. Jim was able to repair the damage over the phone, getting theusertotogglein diskI/Oinstructions at the front panel, repairing system tables in hex,readingregistercontentsbackoverthe phone. The moral of this story: while a Real Programmer usually includes a keypunch and lineprinter in his toolkit,he cangetalongwithjust a front panel and a telephone in emergencies. In some companies, text editing no longerconsistsof tenengineersstandingin line to use an 029 keypunch. In fact, the buildingIworkindoesn'tcontainasingle keypunch. TheRealProgrammer in this situation has to do his work with a "text editor" program. Mostsystemssupply several text editors to select from, and the Real Programmer must be careful topickonethatreflectshispersonal style. Many people believe that the best text editors in the world were written at Xerox Palo AltoResearchCenterfor useontheir Alto and Dorado computers [3]. Unfortunately, no Real Programmer would ever use a computer whose operating systemis called SmallTalk, and would certainly not talk to the computer with a mouse. Some of the concepts in these Xerox editorshavebeen incorporatedintoeditors running on more reasonably named operating systems -- EMACS and VIbeingtwo. Theproblem withtheseeditors is that Real Programmers consider "what you see is what you get" to be just as bad a concept in Text Editorsasit 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 sequencemore 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 whiletalking withTECO will probably destroy your program, or even worse -- introduce subtle and mysterious bugs inaonceworking subroutine. For this reason,RealProgrammersarereluctantto actuallyedit a program that is close to working. They find itmucheasiertojustpatchthebinaryobjectcode directly,using a wonderful program called SUPERZAP (or its equivalent on non-IBM machines). Thisworkssowellthat many working programs on IBM systems bear no relation to the original FORTRAN code. In many cases,theoriginalsource codeisnolongeravailable. When it comes time to fix a program like this, no manager would eventhinkofsending anythinglessthanaReal Programmer to do the job -- no Quiche Eating structured programmer would even know where to start. Thisiscalled"jobsecurity". Some programming tools NOT used by Real Programmers: * FORTRAN preprocessorlikeMORTRANandRATFOR. The Cuisinartsofprogramming -- great for making Quiche. See comments above on structured programming. * Source language debuggers. RealProgrammerscanreadcore dumps. * Compilerswitharrayboundschecking. Theystiflecreativity,destroymostof the interesting uses forEQUIVALENCE, andmakeitimpossibletomodifytheoperatingsystemcode with negative subscripts. Worstof all, bounds checking is inefficient. * Source code maintenancesystems. ARealProgrammerkeepshiscodelockedup in a card file, because itimplies that its owner cannot leave his importantprograms unguarded [5]. THE REAL PROGRAMMER AT WORK Where does the typical Real Programmer work? Whatkind ofprogramsareworthyofthe efforts of so talented an individual? You can be sure that no real Programmer would be caughtdeadwriting accounts-receivable programs in COBOL, or sorting mailing lists for People magazine. ARealProgrammerwantstasksof earth-shaking importance (literally!). * Real Programmers work for Los AlamosNationalLaboratory,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 ofRealProgrammersworkingfor NASA that our boys got to themoon and back before the Russkies. * The computers in the Space Shuttle wereprogrammedbyReal Programmers. * Real Programmers are at work for Boeingdesigningtheoperating systems for cruise missiles. Some of the most awesome Real Programmers ofallwork at the Jet Propulsion Laboratory in California. Many of them know the entire operating system of the Pioneer andVoyager spacecraftbyheart. Witha combination of large ground- based FORTRAN programs and smallspacecraft-basedassembly languageprograms,they are able to do incredible feats of navigation and improvisation -- hittingten-kilometerwide windowsatSaturnaftersix years in space, repairing or bypassing damaged sensor platforms, radios,andbatteries. Allegedly,oneRealProgrammer managed to tuck a pattern- matching program into a few hundred bytes ofunusedmemory 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 gravityassisttrajectory past Mars on the way to Jupiter. This trajectory passes within 80 +/-3kilometersofthe surfaceofMars. Nobody is going to trust a PASCAL program (or PASCAL programmer) for navigation to these tolerances. As you can tell, many of the world'sRealProgrammers workfor the U.S.Government -- mainly the Defense Department. This is as it should be. Recently, however,ablack cloudhasformed on the Real Programmer horizon. It seems that some highly placed Quiche Eaters at the Defense Departmentdecided that all Defense programs should be written in some grand unified language called "ADA" ((r), DoD). Fora while,it seemed that ADA was destined to become a language that went against all the precepts of Real Programming --a languagewith structure, a language with data types, strong typing, and semicolons. In short,alanguagedesignedto cripplethecreativityofthetypicalReal Programmer. Fortunately,thelanguageadoptedbyDoD has enough interesting features to make it approachable -- it's incredibly complex, includes methods for messing with theoperatingsystemandrearrangingmemory,andEdsgar Dijkstra doesn't like it [6]. (Dijkstra, as I'm sureyouknow,was theauthor of "GOTOs Considered Harmful" -- a landmark work in programming methodology, applauded by PascalProgrammers andQuiche 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. Thereareseveral Real Programmers building video games at Atari, for example. (But not playing them -- a Real Programmerknowshow to beat the machine every time: no challenge in that.) Everyone working at LucasFilm is aRealProgrammer. (It would be crazy to turn down the money of fifty mil- lion Star Trek fans.) The proportion of Real Programmersin ComputerGraphicsissomewhat 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 people doing Graphicsinorderto avoid having to write COBOL programs. THE REAL PROGRAMMER AT PLAY Generally, the Real Programmer plays thesamewayhe works--withcomputers. He is constantly amazed that his employer actually pays him to do what he would be doingfor fun anyway (although he is careful not to express this opinion out loud). Occasionally, the Real Programmerdoesstep outoftheoffice 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 theonesinthecornertalking about operating system security and howto get around it. * At a football game, the Real Programmer is the one com-paringthe plays against his simulations printed on 11by 14 fanfold paper. * At the beach, the Real Programmer istheonedrawingflowcharts in the sand. * A Real Programmer goes to discostowatchthelightshows. * At a funeral, the Real Programmeristheonesaying"PoorGeorge. And he almost had the sort routine working before the coronary." * In a grocery store, the Real Programmer is the onewhoinsistsonrunningthecans past the laser checkoutsscanner himself, because he never could trustkeypunchoperators to get it right the first time. THE REAL PROGRAMMER'S NATURAL HABITAT What sort of environment does the Real Programmer functionbestin? Thisisanimportantquestionfor the managers of RealProgrammers. Consideringtheamountof moneyitcoststo keep one on the staff, it's best to put him (or her) in an environment where hecangethiswork done. The typical Real Programmer lives in frontofacomputer terminal. Surrounding this terminal are: * Listings of all programs the Real Programmerhaseverworkedon,piledinroughlychronological order onevery flat surface in the office. * Some half-dozen or so partly filled cups ofcoldcoffee Occasionally, there will be cigarette butts floating in the coffee In some cases, the cups will containOrange Crush * Unless he is very good, there will be copies of theOSJCL manual and the Principles of Operation open to someparticularly interesting pages * Taped to the wall is a line-printer Snoopy calendar forthe year 1969 * Strewn about the floor are several wrappers forpeanutbutterfilledcheesebars-- the type that are madeprestale at the bakery so theycan'tgetanyworsewhile waiting in the vending machine * Hiding in the top left-hand drawer ofthedeskisastash of double-stuff Oreos for special occasions * Underneath the Oreos is a flow-charting template,lefttherebythepreviousoccupant of the office (RealProgrammers write programs,notdocumentationLeavethat to the maintenance people) The Real Programmer is capable of working 30, 40,even 50hoursat a stretch, under intense pressure In fact, he prefers it that way Bad response timedoesn'tbotherthe RealProgrammer-- it gives him a chance to catch a little sleep between compiles Ifthereisnotenoughschedule pressureontheRealProgrammer, he tends to make things more challenging by working on somesmallbutinteresting part of the problem for the first nine weeks, then finishing therestinthelastweek,intwoorthree50-hour marathonsThisnotonlyinpressesthehell out of his manager, who was despairing of ever getting the project done ontime,but creates a convenient excuse for not doing the documentation In general: * No Real Programmer works 9 to 5 (Unless it's theonesat night) * Real Programmers don't wear neckties * Real Programmers don't wear high heeled shoes * Real Programmers arrive at work in time for lunch * A Real Programmer might or might notknowhiswife'snameHedoes,however,knowtheentire ASCII (orEBCDIC) code table * Real Programmers don't know how to cook Grocery storesaren'topenat three in the morning Real Programmerssurvive on Twinkles and coffee THE FUTURE What of the future? It is a matter of someconcernto Real Programmers that the latest generation of computer programmers are not being brought up with the sameoutlookon lifeastheirelders Many of them have never seen a computer with a frontpanelHardlyanyonegraduatingfrom schoolthesedays 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"operatingsystemsWorst 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 thefuture isbrightforReal Programmers everywhere Neither OS/370 nor FORTRAN show any signs of dyingout,despiteallthe effortsofPascalprogrammerstheworld over Even more subtle tricks, like adding structured codingconstructsto FORTRANhavefailed Oh sure, some computer vendors have come out with FORTRAN 77 compilers, but everyoneofthem hasaway of converting itself back into a FORTRAN 66 compiler at the drop of an option card -- to compileDOloops like God meant them to be Even Unix might not be as bad on Real Programmers as it oncewas The latest release of Unix has the potential of an operating system worthy of anyRealProgrammer--two different and subtly incompatible user interfaces, an arcane and complicated teletypedriver,virtualmemoryIfyou ignore the fact that it's "structured", even 'C' programming can beappreciatedbytheRealProgrammer:afterall, there'snotypechecking,variable names are seven (ten? eight?) characters long, and the added bonus of thePointer data type is thrown in -- like having the best parts of FORTRAN and assembly language in one place (Nottomention some of the more creative uses for #define) No, the future isn't all that badWhy,inthepast fewyears,thepopularpresshaseven commented on the bright new crop of computer nerds and hackers ([7] and[8]) leavingplaces like Stanford and MIT for the Real World >From all evidence, the spirit of Real Programmingliveson intheseyoungmenand womenAs long as there are ill- defined goals,bizarrebugs,andunrealisticschedules, therewill be Real Programmers willing to jump in and Solve The Problem, saving the documentation for laterLonglive FORTRAN! ACKNOWLEDGEMENT I would like to thank Jan E, Dace S, Rich G, Rich E fortheirhelpincharacterizingtheRealProgrammer, Heather B for the illustration, KathyEforputtingup with it, and atd!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 + Datastructures = Programs, Prentice Hall, 1976 [3] Xerox PARC editors [4] Finseth, C, Theory and Practice of Text Editors - or - a Cookbook for an EMACS, BS Thesis, MIT/LCS/TM-165, Massachusetts Institute of Technology,May 1980 [5] Weinberg, G, The Psychology of Computer Programming,New York, Van Nostrabd Reinhold, 1971, page 110 [6] Dijkstra, E, On the GREEN Language Submitted to the DoD,Sigplan notices, Volume 3, Number 10, October 1978 [7] Rose, Frank, Joy of Hacking, Science 82, Volume 3, Number 9,November 1982, pages 58 - 66 [8] The Hacker Papers, Psychology Today, August 1980