Books which treat a topic at a great extent are the simple tool to teach yourself practices, skills and technologies; but there are also classics (or wannabe in the future): each of these books paradigm-shifted my mind and I hope you can find in them some of the answers you're looking for, as they challenge the naive assumptions of software development.
- The Pragmatic Programmer: From Journeyman to Master: this is one of the most practical books that I've ever read. It is free from mumbo-jumbo buzzwords and focus on a pragmatic approach to software development, a compromise between purity of the design and getting things done. It also explains Extreme Programming/Agile practices and is a complete read despite being only 300+ pages long; it does not cover in full depth its topics but it goes as far as possible to tackle the advantages of source control, refactoring, testing, plain text, and more. It was the first book for me that gave a sense to the agile word.
- The Mythical Man-Month: Essays on Software Engineering: a classic from Fred Brooks. The man-month is the unit of measure for the work needed in a project: Brooks was the first to say that adding manpower to a software project would slow down the process. Even the Halloween documents commentaries cite The Mythical Man-Month; Plan to throw one away comes from here.
- Patterns of Enterprise Application Architecture by Martin Fowler. While the original GOF Design patterns book it's about common repeatable object structures in everyday applications, Fowler's one talks of the infrastructure layer: ActiveRecord, DataMapper, Unit Of Work and so on, fighting the object-relational mismatch, presenting distribution and layering. After reading this book you will feel a compelling desire to write an Orm, and you will be more or less capable of doing it.
- xUnit Test Patterns: Refactoring Test Code is a writing in all the patterns that a developer encounters when writing unit tests with an xUnit tool (phpunit, junit, nunit...). Who watches the watchmen? applies also to the test vs. production code duality and the maintainability of a project test suite is crucial for having it run by developers. The term fixture started to have a sense when reading this book.
- Dive into Python, an introduction to the Python language, the one that Google uses. This is a free ebook and explains the basics of this duck typing total-object-oriented language, where 2 and True are objects and magic methods are born.
What books made a great impression on you? I'd like to read what changed your way of thinking. Let me know in the comments.