In Praise of Street Fighting
Sanjoy Mahajan's Street-Fighting Mathematics is subtitled "The Art of Educated Guessing and Opportunistic Problem Solving". As the author says in the introduction, "Too much mathematical rigor teaches rigor mortis: the fear of making an unjustified leap even when it lands on a correct result." It's only 134 pages long (including the index), but it's packed full of practical ideas for tackling mathematical problems; in a sense, it aims to train people to do the kind of rough-and-ready calculations that David MacKay deploys so effectively in Sustainable Energy—Without the Hot Air.
Books like this make me wonder what a computing equivalent might look like. What are some useful heuristics for tackling programming problems? Does it even make sense to think in those terms, given that programming mostly a non-numerical activity (our programs may push numbers around, but we don't produce them via calculation)?