burned with disappointment. I really
felt a hot flash, I was so upset. It had to
look right, and it didn’t, at that time.
I’m happy to say that I open my books
now and I like what I see. Even though
they don’t match the 1968 book exactly, the way they differ are pleasing
to me.
What it was like writing teX.
Structured programming gave me a
different feeling from programming
the old way—a feeling of confidence
that I didn’t have to debug something
immediately as I wrote it. Even more
important, I didn’t have to mock-up
the unwritten parts of the program. I
didn’t have to do fast prototyping or
something like that, because when you
use structured programming methodology you have more confidence that
it’s going to be right, that you don’t
have to try it out first. In fact, I wrote all
of the code for TeX over a period of seven months, before I even typed it into a
computer. It wasn’t until March 1978
that I spent three weeks debugging everything I had written up to that time.
I found that writing software was
much more difficult than anything
else I had done in my life. I had to keep
so many things in my head at once. I
couldn’t just put it down and start
something else. It really took over my
life during this period. I used to think
there were different kinds of tasks:
writing a paper, writing a book, teaching a class, things like that. I could
juggle all of those simultaneously. But
software was an order of magnitude
harder. I couldn’t do that and still teach
a good Stanford class. The other parts
of my life were largely on hold, including The Art of Computer Programming.
My life was pretty much typography.
teX leads to a new way
of programming.
Literate programming, in my mind,
was the greatest spin-off of the TeX
project. I learned a new way to program.
I love programming, but I really love
literate programming. The idea of literate programming is that I’m writing
a program for a human being to read
rather than a computer to read. It’s
still a program and it’s still doing the
stuff, but I’m a teacher to a person. I’m
addressing my program to a thinking
being, but I’m also being exact enough
so that a computer can understand it
as well. Now I can’t imagine trying to
write a program any other way.
As I’m writing The Art of Computer
Programming, I realized the key to
good exposition is to say everything
twice: informally and formally. The
reader gets to lodge it in his brain in
two different ways, and they reinforce
each other. In writing a computer program, it’s also natural to say everything
in the program twice. You say it in English, what the goals of this part of the
program are, but then you say it in your
computer language. You alternate between the informal and the formal. Literate programming enforces this idea.
In the comments you also explain
what doesn’t work, or any subtleties.
You can say, “Now note the following.
Here is the tricky part in line 5, and
it works because of this.” You can explain all of the things that a maintainer
needs to know. All this goes in as part
of the literate program, and makes
the program easier to debug, easier to
maintain, and better in quality.
after teX, Don gets to go back
to mathematics.
We finished the TeX project; the climax was in 1986. After a sabbatical in
Boston I came back to Stanford and
plunged into what I consider my main
life’s work: analysis of algorithms.
That’s a very mathematical thing,
and so instead of having font design
visitors to my project, I had great algorithmic analysts visiting my project.
I started working on some powerful
mathematical approaches to analysis
of algorithms that were unheard of in
the 1960s when I started the field. Here
“at age 55 i
became ‘Professor
emeritus of the
art of computer
Programming,’
with a capital ‘t.’
i love that title.”
I am in math mode, and thriving on
the beauties of this subject.
One of the problems out there that
was fascinating is the study of random
graphs. Graphs are one of the main focuses of Volume 4, all the combinatorial algorithms, because they’re ubiquitous in applications.
frustrated with the rate of
progress, he “retires” to devote
himself to “the art.”
I wasn’t really as happy as I let on. I
mean, I was certainly enjoying the research I was doing, but I wasn’t making
any progress at all on Volume 4. I’m doing this work on random graphs, and
I’m learning all of these things. But at
the end of the year, how much more
had been done? I’ve still got 11 feet of
preprints stacked up in my closet that
I haven’t touched, because I had to put
that all on hold for the TeX project. I
figured the thing that I’m going to be
able to do best for the world is finishing The Art of Computer Programming.
The only way to do it was to stop being a professor full time. I really had
to be a writer full time. So, at age 55 I
became “Professor Emeritus of The
Art of Computer Programming,” with
a capital “T.” I love that title.
Don is a master at straddling
the path between engineering
and science.
I always thought that the best way to
sum up my professional work is that it
has been an almost equal mix of theory
and practice. The theory I do gives me
the vocabulary and the ways to do practical things that can make giant steps
instead of small steps when I’m doing
a practical problem. The practice I do
makes me able to consider better and
more robust theories, theories that
are richer than if they’re just purely
inspired by other theories. There’s
this symbiotic relationship between
those things. At least four times in my
life when I was asked to give a kind of
philosophical talk about the way I look
at my professional work, the title was
“Theory and Practice.” My main message to the theorists is, “Your life is
only half there unless you also get nurtured by practical work.”
Software is hard. My experience with
TeX taught me to have much more admiration for colleagues that are devot-