Clean Code
Awesome book, it enlightened some practices we should follow to make some readable code.
It endorses a lot of practices beyond simple object-oriented rules. The most touching part of the book for me was about only grouping method calls with the same abstraction level; if you have multiple complexity levels mixed in a function, it's probably wrong. Getting this to daily code review pointed out a lot of gaps in my code style as well as my team's.
All chapters ended up showing something new to me, from naming conventions and comments (the ones which shouldn't exist) to how to test race conditions...
I wish I had read this one when I was about to start programming, and I'll probably go back to the book in some future time.