Coders At Work by Peter Seibel
Seibel interviews a bunch of famous programmers. This book should probably accompany a freshman introduction to computer science.
Overengineering seems to be a pet peeve of yours.
There was another book -- what was it called? -- about debugging, written by someone from Microsoft. It was about how to use asserts effectively. I remember thinking that was a really good book, not because I learned anything from it, but because it was the book you wish your idiot coworker had read.
I guess I'm mostly dissatisfied with the state of my desktop. It seems like there is a lot of good interesting stuff going on in the back end. But as I'm using my computer I'm more and more frustrated with it. It seems like my mac shouldn't have a beach ball spinning all the time.
In my experience, the worst bugs are the real-time bugs, which have to do with interactionas with multiple threads. My approach to those bugs is to avoid making them. So I don't like threads. I think threads are an atrocious programming model. They're an occasionally necessarily (sic) evil, but they're not necessary for most of the things we use threads for.
Practical things matter; particulars matter. The famous School of Athens painting with Arisotle pointing down and Plato pointing up -- I'm more on the pointing-down side now. As I get older I get more and more skeptical and more and more interested in what works.
I heard about a computer science department where in the tutor's office they had a stuffed animal and the rule was you had to explain your problem to the stuffed animal before you could bother the tutor. "OK, Mr. Bear, here's the thing I'm working on and here's my approach -- aha! There it is!"
Things you don't do are difficult and things you've done are easy.
Writing is. There's some computer scientist that said, "Oh, if you're no good at English you'll never be a very good programmer."
So I guess it's two parts. One is to recognize that maybe there is a known solution to this...
And then you have to figure out, how do I find it?
And if you look at the fairy tales, people want to be able to just think in their minds what they want, wave their hands, and it happens. And of course the fairy tales are fully of cautionary tales where you forgot to cover the edge case and then something bad happens.
I don't think software is fractal. It might be nice if it were but I don't think it is because I don't think we have very good gools for dealing with the things that happen as systems get large. I think the things that happen when systems get large are qualitatively different from the things that happen as systems go from being small to medium size.
Am I just a mean guy? I don't know. But if I'm trying to prove something -- a theorem in mathematics -- instead of proving that it's correct, it's easier for me, usually, to say, "Well, find a counterexample." I can get psyched up to find a hole in this or explain why it doesn't work. And then when I can't find any holes, then I see the proof.
But now that I know some more, I'm trying to write harder stuff. So I make mistakes bcause I'm always operating at my limit. If I only stay in comfortable territory all the time, that's not so much fun.
Oh my God, yes. I've got this need to program. I wake up in the morning with sentences of a literate program. Before breakfast -- I'm sure poets must feel this -- I have to go to the computer and write this paragraph and then I can eat and I'm happy. It's a compulsion; that I have to admit.