mirror of
https://github.com/opsxcq/mirror-textfiles.com.git
synced 2025-08-26 23:24:26 +02:00
563 lines
26 KiB
Plaintext
563 lines
26 KiB
Plaintext
Real Programmers Don't Use Pascal
|
||
|
||
Ed Post
|
||
Tektronix
|
||
|
||
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 call me by name, pronouncing it 'Virt', or
|
||
call be 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 like 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 acounting (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, 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
|
||
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. 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 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 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 six-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 Timesharing 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].
|
||
|
||
|
||
|
||
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 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". 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.
|
||
|
||
|
||
THE REAL PROGRAMMER AT PLAY
|
||
---------------------------
|
||
|
||
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 11x14 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 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 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 lineprinter Snoopy calendar
|
||
of 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-stuffed 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 the 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].
|
||
|
||
* Real Programmers might or might not know their
|
||
spouse's name. They do, 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.
|
||
|
||
|
||
|
||
THE FUTURE
|
||
----------
|
||
|
||
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
|
||
as 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, and 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!
|
||
|
||
|
||
ACKNOWLEGEMENT
|
||
--------------
|
||
|
||
I would like to thank Jan E., Dave S., Rich G., Rich
|
||
E., for their help in characterizing the Real Programmer,
|
||
Kathy E. for putting up with it, and atd!avsdS:mark for the
|
||
initial inspiration.
|
||
|
||
[DEC hacker note: this came from a paper that surfaced
|
||
in Bedford, unsigned. The author apparently is a Unix
|
||
hacker (note the node name). Does anyone know where this
|
||
came from?]
|
||
|
||
|
||
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",
|
||
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/PM-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
|
||
|
||
|