Dan Ingalls
394
Ingalls: It depends what I’m doing. I always set it up for the most immediate
gratification. So when trying to do something new, I just think of what
would be the first piece of success that’s achievable. And it’s different in
every case. If I had a more normal life, in more normal programming teams,
I’d probably be totally into the current way of team programming. But for
me, it’s much more self-induced—even down to a question of my attention
span. If I think I could get this working over the weekend, then that’s the
chunk I pick and that’s the thing that I go flat out for, ignoring all the other
things. It’s hard for me to generalize this except to say, there’s a place you
want to get to, you pick a piece of it that would be gratifying and that would
demonstrate that you’re on the path and that you can fit into the time until
you next get pulled off to do this at home or that at work.
Seibel: Since you’ve picked something that’s going to have some kind of
gratifying result at the end, that’s your first test—an acceptance test: does it
draw a window on the screen or whatever? What about finer-grained tests?
Ingalls: If it’s the first time you’ve made it possible to pick something up
and drag it over and drop it down, there’s a framework that you need to
have working there. Is the framework factored so that someone else
coming along will see that these are the tests? That’s something that I have
not typically done. This may just be the luxury of my generation—nobody
would get away with that these days. But I’m an old fart and they’re not
going to make me do it. But I think the underlying feeling is still the same.
The Squeak code used to be full of comments that are executable and things
to check. For instance, in lots of the BitBlt tests, there are these little things
that will pick something up from one place on the screen, do something to
it, and put it back, and if you see anything change on the screen, it’s not
working right and the comment says so. That’s a straightforward test.
Seibel: So let’s talk about working with others. The Learning Research
Group at PARC sounded like a pretty close-knit group. How did you
collaborate on the code itself?
Ingalls: Just by being close. And occasional mayhem. It was never a big
group and we each had our own areas. There’s a lot of team programming
expertise that’s grown up and I’m not up on it at all. Right now, in the Lively
Kernel, the kernel part has been just me and one other guy, Krzysztof
Palacz. And we sort of have our separate areas that we work on. We