L Peter Deutsch
421
Deutsch: It’s changed enormously because the kinds of programs that I find
interesting have changed enormously. I think it’s fair to say that the
programs that I wrote for the first few years were just little pieces of code.
Over time I’ve considered the issues of how do you take a program that
does something larger and interesting and structure it and think about it,
and how do you think about the languages that you use for expressing it in a
way that manages to accomplish your goals of utility, reliability, efficiency,
transparency?
Now I’m aware of a much larger set of criteria for evaluating software. And
I think about those criteria in the context of much larger and more complex
programs, programs where architectural or system-level issues is where all
the hard work is. Not to say that there isn’t still hard work to be done in
individual algorithms, but that’s not what seems most interesting to me any
more—hasn’t for a long time.
Seibel: Should all programmers grow up to work at that level?
Deutsch: No. In fact, I was just reading that an old friend of mine from
Xerox PARC, Leo Guibas, just received some fairly high award in the field.
He has never really been a systems guy in the sense that I’ve been; he’s been
an algorithms guy—a brilliant one. He’s found a way to think about certain
classes of analysis or optimization algorithms in a way that’s made them
applicable to a lot of different problems, and that has yielded new tools for
working with those problems. So, it’s wonderful work. Programmers should
be able to grow up to be Leo Guibas, too.
There’s a parallel between architectural principles and the kinds of
algorithmic design principles that Leo and people like him use to address
these hard optimization and analysis problems. The difference is that the
principles for dealing with algorithmic problems are based a lot more
directly on 5,000 or10,000 years’ worth of history in mathematics. How we
go about programming now, we don’t have anything like that foundation to
build on. Which is one of the reasons why so much software is crap: we
don’t really know what we’re doing yet.
Seibel: So is it OK for people who don’t have a talent for systems-level
thinking to work on smaller parts of software? Can you split the