Well, I think interesting Head First Design Patterns, and Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin).
something interesting is too Working Effectively with Legacy Code (Robert C Martin).
If you want to be a great programmer and structure well the code can start with DDD, with these books: