Seibel: That seems to be a bit of a theme: the pig-Latin spreadsheet, thenthis, and a hash table in COBOL for your profiler—is there a part of youthat just likes cutting against the grain?
Ingalls: I don’t feel like it’s against the grain, but whenever I have acomputing environment to play with, I like to try new things in it. That’swhat’s been so much fun about doing the Smalltalk systems I did. You startfrom pretty much scratch and your job is to figure out what to assembleand get working first that will help you to do the next step and build stuff upfrom there.
In these cases, it was a matter of getting outside the box. That’s a way ofasserting that you’ve mastered the thing—if you can do some things thatyou wouldn’t have thought you could do in it.
Seibel: Can you identify any big changes in the way you think aboutprogramming now?
Ingalls: That’s a good question. One thing is we’ve got lots of computercycles to spend. So I’m comfortable now, as the pejorative saying goes,pissing away cycles to get something done cleanly. But the basic thing hasn’tchanged for me at all, which is trying to get clear about what the kernel orkernels are that I have to work with and the goal that I’m trying to achieve.
It’s changed a little bit in that I’m no longer the quantum mechanic in thegroup that I work in. I’m more at a higher level—that just means that I’mspending a little bit more time on goals and politics than on code. It’s gotmore to do with creating a context. Until this later phase of my life, I’vebeen lucky to be in an existing context where I didn’t have to create it. Butevery once in a while I still get down and write serious code.
Seibel: I was looking at one of your papers from the ’70s about yourFortran profiler. In the preamble you were very enthusiastic about how thattool changed your programming from figuring out what you were going towrite, writing it, and debugging it, to figuring out what you were going towrite, writing a really simple version, profiling it, then optimizing it. Do youstill work that way?
Ingalls: I definitely go for effects first, bits on the screen or whatever it is,because that’s so motivating, and you often learn something new about whatyou had wanted to do just by getting a chance to glimpse where it’s going.
Then if profiling is what’s needed, you profile. Or it may turn out youweren’t doing the right thing—that wasn’t quite what you wanted to do, soyou changed the goals, or you change how you’re doing it. But when it’s amatter of performance, I still operate the same way. We did a really niceprofiler in Smalltalk, and then Squeak, that gave you good feedback that way.
Part of that is about performance but part of it is about just structure andarchitecture. You may find that some things are hardly ever used and maybeyou could just get rid of them by doing things differently. It’s just a differentperspective on the thing.
Seibel: It seems that virtually every programmer has a copy of Knuth’s TheArt of Computer Programming. Some people have it and it’s just on their shelf.Some people have it and use it as a reference. And some people have it andreally read it cover-to-cover. You actually studied with Knuth at Stanford;how much of it have you read?
Ingalls: I loved working with Don and I taught his MIX course for onequarter at Stanford, too, which was also enlightening. I think I’m prettydifferent from Don, but what I like about him is he’s got a greatmathematical mind but also loves to go deep into the bits—the pragmaticparts of things. I, too, love to get into the pragmatic side of things but I’mnot as rigorous as Don.
I was trained in physics and to me the problems I work on, or how I workon them, is really much more a physical thing. When I’m talking about otherperspectives on programs, I’m really thinking that there’s a thing there thatyou can touch and feel it vibrate.
If you take the way he worked on TeX, it was very mathematical andbeautiful and elegant. Compare that with, say, the first Smalltalk engines:they were very ad hoc. I just put together what was needed. It may be thatafter a few go-rounds, I started to get some sort of mathematical picture ofit, or we did, but it’s different in that regard.
So the truth is, I read a fair amount of his basic data structures stuff, but I’mnot a big reader—I’m very much of a doer. If I have a flaw, it’s that I willoften do my own of X, Y, or Z rather than reading the literature andknowing about it. It’s usually worked to my advantage I think, but whoknows?
Seibel: How much math do you think programmers need to know?Dijkstra claimed that computer science is just a branch of mathematics. Andunderstanding The Art of Computer Programming requires a fair bit of math.
Ingalls: You’ve got to have a logical mind. But I spent a lot of time in thecountry in Virginia while learning about computers. I always thought that if Iwanted to start a computer company in the mountains of Virginia, I’d go findthe mechanics. Except in certain fairly esoteric parts, the math isn’t near asimportant as logic and intuition.
I think of a lot of it as being more architectural: the way the graphics worktogether with the models; the way things need to be updated or cached.That’s not esoteric mathematics. That said, I do view it as being very much apart of the field of mathematics. To me, the really exciting thing aboutcomputers is they allowed mathematics to become a synthetic, not just ananalytic art. What I have so much fun doing day to day is a mathematicalkind of thing, but it’s creative, generative, synthetic.
Seibel: You say you’re not a big reader. Are there any books you’drecommend?
Ingalls: No. And I’m sure I’m in the minority this way. I was not a bigreader as a kid. I would occasionally read things thoroughly and not beinterrupted until I was done. There are some papers, absolutely, and I guesswith them come some books. Val Schorre’s paper on META II is one ofthem. There is the LISP 1.5 book. There’s APL, but I didn’t find Iverson’sbook to be at all a good way to learn it. A mathematician probably wouldhave. I can’t even remember what I read to learn about it from. But I lovedit. So I think spending a bit of time in that language would be like a book toread. Likewise, Smalltalk.
Seibel: So do you still enjoy programming as much as you used to whenyou started?
Ingalls: Yeah, the programming itself. The last couple of years have beeninteresting because I’ve been taken away from the environment that I got soused to—Smalltalk and then Squeak—where the tools are just really great.I’ve had to step back a little bit, working with JavaScript in browsers andconventional development environments. It sometimes takes me longer todebug stuff than it used to, but the basic process of getting an idea andmaking it happen I still really enjoy.
Seibel: Do you feel at all that programming is a young person’s game?
Ingalls: Not really, no. There’s something about being able to survey all thestuff that’s going on, and some of that endless energy that I don’t feel I havethe way I used to. But I still love to just take a problem and sit down andpore over it until it’s right. There’s an analogy here: I tried to learn to playpiano fairly late in life. People said, “Oh, you should learn when you’reyoung. You learn so much quicker.” Although I didn’t go very far, myconclusion was that it isn’t that young people learn that much faster; it’s justthey have more time. When I would put time in, I made progress.
I feel a bit the same thing with programming. When I look back on earliertimes in my life, I had all the time I wanted. I would just work and work.Now there are other things going on in my life and I’ve got responsibilitiesthat aren’t just programming. That undermines a bit of that intense focus.