I recently finished reading The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas. Although the book was written in 2000, it is full of useful advice that is just as relevant today as it was back then. You won't find information about the latest programming fads in this book, what you will find is more valuable, information that can be applied to every software development project, regardless of methodology or programming language used. Hunt and Thomas provide advice for overcoming misconceptions and bad practices that I have seen repeated in many projects, take these quotes from the book:
"You may be in a situation where you know exactly what needs doing and how to do it. The entire system just appears before your eyes - you know it's right. But ask permission to tackle the whole thing and you'll be met with delays and blank stares. People will form committees, budgets will need approval, and things will get complicated."
"Conventional wisdom says that once a project is in the coding phase, the work is mostly mechanical, transcribing the design into executable statements. We think that this attitude is the single biggest reason that many programs are ugly, inefficient, poorly structured, unmaintainable, and just plain wrong."
"Traditional team organization is based on the old-fashioned waterfall method of software construction. [...] There is an implicit hierarchy here - the closer to the user you're allowed, the more senior you are. [...] Programmers who are two or three levels removed from the actual users of their code are unlikely to be aware of the context in which their work is used. They will not be able to make informed decisions"
The book is full of situations like the ones described in the above quotes, and provides advice on how to prevent these from happening in your software projects (to see the actual solutions, you will have to get the book).
Since this book presents situations commonly found in software development projects, and explains how to handle these situations, it should be required reading for every software developer.