Peter Norvig
294
Seibel: And do you think that changes the kind of people who can be
successful at programming now?
Norvig: I think the people that are really successful are the same—at least
that’s what I see around here. But, yeah, it is a little bit more of, “Can I
quickly get an understanding of what I need,” and less of, “I need complete
understanding.” I think some of it is bravado, this willingness to say, “I’m just
going to go ahead and do it,” the fearlessness of saying, “I don’t understand
everything that’s going on, but I went into the documentation and I learned
these three things. I tried it and it worked, so I’m just going to go ahead.”
That gets you to a certain point, but I think to really be a good programmer,
you can’t just do that. You have to understand a little bit more, and say, “Is
it safe, what I’m doing here? Or what are the failure cases? Sure, I tried it
once and it worked, but is it always going to work? How do I write test
cases to show that and to understand it a little better, and then once I’ve
done that, can I extract what I’ve done and publish a new tool that other
people can use because I’ve put these pieces together in a certain way.”
Seibel: How did you like to work on a team when you were a
programmer? Is it better to take the problem and split it up so everybody
gets their piece? Or do you like the XP model of pair-program everything
and everybody owns all the code collectively?
Norvig: I guess it’s more break it up. Steve Yegge’s got this “Good Agile,
Bad Agile” piece. I think he’s about right. Ten percent of the time it is a
really good idea to sit down together because you want that shared
understanding. I think most of the time you’re not going to be as effective.
If you have two good programmers, it’s better for them to work
independently and then debug each other’s work afterwards rather than to
say, “We’ll take a 50 percent hit just for that added set of eyes.”
I think it is important to get together when you’re figuring out what it is you
want to do both in terms of brainstorming what is the problem we’re trying
to solve and what is the functionality going to be here? You don’t even
know what the product is before you start. That you really want to do
together. Then you get to the point of saying, “OK, now we know what we
want to do. How are we going to divide it up?” That you want to do
together. Once you have a pretty good idea, I think you’re better off