Collage 051 H u m o u r N e t 1995 Welcome to Collage 51 ... but first, a correction from Collage 50: Regarding our world-record-seeking heroine, who calculated that her 350 men will each receive a 104-second, uh, slot, and my claim that 104 seconds leaves only about 1.2 seconds for context switching (I'm using that term here because this Collage contains the next "Real Programmers Don't" installment) ... well, I realized last night that I did my subtraction backward, and she's actally coming up about 400 seconds SHORT with that estimate. And no one caught me on that ... you guys are spending so much time making sure that I'm numbering my Collages right that you're missing the really key stuff here! Anyway, it was pointed out that, even if Guinness & Co. doesn't buy into her world-record idea, she's sure to get a guest, uh, *slot* on Howard Stern ... And back to Collage 51: "Real Programmers, The Adventure Continues" (Part 2 of 3 ... ) - Vince Sabio HumourNet Moderator HumourNet@telephonet.com ____________________________________________________________________ Opener (above) Copyright 1995 by Vincent Sabio Permission is hereby granted to forward or post this "Collage"; please observe the guidelines stated at the end of the message. ____________________________________________________________________ SUBJ: Real Programmers, Part II: The Adventure Continues ... "Real Programmers Don't Use PASCAL" +------------------------------------------------------+ |Ed Post, "Real Programmers Don't Use Pascal", | |_DATAMATION_, July 1983, pp. 263-265 (Readers' Forum).| +------------------------------------------------------+ 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-80's. 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 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 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. 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 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 GOTO's. * 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. OPERATING SYSTEMS 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. PROGRAMMING TOOLS ---------------- 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]. ******************************************************************** Anyone Without a Sense of Humor Is At The Mercy of The Rest of Us. ******************************************************************** "HumourNet" is brought to you by Lyris -- an innovative new e-mail list server from The Walter Shelby Group, Ltd. For more information on Lyris, see . To subscribe to the "HumourNet" mailing list, send the following command to : subscribe HumourNet your_name, your_city, your_state or country where "your_name" is your real name, etc. If you run into problems, then either (1) send any message to for a more detailed set of instructions, (2) subscribe via Lyris's Web interface at , or (3) send a *detailed* description of the problem to . To unsubscribe, visit our Web interface at or refer to your Welcome message for detailed instructions. For instructions on contributing to HumourNet, send any message to . >>> Note: Attributions in Collage openers are to the contributors, not necessarily the authors. Authors' credits are included in the text wherever possible. <<< The HumourNet archives can be accessed via the Web and FTP: Web: FTP: Permission is granted to forward or post this Collage, provided that 1) the message is forwarded/posted in its ENTIRETY, from the line containing the Collage number and date to the end of this trailer, and 2) no fee is charged. There are "relaxed" forwarding/posting guidelines available; for a copy of them, send any message to , or refer to your Welcome message. ******************************************************************** "HumourNet" is a trademark of HumourNet Communications, Ltd. ********************************************************************