In practice, nothing works. There are all these beautiful abstractions that arebacked by shit. The implementation of libraries that look like they could bebeautiful are shit. And so if you’re the one responsible for the cost of buyingservers, or reliability—if you’re on call for pages—it helps to actually knowwhat’s going on under the covers and not trust everyone else’s libraries, andcode, and interfaces.

I almost don’t think I would be a programmer today if I was starting off. It’sjust too ugly. This is why I’m so excited about things like App Engine.Someone described Google’s App Engine as this generation’s BASIC.Because this generation, everything is networked. When I wasprogramming, it was one language, and it was on my own machine, and thedeploy was up enter, or RUN enter. Kids today don’t want to writesomething stupid like a “bounce a ball” app on their own machine. Theywant a web site to interact with.

I still have people mailing me who are like, “Hey, I have this idea—I want tomake Wikipedia meets YouTube, meets—” Everyone wants to do a website where their favorite four web sites aren’t quite right and they want tomake one that looks kind of like that.

The fact that App Engine gives you one button, “Put this on the Web,” andyou write in one language, arguably a pretty easy-to-learn one, Python, isperfect. It’s a great intro to programming—there are so many layers andlayers of bullshit that it gets rid of.

Seibel: How does that fit with your dismay at the Java guys who tell you,“Oh, Java takes care of that for you.” Isn’t that the same? “Well, App Enginewill take care of that for you.”

Fitzpatrick: I don’t know. Maybe it’s because I know what’s going on.Actually the JVM isn’t that bad. I guess it’s when people have blind faith intheir abstractions without understanding what’s going on.

Seibel: You had a lot of programming experience by the time you got tocollege and studied computer science. How did that work out?

Fitzpatrick: I skipped a lot of my early C.S. classes, because they were justreally boring. I would go and take the tests. Then towards the end they gotkind of fun, once you get to the 300- and 400-level classes. But right when itgot interesting, I graduated. And they wouldn’t let me take the fun grad-levelclasses, because I wasn’t a grad student.

I remember in the compiler class, the final project was we had to take thisexisting language that we had been playing with and add a whole bunch offeatures, including one feature of our own choosing as the bonus part of theproject. So I chose to implement run-time array bounds checking. Anyway,the professor took our compiled binary and ran his test suite against it, andit failed a couple of his tests. He was like, “Sorry, you get a C because youfailed my unit test,” When I went to look at it, I was like, “You have off-byones in your test suite.” So he gave me the grade back and I got an A, but Inever got the bonus points for adding a feature to the language. I was angryat school at that point.

And I remember our database class was taught by someone who, it seemed,had no real-world experience with databases. At this point I’d worked withOracle, Microsoft Server, and tons of MySQL. So I was asking all these realworldquestions I actually wanted answers to—things that were meltingright now—they would just give me some textbook answer. I’m like, “No,no. That doesn’t work.”

Seibel: You graduated in 2002. Do you have any greater appreciation nowof what they were trying to teach you?

Fitzpatrick: Half the classes I totally loved, and either I learned somethingtotally new that I wouldn’t have learned at the time, or I learned the properbackground material and the proper terminology. Prior to that, I knewprogramming pretty well but I didn’t have the vocabulary to describe what itwas I was doing. Or I would make up my own terminology for it and peoplewould think I didn’t know what I was talking about. Formal C.S. educationhelped me be able to talk about it.

Seibel: Do you have any regrets about combining running a business withschool? Would you rather have just done one or the other?

Fitzpatrick: No, I think that was the best way. I had friends who went tocollege and just did college, but I knew so much of it already, I would’vebeen bored. I had one friend who also knew a whole bunch of it but he wasof this school of thought that he’s at college to learn, not for grades, so hewas, on the side, studying Arabic and Chinese and Japanese. And all thecrazy programming languages. Every week it was like, “I have a new favoritelanguage. This week I’m only going to write in OCaml.” So he kept himselfbusy that way. I kept myself busy and not bored other ways.

Then I had friends who dropped out after their freshman year just to doweb stuff. A couple were doing a porn web site or something. They werelike, “Oh, we’re making all this money.” But they just worked a wholebunch; they were always in their basement working. College was awesomefor meeting people and partying. If I just did LiveJournal, I would’ve killedmyself stresswise.

Seibel: Are you glad you studied computer science?

Fitzpatrick: I probably could have done without it. I did a lot of things Iwouldn’t have done normally, so I guess it was good. I wish maybe I wouldhave like done something else as well, maybe stayed another year anddouble-majored in something totally unrelated. Did linguistics more. I’mkind of sad I left college and I felt I only did half studying because so much ofit I already knew. My early C.S. classes I barely attended and it was onlytowards the end where things just started to get interesting when it waslike, “OK, you’re done.”

Seibel: Did you ever think about going to grad school?

Fitzpatrick: Yeah. It would have been fun, but I was busy.

Seibel: Do you try to keep up with the C.S. literature?

Fitzpatrick: Me and my friends still forward each other papers around,neat papers. I read something the other day about some new technique forresizing Bloom filters at runtime. It was pretty awesome. The papers thatcome out of the storage conferences, some out of industry and some fromacademics, about different cool systems—I try to read those. There aredifferent reading groups at Google—systems reading groups or storagereading groups. I’ll see something on Reddit or a friend will forward a paperor something like that or link it on a blog.

Seibel: You just mentioned papers from the academy and from industry.Do you have any sense of whether those two meet in the right place thesedays?

Fitzpatrick: They kind of feel about the same to me. But it’s moreinteresting, a lot of times, to read the industry ones because you know theydid it to solve a problem and their solution works as opposed to, “We’dthink it would be cool if—” There’s a lot of crazier stuff that comes out ofacademia and it doesn’t actually work, so it’s just a crazy idea. Maybe theyturn it into commercial things later.

Seibel: How do you design software?

Fitzpatrick: I start with interfaces between things. What are the commonmethods, or the common RPCs, or the common queries. If it’s storage, I tryto think, what are the common queries? What indexes do we need? Howare the data going to be laid out on disk? Then I write dummy mocks fordifferent parts and flesh it out over time.

Seibel: Do you write mocks in the test-first sense so you can test it as yougo?

Fitzpatrick: More and more. I always designed software this way, evenbefore testing. I would just design interfaces and storage first, and thenwork up to an actual implementation later.

Seibel: What form would the design take? Pseudocode? Actual code?Whiteboard scribbles?


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