Jon Bentley’s Programming Pearls was quite good. The 15 columns of the book talk through a number of approaches to correctness and performance (be it space or size), and go through some exercises of transforming the problem domain. While the first pass through most of the discussion in the book is in the direction of what comes with a decent training in data structures and algorithms, the later passes often look more at real-world differences (recursion versus iteration, cache coherence, allocator performance) and the subtle things that aren’t intuitive or as they seem.
The provided additional problems (though, like the Knuth books, I’ve yet to work through many of them) are well thought out, and hints/solutions are provided for many of them. It’s a short book, but not a quick read, per se. Some of the material is old, but it is not at all dated. 9/10.