Donald Knuth
585
to put things together reliably in a larger system. That was definitely
different.
So that’s one important aspect, the idea of the abstractions that we have to
understand, the abstractions that allow us to deal with large systems and
still be pretty confident that we’re in control and we know what we’re
doing, even though they’re a mind-bogglingly complex things.
There are lots of other things that look like they’re important changes but
to me they don’t seem to make that much difference. These are the surface,
the different type of syntactic sugar and the different dialects of languages
that we have. There are many different flavors that appeal to different
personality types. Some people are more logical than I am, for example.
They really like to have lots of parentheses, and things matching up and
saying that, “I’m now going to start something,” and then at the end you say,
“I’m now going to finish it.” And that’s not as appealing to me. That’s not
the way I think. But that’s the way other people think and there’s no one
best way to think.
To me one of the most important revolutions in programming languages
was the use of pointers in the C language. When you have nontrivial data
structures, you often need one part of the structure to point to another
part, and people played around with different ways to put that into a higher-
level language. Tony Hoare, for example, had a pretty nice clean system but
the thing that the C language added—which at first I thought was a big
mistake and then it turned out I loved it—was that when
x is a pointer and
then you say,
x + 1, that doesn’t mean one more byte after x but it means
one more node after
x, depending on what x points to: if it points to a big
node,
x + 1 jumps by a large amount; if x points to a small thing, x + 1 just
moves a little. That, to me, is one of the most amazing improvements in
notation.
Seibel: So that’s certainly powerful compared to what preceded it. But
since then, a lot of people have decided that having raw pointers to memory
is pretty dangerous and that they’d rather have references that behave a lot
like pointers but without some of the dangers.
Knuth: Pointers have gone out of favor to the point now where I had to
flame about it because on my 64-bit computer that I have here, if I really