An important contribution to the craft of programming is The Pragmatic Programmer, by Andrew Hunt & David Thomas. The tips in this book will help the experienced, talented programmer take their craftsmanship to the next level.
For a broader coverage of the basics (but with enough new ideas even for the experienced developer), the classic is Code Complete, by Steve McConnell. A longer book, but still worth the read and it's many facts and figures make a good reference.
Similar to patterns, you need a vocabulary to discuss whats wrong with a program and how to fix it. First of all, buy Refactoring, by Martin Fowler and read it; then go out a buy or download a refactoring tool for your current language (if you don't already have one).
A picture tells a thousand words. UML Distilled, also by Martin Fowler is an invaluable concise handbook. If you already know some UML, buy it as a desktop reference; if the only thing you know about UML is class diagrams (or if you didn't even know that), then there is no doubt that you need this book.