I need to pick out the ones I should read and recommend to junior programmers.
Given that qualification, I recommend Gauss and Weinberg, Are Your Lights On?: How to Figure Out What the Problem Really Is. Particularly for junior programmers who are moving from environments where the problem they're given really is the problem (e.g., academic assignments), to environments where the problem is starting to get fuzzy and ill-defined.
It's a short book, and some of the examples are dated, but it's the kind of book that plants seeds.