1
For my friend, John L. Joseph, who
provided much of the inspiration for
this book.
2
Frontispiece
Ancient likeness of the ninth immortal
of computer programming. He is
shown with the traditional lotus (which
symbolizes project planning), crane
(assembly code), jackal (job control
language), and floppy disk (file man-
agement system). He is suspended
between earth and sky, meditating on
the contents of the cosmic Q-Register.
Above him are pictured flitting bats,
which represent the distractions of the
material world. Below him, the primor-
dial dragon of chaos gives birth to the
mystery of Tao.
3
Preface
The field of compuarcheology is suf-
ficiently new that even an amateur like
myself can sometimes stumble upon
significant discoveries. Several years
ago, as I was making a somewhat des-
ultory search through a pile of obsolete
punch cards, I discovered what ap-
peared to be a set of coded bit-map
images. The images were sandwiched
among thousands of obsolete RPG
programs and I wouldn’t have given
them a second glance if it hadn’t been
for a hand-written note on one of the
cards saying: «Destroy after proces-
sing
4
This quite naturally piqued my interest
and I was determined to discover the
contents of the mysterious card pack. It
was clear from the frist that the images
had been scrambled and encrypted, but
with perseverence (as well as hundreds
of hours of raw CPU time), I was fin-
ally able to produce a rough outline of
the first image, which is reproduced at
the beginning of Book One.
But the decryption of the images turned
out to be the simplest part of the project.
The manuscript was in an unfamiliar
dialect and had to be transcribed before
any realistic translation could be at-
tempted. As this effort proceeded, it
5
became clear to me that I was dealing
not with a simple set of test images (as
I had originally believed), but the legen-
dary «Tao of Programming» itself.
It is difficult to describe my excitement
at this revelation. Though I had cer-
tainly heard of the «Tao of Program-
ming», I had never seen a copy of the
work nor met anybody who possessed
one. I had heard many times about how
the «Tao of Programming» had a pro-
found, if covert, effect upon the early
development of computers. According
to these legends, the «Tao of Program-
ming» represented the first attempt to
treat the art of programming as an
6
organic whole. As such it was vio-
lently opposed by both the academic
and business communities, who viewed
it as a threat tothe established order of
things. The «Tao of Programming»
was forced underground, circulating
among select programmers and then
only after rigorous initiations.
Eventually, this so-called «Integration
Sect» became so powerful that it could
no longer remain clandestine. The
persecutions that followed (often re-
ferred to as «The Great Lay-Off») re-
sulted not only in the destruction of the
sect but it was assumed) the loss of
7
the esoteric literature that comprised
the sect’s inner teachings.
The truth in these legends is impossible
to verify and thus should be discounted
as mere colorful tales, more the prov-
ince of the anthropologist than the ser-
ious compuarcheologist. But now that
a manuscript has finally surfaced, it
may be possible to separate the truth
from the myth.
The origins of the «Tao of Program-
ming» are lost in the mists of time.
From internal references we know that
certain passages can be dated from after
the invention of the integrated circuit.
But more accurate placing of the work
8
will have to wait until the full force of
scholarship has been turned upon this
hitherto-unknown classic.
The authorship of the «Tao of Program-
ming» also remains a mystery. Tradition
assigns certain portions of the text to
Yong Yo Sef of the Sixth See Pee dy-
nasty. Other scholars (I shall name no
names) have somehow managed to con-
clude that the work is a mere compila-
tion of tales whose authorship can never
be determined. However, all agree that
the profundity of the work is clearly of
such magnitude that the existence of the
author is a trivial issue at best.
9
Perhaps these controversies can be
cleared up now that the «Tao of Pro-
gramming» is about to be published.
If so, then the effort that I have put into
preparing the manuscript will not have
been in vain. However, I must confess
that it is with some hesitation that I put
forward a translation of this classic. All
translations are by definition interpre-
tive, and the flavor of the original can
only be echoed faintly and never re-
produced in its full richness.
The question has occasionally come up
concerning my own beliefs. I hereby
state unequivocally that while I respect
the tradition that the «Tao of Program-
ming» represents, I would never adhere
to the more radical doctrines that it con-
10
tains. In particular, I find the attitude of
the text to management and corporations
completely reprehensible, though per-
haps understandable given the political
climate of the times.
With no further ado or further non-ado,
I present my humble rendition of the
«Tao of Programming». Those who
understand the true nature of Tao will,
I trust, be amused by my presumption.
Geoffrey James
Los Angeles, 1986
Table of Contents
Book One
The Silent Void 1
Book Two
The Ancient Masters 13
Book Three
Design 29
Book Four
Coding 51
Book Five
Maintenance 71
Book Six
Management 85
Book Seven
Corporate Wisdom 101
Book Eight
Hardware and Software 121
Book Nine
Epilogue 143
THE SILENT VOID
Book One
Thus spake the master programmer:
«When you have learned to snatch the
error code from the trap frame, it will
be time for you to leave.»
1.1
Something mysterious is formed, born
in the silent void. Waiting alone and
unmoving, it is at once still and yet in
constant motion. It is the source of all
programs. I do not know its name, so
I will call it the Tao of Programming.
If the Tao is great, then the operating
system is great. If the operating system
is great, then the compiler is great. If
the compiler is great, then the applica-
tion is great. The user is pleased
and there is harmony in the world.
The Tao of Programming flows far
away and returns on the wind of
morning.
1.2
The Tao gave birth to machine
language. Machine language gave
birth to the assembler.
The assembler gave birth to the com-
piler. Now there are ten thousand
languages.
Each language has its purpose, however
humble. Each language expresses the
yin and yang of software. Each
language has its place within the Tao.
But do not program in Cobol if you can
avoid it.
1.3
In the beginning was the Tao.
The Tao gave birth to Space and Time.
Therefore Space and Time are the Yin
and Yang of Programming.
Programmers that do not comprehend
Tao are always running out of time and
space for their programs. Programmers
that comprehend Tao always have
enough time and space to accomplish
their goals.
How could it be otherwise?
1.4
The wise programmer is told about Tao
and follows it. The average programmer
is told about Tao and searches for it.
The foolish programmer is told about
Tao and laughs at it.
If it were not for laughter, there would
be no Tao.
The highest sounds are hardest to hear.
Going forward is a way to retreat.
Great talent shows itself late in life.
Even a perfect program still has bugs.
The Tao is hidden beyond all
understanding.
THE ANCIENT MASTERS
Book Two
Thus spake the master programmer:
«agter three days without programming,
life becomes meaningless.»
2.1
The programmers of old were myster-
ious and profound. We cannot fathom
their thoughts, so all we can do is
describe their appearance.
Aware, like a fox crossing the water.
Alert, like a general on the battlefield.
Kind, like a hostess greeting her guests.
Simple, like uncarved blocks of wood.
Opaque, like black pools in darkened
caves.
Who can tell the secrets of their hearts
and minds?
The answer exists only in Tao.
2.2
Grand Master Turing once dreamed that
he was a machine. When he awoke he
exclaimed:
«I don’t know whether I am Turing
dreaming that I am a machine, or a
machine dreaming that I am Turing!»
2.3
A programmer from a very large com-
puter company went to a software
conference and then returned to report
to his manager, saying: «What sort of
programmers work for other computer
companies? They behaved badly and
were unconcerned with appearances.
Their hair was long and unkempt and
their clothes were wrinkled and old.
They crashed our hospitality suite and
they made rude noises during my presen-
tation.»
The manager said: «I should never have
sent you to the conference. Those pro-
grammers live beyond the physical world,
They consider life absurd, an accidental
coincidence. They come and go without
knowing limitations. Without a care, they
live only for their programs. Why should
they bother with social conventions?
They are alive within the Tao.»
2.4
A novice asked the master: «Here is a
programmer who never designs, docu-
ments, or tests his programs. Yet all
who know him consider him the one
of the best programmers in the world.
Why is this?»
The master replied: «That programmer
has mastered the Tao. He has gone
beyond the need for design; he does not
become angry when the system crashes,
but accepts the universe without con-
cern. He has gone beyond the need for
documentation; he no longer cares if
anyone sees his code. He has gone
beyond the need for testing; each of his
programs are perfect within themselves,
serene and elegant, their purpose
self-evident.
» Truly, he has entered the mystery
of Tao.»
DESING
Book Three
Thus spake the master programmer:
«When the program is being tested, it is
too late to make desing changes.»
3.1
There was once a man who went to a
computer trade show. Each day as he
entered, the man told the guard at the
door:
«I am a great thief, renowned for my
feats of shoplifting. Be forewarned,
for this trade show shall not escape
unplundered.»
This speech disturbed the guard greatly,
because there were millions of dollars
of computer equipment inside, so he
watched the man carefully. But the man
merely wandered from booth to booth,
humming quietly to himself.
When the man left, the guard took him
aside and searched his clothes, but
nothing was to be found.
On the next day of the trade show, the
man returned and chided the guard,
saying: «I escaped with a vast booty
yesterday, but today will be even
better.» So the guard watched him ever
more closely, but to no avail.
On the final day of the trade show, the
guard could restrain his curiousity no
longer. «Sir Thief,» he said, «I am
so perplexed, I cannot live in peace.
Please enlighten me. What is it that
you are stealing?»
The man smiled. «I am stealing ideas,»
he said.
3.2
There was once a master programmer
who wrote unstructured programs. A
novice programmer, seeking to imitate
him, also began to write unstructured
programs. When the novice asked the
master to evaluate his progress, the
master criticized him for writing un-
structured programs, saying: «What
is appropriate for the master is not
appropriate for the novice. You must
understand Tao before transcending
structure.»
3.3
There was once a programmer who
was attached to the court of the
warlord of Wu. The warlord asked
the programmer: «Which is easier to
design: an accounting package or an
operating system?»
«An operating system,» replied the
programmer.
The warlord uttered an exclamation
of disbelief.
«Surely an accounting package is trivial
next to the complexity of an operating
system,» he said.
«Not so,» said the programmer, «when
designing an accounting package, the
programmer operates as a mediator
between people having different ideas:
how it must operate, how its reports
must appear, and how it must conform
to tax laws.
By contrast, an operating system is not
limited by outward appearances. When
designing an operating system, the
programmer seeks the simplest
harmony between machine and ideas.
This is why an operating system is
easier to design.»
The warlord of Wu nodded and smiled.
«That is all good and well,» he said,
«but which is easier to debug?»
The programmer made no reply.
3.4
A manager went to the master program-
mer and showed him the requirements
document for a new application. The
manager asked the master: «How long
will it take to design this system if I
assign five programmers to it?»
«It will take one year,» said the master
promptly.
«But we need this system immediately
or even sooner! How long will it take
if I assign ten programmers to it?»
The master programmer frowned.
«In that case, it will take two years.»
«And what if I assign a hundred
programmers to it?»
The master programmer shrugged.
«Then the design will never be
completed,» he said.
CODING
Book Four
Thus spake the master programmer:
«A well-written program is its own
heaven; a poorly-written program its
own hell.»
4.1
A program should be light and agile,
its subroutines connected like a string
of pearls. The spirit and intent of the
program should be retained throughout.
There should be neither too little nor
too much, neither needless loops nor
useless variables, neither lack of struc-
ture nor overwhelming rigidity.
A program should follow the ‘Law of
Least Astonishment’. What is this law?
It is simply that the program should
always respond to the user in the way
that astonishes him least.
A program, no matter how complex,
should act as a single unit. The program
should be directed by the logic within
rather than by outward appearances.
If the program fails in these require-
ments, it will be in a state of disorder
and confusion. The only way to correct
this is to rewrite the program.
4.2
A novice asked the master: «I have a
program that sometimes runs and
sometimes aborts. I have followed
the rules of programming, yet I am
totally baffled. What is the reason
for this?»
The master replied: «You are confused
because you do not understand Tao.
Only a fool expects rational behavior
from his fellow humans. Why do you
expect it from a machine that humans
have constructed? Computers simulate
determinism; only Tao is perfect.
The rules of programming are tran-
sitory; only Tao is eternal. Therefore
you must contemplate Tao beforeyou
receive enlightenment.
«But how will I know when I have
received enlightenment?» asked the
novice.
«Your program will then run correctly,»
replied the master.
4.3
A master was explaining the nature of
Tao to one of his novices. «The Tao is
embodied in all software — regardless
of how insignificant,» said the master.
«Is the Tao in a hand-held calculator?»
asked the novice.
«It is,» came the reply.
«Is the Tao in a video game?» continued
the novice.
«It is even in a video game,» said the
master.
«And is the Tao in the DOS for a
personal computer?»
The master coughed and shifted his
position slightly. «The lesson is over
for today,» he said.
4.4
Prince Wang’s programmer was coding
software. His fingers danced upon the
keyboard. The program compiled with-
out an error message, and the program
ran like a gentle wind.
«Excellent!» the Prince exclaimed,
«Your technique is faultless!»
«Technique?» said the programmer turn-
ing from his terminal, «What I follow is
Tao — beyond all techniques! When I
first began to program I would see be-
fore me the whole problem all in one
mass. After three years I no longer saw
this mass. Instead, I used subroutines.
But now, I see nothing. My whole
MAINTENANCE
Book Five
Thus spake the master programmer:
«Though a program be but three lines
long, someday it will have to be
maintained.»
5.1
A well-used door needs no oil on its
hinges.
A swift-flowing stream does not grow
stagnant.
Neither sound nor thoughts can travel
through a vacuum.
Software rots if not used.
These are great mysteries.
5.2
A manager asked a programmer how
long it would take him to the finish the
program on which he was working.
«I will be finished tomorrow,» the
programmer promptly replied.
«I think that you are being unrealistic,»
said the manager, «Truthfully, how
long will it take?»
The programmer thought for a moment.
«I have some features that I wish to
add. This will take at least two weeks,»
he finally said.
«Even that is too much to expect,» in-
sisted the manager, «I will be satisfied
if you simply tell me when the program
is complete.»
Theprogrammer agreed to this.
Several years later, the manager retired.
On the way to his retirement lunch, he
discovered the programmer asleep at his
terminal. He had been programming all
night.
5.3
A novice programmer was once as-
signed to code a simple financial
package.
The novice worked furiously for many
days, but when his master reviewed the
program, he discovered that it contained
a screen editor, a set of generalized
graphics routines, an artificial intel-
ligence interface, but not the slightest
mention of anything financial.
When the master asked about this, the
novice became indignant. «Don’t be
so impatient,» he said, «I’ll put in the
financial stuff eventually.»
5.4
Does a good farmer neglect a crop he
has planted?
Does a good teacher overlook even the
most humble student?
Does a good father allow a single child
to starve?
Does a good programmer refuse to
maintain his code?
MANAGEMENT
Book Six
Thus spake the master programmer:
«Let the programmers be many and
the managers few — then all will be
poroductive.»
6.1
When managers hold endless meetings,
the programmers write games. When
accountants talk of quarterly profits,
the development budget is about to be
cut. When senior scientists talk blue
sky, the clouds are about to roll in.
Truly, this is not the Tao of
Programming.
When managers make commitments,
game programs are ignored. When
accountants make long-range plans,
harmony and order are about to be
restored. When senior scientists
address the problems at hand, then
the problems will soon be solved.
Truly, this is the Tao of Programming.
6.2
Why are the programmers nonproduc-
tive?
Because their time is wasted in meet-
ings.
Why are the programmers rebellious?
Because the management interferes
too much.
Why are the programmers resigning
one by one?
Because they are burnt out.
Having worked for poor management,
they no longer value their jobs.
6.3
A manager was about to be fired, but
one of the programmers who worked
for him invented a new program that
became popular and sold well. As a
result of this, the manager retained
his job.
The manager tried to give the program-
mer a bonus, but the programmer
refused it, saying, «I wrote the program
because I thought it was an interesting
concept, and thus I expect no reward. «
The manager upon hearing this
remarked, «This programmer, though
he holds a position of small esteem,
understands well the proper duty
of an employee. Let us promote him
to the exalted position of management
consultant!»
But when told this, the programmer
once more refused, saying, «I exist so
that I can program. If I were promoted,
I would do nothing but waste every-
one’s time. Can I go now? I have
a program that I am working on.»
6.4
A manager went to his programmers
and told them: «As regards your work-
ing hours: you are going to have to
come in at nine in the morning and leave
at five in the afternoon.» At this, all of
them became angry and several resigned
on the spot.
So the manager said: «All right, in that
case you may set your own working
hours, as long as you finish your pro-
jects on schedule.» The programmers,
now satisfied, began to come in at noon
and work until the wee hours of the
morning.
CORPORATE WISDOM
Book Seven
Thus spake the master programer:
«You can demostrate a program for
an executive, but you can’t make him
computer literate.»
7.1
A novice asked the master: «In the east
there is a great tree-structure that men
call Corporate Headquarters’. It is
bloated out of shape with vice presi-
dents and accountants. It issues a
multitude of memos, each saying ‘Go
Hence!’ or ‘Go Hither!’ and nobody
knows what is meant. Every year new
names are put onto the branches, but all
to no avail. How can such an unnatural
entity continue to exist?»
The master replied: «You perceive this
immense structure and are disturbed that
it has no rational purpose. Can you not
take amusement from its endless
gyrations? Do you not enjoy the un-
troubled ease of programming beneath
its sheltering branches? Why then are
you bothered by its uselessness?»
7.2
In the east there is a shark which is
larger than all other fish. It changes into
a bird whose wings are like clouds
filling the sky. When this bird moves
across the land, it brings a message
from corporate headquarters. This
message it drops into the midst of the
programmers, like a seagull making
its mark upon the beach. Then the bird
mounts on the wind and, with the blue
sky at its back, returns home.
The novice programmer stares in won-
der at the bird, for he understands it
not. The average programmer dreads
the coming of the bird, for he fears its
message. The master programmer
continues to work at his terminal, for
he does not know that the bird has
come and gone.
7.3
The Magician of the Ivory Tower
brought his latest invention for the
master programmer to examine. The
magician wheeled a large black box
into the master’s office while the
master waited in silence.
«This is an integrated, distibuted, gen-
eral-purpose workstation,» began the
magician, «ergonomically designed with
a proprietary operating system, sixth
generation languages, and multiple
state-of-the-art user interfaces. It took
my assistants several hundred man
years to construct. Is it not amazing?»
The master raised his eyebrows slight-
ly. «It is indeed amazing,» he said.
«Corporate headquarters has com-
manded,» continued the magician,
«that everyone use this workstation
as a platform for new programs.
Do you agree to this?»
«Certainly,» replied the master, «I will
have it transported to the data center
immediately!» And the magician re-
turned to his tower, well pleased.
Several days later, a novice wandered
into the office of the master programmer
and said, «I cannot find the listing for
my new program. Do you know where
it might be?»
«Yes,» replied the master, «the listings
are stacked on the platform in the data
center.»
7.4
The master programmer moves from
program to program without fear. No
change in management can harm him.
He will not be fired, even if the project
is cancelled. Why is this? He is filled
with Tao.
HARDWARE AND SOFTWARE
Book Eight
Thus spake the master programmer:
«Without the wind, the grass does not
move. Without software, hardware is
useless.»
8.1
A novice asked the master: «I perceive
that one computer company is much
larger than all others. It towers above
its competition like a giant among
dwarfs. Any one of its divisions could
comprise an entire business. Why is
this so?»
The master replied: «Why do you ask
such foolish questions? That company
is large because it is large. If it only
made hardware, nobody would buy it.
If it only made software, nobody would
use it. If it only maintained systems,
people would treat it like a servant.
But because it combines all these
things, people think it one of the gods!
By not seeking to strive, it conquers
without effort.»
8.2
A master programmer passed a novice
programmer one day. The master noted
the novice’s preoccupation with a hand-
held computer game. «Excuse me», he
said, «may I examine it?»
The novice bolted to attention and hand-
ed the device to the master.»I see that
the device claims to have three levels of
play: Easy, Medium and Hard», said
the master. «Yet every such device has
another level of play, where the device
seeks not to conquer the human, nor to
be conquered by the human.»
«Pray, great master», implored the nov-
ice, «how does one find this mysterious
setting?»
The master dropped the device to the
ground and crushed it underfoot.
And suddenly the novice was enlight-
ened.
8.3
There was once a programmer who
worked upon microprocessors. «Look
at how well off I am here,» he said to a
mainframe programmer who came to
visit, «I have my own operating system
and file storage device. I do not have to
share my resources with anyone. The
software is self-consistent and easy-
to-use. Why do you not quit your
present job and join me here?»
The mainframe programmer then began
to describe his system to his friend,
saying: «The mainframe sits like an
ancient sage meditating in the midst
of the data center. Its disk drives
lie end-to-end like a great ocean of
machinery. The software is as
multifaceted as a diamond, and as
convoluted as a primeval jungle.
The programs, each unique, move
through the system like a swift-flowing
river. That is why I am happy where I
am.
The microprocessor programmer, upon
hearing this, fell silent. But the two
programmers remained friends until the
end of their days.
8.4
Hardware met Software on the road to
Changtse. Software said: «You are yin
and I am yang. If we travel together
we will become famous and earn vast
amounts of money.» And so they set
forth together, thinking to conquer
the world.
Presently they met Firmware, who was
dressed in tattered rags and hobbled
along propped on a thorny stick. Firm-
ware said to them: «The Tao lies beyond
yin and yang. It is silent and still as a
pool of water.
It does not seek fame, therefore nobody
knows its presence. It does not seek
fortune, for it is complete within itself.
It exists beyond space and time.»
Hardware and Software, ashamed,
returned to their homes.
EPILOGUE
Book Nine
Thus spake the master programmer:
«Time for you to leave.»
About The Author
Geoffrey James is a magna cum laude
graduate of the University of California
and has been a software engineer for a
major computer manufacturer since
1977.
In 1984 he received a technical excel-
lence award for the design and imple-
mentation of an advanced computer-
aided publishing system.
He is author of Enochian Evocation (a
translation / transcription of a 16th-
century proto-scientific manuscript) and
Document Databases (a comprehensive
study of automated publications meth-
odology). Document Databases is rec-
ognized as the outstanding text in the
field of online documentation and elec-
tronic publishing.
About The Book
We enjoyed making this book for you.
Our intention was to share with you a
few serious thoughts presented on soft
pillows of warm smiles. We hope you
enjoy them both. Write to us at Info-
Books and let us know.
The Tao of Programming was con-
ceived by the author while he was doing
Tai Chi, which he has practiced for over
four years. At the end of class it was
discussed with the Publisher, who was
just then beginning Tai Chi.
The text was electronically formatted
and adjusted on the Macintosh computer
and typeset on a LaserWriter, using
Times for the body text and Helvetica
for the running heads.