So to mimic the class:
The Mythical Man Month
Design Patterns - Even if some of the particulars are not as relevant, it still provides a useful framework for thought.
Lessons Learned in Software Testing: A Context-Driven Approach
I'd also add Harry Potter & The Methods of Rationality. A lot of engineers can think empirically, but its not their first reaction. Going through this book helped make it second nature for me. Can't remember if a certain data structure is immutable? Now I'll write a couple of lines of code to see rather than go looking for documentation. A lot of big problems start as false assumptions. Having the instinct to think to test them and knowing how to will prevent a lot of wasted effort, regardless of your role.
How to Solve It by Polya also gets an honorable mention for similar reasons.