Here is a list of books that I have found helpful as I learn to program.
Kent Beck, Smalltalk Best Practice Patterns, Prentice Hall, 1997. ISBN 013476904X.
The implementation patterns for Smalltalk. Many are similar to the patterns listed here, but there are also significant differences because the languages are so different. Writing it forced me to slow down and think through decisions that I had been making on instinct.
Martin Fowler, Refactoring: Improving the Design of Existing Code, Addison-Wesley, 1999. ISBN 0201485672.
It is easy to say that designs should change a little at a time. This book introduced how to make those changes.
Eric Freeman and Elisabeth Freeman, Head First Design Patterns, O’Reilly ...