When I was a developer learning my trade, I picked up a copy of Steve McConnell's Code Complete. It was wonderful. An entire book filled with practices to my my trade easier and more reliable.
Much of it seemed like common sense, building on a lot of what I'd learned as I gained experience in object-oriented design and development. Concepts like understanding what a routine does and making sure that a method accomplishes one and only one objective resonated with me because they reinforced the things that worked well for me in my own experience.
There were other principles that seemed so basic that they might not even need to be covered in a book about the craft of software development. A programmer should be able to understand inherently that a six-page function wasn't maintainable, right?
Sadly, there was a reason these ideas had to be included in the book back when it was initially published, and there are still individual developers who don't find these principles to be second nature.
To this day, I see coders who have a hard time understanding the principles that make code reliable, extensible, and maintainable. Requirements change, architectures change, and refactoring happens. If you're a developer, you have to see this coming, and you have to do the right things to prepare for change.
If you're a manager, and any of your developers haven't seen this book, buy it for them and encourage them as strongly as you can to read the book.
If you're a developer and you haven't read this book (or haven't read it recently), pick up a copy, and read it.