Stir craziness > geek craziness.
I got a new computer today. I was really excited! But not for the reason you think. Sure, it's a sweet new machine that actually works with my DSL connection, so I no longer have to worry about my dialup going away. But that wasn't the exciting thing. The exciting thing was I'd been waiting around the apartment all day for the courier to deliver this machine. So once I'd received it, I didn't unpack it from the boxes. Instead, I got the hell out of my apartment and went for a walk around the neighborhood. But of course the first thing I did once I got home was unwrap this machine etc etc and now here I am typing on it. So the geek force within me is strong.
I warn you: only computer programmers want to read The Algorithm Design Manual. But they might like it. I liked it.
It's something like a Computer Science 101 textbook and yet I'm glad I read it. It starts out like you'd expect a textbook to. But then chapter 8 comes along. Chapter 8 is a laundry list of computer science problem types with a list of different ways of tackling them. It's kind of like the "Have you tried...?" lists for puzzle hunt nOObs. First your figure out the general class of problem that you're dealing with. Then it has a list of questions to ask yourself about the problem--Is there a logical way to order the data? Are the regions likely to fall in clusters? Sometimes the answer to a question then leads to a way to tackle the problem. Sometimes, answering the question just helps you to understand the problem better. I had quibbles with the way it tries to classify computer science problems, but trying to organize all of computer science into a hierarchy is probably impossible anyhow; no harm done.