I'm looking for a book to learn to "engineer" programs better. I program in Java already. Looking at the source code of open-source projects usually is too complicated as I have never made a program with more than 20 small files in it. I'm not an advanced programmer, I learned with a book and do this mostly for personal projects.
My last program was a mess. I used Eclipse and put all my unrelated-files in the same package which didn't scale well.
Examples of good suggestions would be: books on how to organize files in a program, on how to architect/engineer a program, books on design patterns, books on using OOP properly, books on how to mix GUI and logic code. Bad suggestions would be "learn java in 21 days", or stuff about advanced features.
For example, I just saw "Interface Oriented Design" from the Pragmatic Programmers website and it seems to hit one part of what I need, but it probably won't explain how to organize files and such in a large program. Any ideas? Or perhaps ideas other than books on what I currently need? (besides participating in an open-source project, please)