369 lines
24 KiB
Plaintext
369 lines
24 KiB
Plaintext
![]() |
|
|||
|
(REALMEN.DOC)
|
|||
|
|
|||
|
REAL PROGRAMMERS DON'T WRITE PASCAL
|
|||
|
|
|||
|
Back in the good ole days -- the "Golden Era" of computers, it was easy
|
|||
|
to seperate the real 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
|
|||
|
who didn't. A real computer programmer said things like:
|
|||
|
|
|||
|
DO 10 I=1,10
|
|||
|
and:
|
|||
|
ABEND
|
|||
|
|
|||
|
They talked in capital letters, you understand. 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 understand their very own personal computer. The Real Programmer
|
|||
|
is in danger of becoming extinct, of being replaced by high-school students
|
|||
|
with TRS-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 those kids someting to aspire to -- a role model,
|
|||
|
a Father Figure. It will also help to explain to the employers of Real
|
|||
|
Programmers why it would be a mistake to replace the Real Programmers on their
|
|||
|
staff with a 12-year old Pac-Man player (at very 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
|
|||
|
call me by name, pronouncing it "Veert", or you call call me by value,
|
|||
|
"Worth"." One can tell immediately from this comment that Nicklaus Wirth is a
|
|||
|
Quiche Eater. The only parameter passing mechanism that Real Programmers
|
|||
|
endorse is "call by value-return", as implemented in the IBM/370 FORTRAN G and
|
|||
|
H compilers. Real Programmers don't need all those 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, all those structures can be simulated, when
|
|||
|
necessary, by using assigned GOTO's.
|
|||
|
|
|||
|
Data Structures have also gotten a lot of press lately. Abstract Data
|
|||
|
Types, Structures, Pointers, Lists, and Strings have become popular in certain
|
|||
|
circles. Nicklaus Wirth (the aforementioned Quiche Eater) actually managed to
|
|||
|
write an entire book (2) contending that you could write 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, Structrures,
|
|||
|
Sets -- they are all just special cases of Arrays and con be treated that way
|
|||
|
just as easily without messing up your programming 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 does the Real Programmer use? CP/M? God
|
|||
|
forbid -- CP/M, after all, is basically a toy operating system. Even little
|
|||
|
old ladies and grade school students can use and understand 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 the JCL manual.
|
|||
|
A great programmer can write JCL without refering to the JCL manual at all. A
|
|||
|
truly outstanding programmer can find bugs buried in a six-Megabyte core dump
|
|||
|
without using a hex calculator (I have actually seen this done).
|
|||
|
OS/370 is a truly remarkable operating system. It's possible to destroy
|
|||
|
days of work with a single misplaced space (actually, this is also true of
|
|||
|
UNIX), so alertness in the programming staff is encouraged. The best way to
|
|||
|
approach the system is through a keypunch. Some people claim that 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 his program
|
|||
|
destroyed the bootstrap. 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 best forgotten. Legend has
|
|||
|
it that Seymour Cray (who invented the Cray-1 supercomputer, and most of
|
|||
|
Control Data's computers) actually toggled the first operating system for the
|
|||
|
CDC-7600 in on the front panel from memory when it was first powered on.
|
|||
|
Seymour, needless to say, is a Real Programmer.
|
|||
|
One of my favorite Real Programmers was a systems programmer at 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 telephone, 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 telephone. The moral of the story: while a
|
|||
|
Real Programmer usually includes a keypunch and line printer 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 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 use a computer whose operating system is called SmallTalk, and would
|
|||
|
certainly never talk to the computer with a mouse.
|
|||
|
Some of the concepts in these Xerox editors have been incorporated into
|
|||
|
editors running on more reasonable operating systems -- EMACS and VI being
|
|||
|
two. The problem with these editors is that Real Programmers consider "what
|
|||
|
you see is what your get" is just as bad a concept in Text Editing as it is in
|
|||
|
women. No, the Real Programmer wants a "you asked for it, you got it" text
|
|||
|
editor -- complicated, cryptic, powerful, unforgiving, and 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 yuour 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 instead 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 anyone 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".
|
|||
|
|
|||
|
Here are some programming tools that Real Programmers <don't> use:
|
|||
|
|
|||
|
* FORTRAN preprocessors like MORTRAN and RATFOR. These are the
|
|||
|
Cuisinarts of programming -- great for making Quiche. See the
|
|||
|
comments 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 the EQUIVALENCE statement,
|
|||
|
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 the code
|
|||
|
locked up in a card file, because it implies that the owner cannot
|
|||
|
leave important programs unguarded (5).
|
|||
|
|
|||
|
THE REAL PROGRAMMER AT WORK
|
|||
|
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 should 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-1 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 programmed the computers on the Space Shuttle.
|
|||
|
* 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, a Real Programmer managed to tuck a pattern-matching
|
|||
|
program into a few hundred bytes of unused memory in the 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 80 +/- 3
|
|||
|
kilometers of the surface of Mars. Nobody is going to trust a Pascal program
|
|||
|
(or a Pascal Programmer for that matter) for navigation to those 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 Programmers' horizon.
|
|||
|
It seems that some highly placed Quiche Eaters at the Defense Department
|
|||
|
decided that all Defence programs should be written in some grand unified
|
|||
|
language called Ada ((C) DoD). For a while, it seemed that Ada was destined
|
|||
|
to become a language which 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 which the DoD adopted has
|
|||
|
engough interesting features to make it approachable -- it's incredibly
|
|||
|
complex, includes methods for messing with the operating system and
|
|||
|
rearranging memory, and Edger Dijkstra doesn't like it (6). Dijkstra, as I'm
|
|||
|
sure you know, was the author of "The Go To 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.
|
|||
|
Real Programmers might compromise their principles and work on something
|
|||
|
slightly more trivial that the destruction of life as we know it, providing
|
|||
|
there's enough money in it. There are several Real Programmers writing 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). Everybody at
|
|||
|
LucasFilms 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, mainly because nobody has found a
|
|||
|
use for Computer Graphics yet. On the other hand, all Computer Graphics
|
|||
|
programming is done in FORTRAN, so there are a fair number of people doing
|
|||
|
Graphics in order to avoid having to write COBOL programs.
|
|||
|
|
|||
|
THE REAL PROGRAMMER AT PLAY
|
|||
|
Generally, the Real Programmer plays the same way as he works -- with
|
|||
|
computers. The Real Programmer is constantly amazed that his employer
|
|||
|
actually pays him for what he would be doing for fun anyway (although he is
|
|||
|
careful not to express this opinion out loud). Ocassionally, a 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 a simulation 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.
|
|||
|
And 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.
|
|||
|
|
|||
|
THE REAL PROGRAMMER'S NATURAL HABITAT
|
|||
|
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 a Real Programmer on the staff, it's best
|
|||
|
to put him or her in an environment where they can actually get the work done.
|
|||
|
The typical Real Programmer lives in front of a computer terminal.
|
|||
|
Surrounding this terminal are:
|
|||
|
|
|||
|
* Listings of all the programs the Real Programmer has ever worked on,
|
|||
|
piled in roughly cronological order on every flat surface in the
|
|||
|
office.
|
|||
|
* Some half-dozen or so partly filled cups of cold coffee.
|
|||
|
Ocassionally there will be cigarrette butts floating in the coffee.
|
|||
|
In some cases, the cups will contain Orange Crush.
|
|||
|
* Unless the Real Programmer is very good, there will be copies of the
|
|||
|
OS JCL manual and the Principles of Operation open at some
|
|||
|
particularly interesting pages.
|
|||
|
* Taped to the wall is a line-printer Snoopy calandar for the year
|
|||
|
1969.
|
|||
|
* Strewn about the floor are several wrappers for peanut butter filled
|
|||
|
cheese bars -- of the type that are made pre-stale at the bakery so
|
|||
|
that 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 the flow-charting template, left there by
|
|||
|
the previous occupant of the office. Real Programmers write
|
|||
|
programs, not documentation -- leave that to maintenance people.
|
|||
|
|
|||
|
The Real Programmer is capable of working thirty, fourty, even fifty
|
|||
|
hours at a stretch, under intense pressure. In fact, the Real Programmer
|
|||
|
prefers it that way. Bad response time doesn't bother the Real Programmer --
|
|||
|
it provides the 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 fifty-hour marathons. This not only impresses the hell out of the Real
|
|||
|
Programmer's manager who was despairing of ever getting the project done on
|
|||
|
time, but also creates a convenient excuse for not doing the documentation.
|
|||
|
In general:
|
|||
|
|
|||
|
* No Real Programmer works nine to five (unless its the ones at night).
|
|||
|
* A Real Programmer might or might not know the name of their spouse.
|
|||
|
The Real Programmer does, however, know the entire EBCDIC (or ASCII)
|
|||
|
code table.
|
|||
|
* Real Programmers don't know how to cook. Grocery stores aren't open
|
|||
|
at three o'clock in the morning. Real Programmers survive on
|
|||
|
Twinkies and coffee.
|
|||
|
|
|||
|
THE FUTURE
|
|||
|
What of the future? It is a mattter 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" operationg 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 programming 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 it back to a FORTRAN-
|
|||
|
66 compiler at the drop of an option card -- to compile DO loops the way God
|
|||
|
intended.
|
|||
|
Even UNIX might not be as hard 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 drive, and virtual memory. If you ignore the
|
|||
|
fact that it's structured, even C programming can be appreciated by Real
|
|||
|
Programmers. 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 even talking about #define).
|
|||
|
No, the future isn't all that bad. Why, in the last 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 MIT for the Real World.
|
|||
|
From all evidence, the spirit of Real Programming lives on in these young men
|
|||
|
and women. As long as there are ill-defined goals, bizarre bugs, and
|
|||
|
unrealistic schedules, there will be Real Programmers willing to jump in and
|
|||
|
Solve the Problem, saving the documentation for later. Long live FORTRAN!
|
|||
|
|
|||
|
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) Xerox PARC editors . . .
|
|||
|
(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, page 110
|
|||
|
(6) Dijkstra, E. <On the GREEN Language Submitted to the DoD>, Sigolan
|
|||
|
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
|
|||
|
|
|||
|
|
|||
|
|