I'm reading through Coders at Work, which is basically a bunch of interviews with famous programmers. I just read the first chapter, which is an interview with Jamie Zawinski, who was part of the first team of developers at Netscape (he worked on the Unix part) and also is/was a developer/evangelist of the chlamydia of editors known as Emacs.
It was an interesting interview. Joel Spolsky referred to him as the penultimate Duct Tape Programmer, whatever that means. I assume he meant to type "hacker" but misspelled it. It's a common typo; the keys are like right next to each other.
Anyway, it's clear from the beginning that jwz (as all of his friends call him) is a Lisp geek. So I pretty much hated him right away. Nothing annoys me more than people who think every language except the one they know really well is total crap. ALL languages suck. Except C#, which is God's gift to man. But that doesn't count because everybody already knows that.
The first couple pages are dedicated to the glorification of Lisp, and Lucid Lisp, and Common Lisp, and other things that only people over 50 know about, and the damnation to eternal Hell of Perl and C++ templates. I took a Common Lisp class in college and I came away with two things:
- Recursion is awesome
- I never want to touch Lisp again
There were other corollary (koar-uh-larry, dammit; I was a math major) things I learned, such as "Lisp sucks" and "Why are there so many parentheses" and "Why can't any Lisp programmer format their code in a readable fashion." All in all, it was a decidedly academic experience, which is where Lisp should have stayed: in academia. But I digress.
j-dub talked about his early days of hacking telephones, hating school, and generally being an all around Lisp pimp (Pisp?) by the time he was 15. His monologue on his days at Netscape were more interesting (unless you're that other guy who knows Lisp) than his descriptions of his oddly creepy love affair with Emacs, or his equally creepy hatred of GDB. If I knew how to debug C code by looking at opcodes, memory addresses and registers, then that would have been a good read, but since I was born after the death of Hitler (Godwin's law) I didn't really understand any of it.
The more interesting parts were how he rewrote Richard Stallman's C compiler, and him making fun of how everybody else's code sucks. Because nothing is as much fun to a programmer as mocking and degrading the hard work of another programmer. That's not a joke. I currently pay my rent by doing that.
The one thing which I truly enjoyed from the chapter was his description of the Gang of Four's Design Patterns. And I quote:
Then there was another book that everybody thought was the greatest thing ever in that same period - Design Patterns - which I just thought was crap. It was just like, programming via cut and paste. Rather than thinking through your task you looked through the recipe book and found something that maybe, kind, sorta felt like it, and then just aped it.
Then in meetings they'd be tossing around all this terminology they got out of that book. Like, the inverse, reverse, double-back-flip pattern - whatever. Oh, you mean a loop? OK.
That reminds of a story of how one of my coworkers was showing me a .NET IoC container called Unity. It's nice, and gives you exactly what you'd want out of an IoC container for the most part. Like every other framework ever, it's inherently confusing with plenty of misleading indirection. But it's another thing to put on your resume.
Anyway, he was explaining how he was using the Unit of Work principle here, and... "Wait, what's unit of work?" I asked. He replied, "Well, it's basically a transaction, that, uh... enables you to safely... execute... some piece of code... and... uh..." I cut him off after 10 seconds of niners and said, "You had me at 'transaction'".