Seibel: Did you ever feel that as a lack—did you ever wish you hadbeen exposed to things in a more systematic way?

Zawinski: There were definitely times, especially at Lucid, where it’d beobvious that there’s this whole big black hole that these guys are talkingabout that I just completely missed because I never needed to know it. And thenI’d pick up the terminology and have a basic idea what they’re talking aboutand maybe do a little bit of reading on it if it was something I needed toknow. So there were definitely times, especially early on, where I felt like,“Oh my god, I don’t know anything.” It would just be embarrassing—but that wasjust being insecure. Being the young kid around all these people withPhDs—“Aaah, I don’t know anything! I’m an idiot! How did I bluff my way intothis?”

Though my life certainly would have turned out very differently if I hadspent a lot more time in school—it was a moment in time when I gotto do the things I did.

Seibel: Did you ever feel the opposite, where you felt like thecomputer scientists around you just didn’t understand actualprogramming as well as you did?

Zawinski: I felt like that a lot, but really that’s not so much aboutthinking, “Wow, you guys have been barking up the wrong tree.” as,“Wow, we’re just not interested in the same things.” I don’t want tobe a mathematician but I’m not going to criticize someone who is amathematician.

It’s weird that people often confuse those two pursuits. People whoare into very theoretical computer science are thought of in this sameway as people who are shipping desktop applications. And they don’treally have a lot to do with each other.

Seibel: You’re largely self-taught. Do you have any advice for selftaughtprogrammers?

Zawinski: That’s a really hard question because the world’s sodifferent now. I always feel weird talking about, “Here’s what I did.” Idon’t know if that was the right way to do it. But people always hear itas, “Be like me.”

I stumbled into this—it all just sort of happened. I made somedecisions and they led to others and here we are.

Every now and then I get an email from someone that’s basically, “Iwant to be a programmer; what do I do?” Or, “Should I go to collegeor not?” How can I answer that? I would have had very strongopinions about this if you asked me in 1986. But someone todaycouldn’t take the same path that I took because that path doesn’t evenexist anymore.

Ten years ago I would have said absolutely the first thing you have todo is learn assembly language. You have to learn how the machineactually works. Does that matter any more? I don’t even know. Maybeit does. But possibly not. If the way software is going to be ten yearsfrom now is all web applications or a piece of distributed code in somerented computing cluster that’s moving around between a dozendifferent Google servers and spawning other copies of itself and thenmerging back together once it’s got results, does anyone need toknow assembly language any more? Is that so abstracted away that itdoesn’t matter? I don’t know.

I was kind of freaked out when I realized that there are peoplegraduating with CS degrees who’d never written C. They started inJava and they stayed there. That just seemed bizarre and wrong. But Idon’t know. Maybe it’s not wrong. Maybe that’s the caveman thoughts:“Back in my day, we programmed with a nine-volt battery and a steadyhand!”

Seibel: What about books? Are there particular computer-science orprogramming books that everyone should read?

Zawinski: I actually haven’t read very many of those. The one Ialways recommend is Structure and Interpretation of Computer Programs,which a lot of people are afraid of because it’s Lispy, but I think does areally good job of teaching programming without teaching a language. Ithink a lot of introductory-level stuff focuses on syntax and I definitelysaw that in the classes I had in high school and in the intro classes atCarnegie-Mellon during my brief time there.

This is not teaching people to program; this is teaching people wherethe semicolon goes. That seems like the kind of thing that’s going toscare people away from it more than anything, because that’s not theinteresting part. Not even to someone who knows what they’re doing.

There was another book—what was it called?—about debugging,written by someone from Microsoft. It was about how to use assertseffectively. I remember thinking that was a really good book, notbecause I learned anything from it, but because it was the book youwish your idiot coworker had read.

Then there was another book that everybody thought was thegreatest thing ever in that same period—Design Patterns—which I justthought was crap. It was just like, programming via cut and paste.Rather than thinking through your task you looked through the recipebook and found something that maybe, kinda, sorta felt like it, andthen just aped it. That’s not programming; that’s a coloring book. But alot of people seemed to love it. Then in meetings they’d be tossingaround all this terminology they got out of that book. Like, theinverse, reverse, double-back-flip pattern—whatever. Oh, you mean aloop? OK.

Seibel: Is there a key skill programmers must have?

Zawinski: Well, curiosity—taking things apart. Wanting to knowwhat’s going on under the hood. I think that’s really the basis of it.Without that I don’t think you get very far. That’s your primary way ofacquiring knowledge. Taking something apart and looking at it is howyou learn to build your own. At least for me. I’ve read very few booksabout computers. My experience has been digging through sourcecode or reference manuals. I’ve got a goal and, alright, to do this Ineed to know what this thing does and what this thing does. And I’lljust sort of random-walk through that until I find where I’m going.

Seibel: Have you read Knuth’s, The Art of Computer Programming?

Zawinski: I haven’t. And that’s one of those things where, I reallyprobably should have. But I never did.

Seibel: It’s tough going—you need a lot of math to really grok it.

Zawinski: And I’m not a math person at all.

Seibel: That’s interesting. Lots of programmers come out ofmathematics and lots of computer-science theory is verymathematical. So you’re an existence proof that it’s not absolutelynecessary. How much math or mathy kind of thinking is necessary tobe a good programmer?

Zawinski: Well, it depends on where you draw the line as to what’smathy and what’s not. Is being good at pattern matching mathy?Having an understanding of orders of magnitude and combinatorics isimportant at a gut level. But I’m sure I would completely flunk if I hadto take a basic intro quiz on that kind of stuff. It’s been so long sinceI’ve had to do anything formal like that.

Really the only math classes I had were in high school. I had algebra. Alittle bit of calculus. I wasn’t terribly good at it. I got through it but itdidn’t really come naturally to me. I had a physics class in high schoolwhere we were doing mechanics and doing labs dragging blocks acrosssandpaper and stuff like that. I did terribly in that class and felt like anidiot because I actually enjoyed the class. I did the labs really well—theprocedure was spot on—and then I just couldn’t do the math.

I’d get an answer that I knew was three orders of magnitude off. I’dshow my work—I don’t know what I did wrong. I’d get half creditsince the data was collected properly and I cleaned up afterwards. Somath was never really my forte.

But I wouldn’t go so far as to say you don’t need that to be aprogrammer. There’s obviously different kinds of programming.Without people who are not like me none of this would exist. But I’vealways seen much more in common with writing prose than math. Itfeels like you’re writing a story and you’re trying to express a conceptto a very dumb person—the computer—who has a limited vocabulary.You’ve got this concept you want to express and limited tools toexpress it with. What words do you use and what does yourintroductory and summary statement look like? That sort of thing.


Перейти на страницу:
Изменить размер шрифта: