Im constantly thinking about what layout of classes and their dependancies/interactions will work best for a new project. Doing some iPhone development right now has the "benefit" of forcing you to use things like the mvc pattern and having to rely heavily on delegates and target/actions but still there is always sub-organizing that takes place. The problem is that I never feel like a working solution is the best way of doing something. Studying design patterns only seems to be part of the equation, I guess im looking for new google keywords or amazon searches...<p>Question could probably be: How did you go from goto and general pasta to well designed beautiful code that made people write articles in your honor?<p>Books? Articles? Down-and-dirty coding? Finding a mentor? Doing open-source? Slaving away as a PhD student in applied mathematics and system design?
Having to maintain my own software and keep adding features. I have redesigned my largest project several times, and am still not entirely satisfied.<p>You need to suffer.
For me personally, finding a mentor was a huge eye-opener, but that was mostly because I didn't realize that I was(and likely still am) doing it wrong.<p>The fact that you're self-aware and seeking out the information to further your craft bodes well :)
Sounds like you're doing it. You are looking for a way to make yourself a better developer and this never ends. I found eventually, that no one every really knew a good design. It seems like we always invented that along the way. Yeah, we all knew patterns etc, and were bound to certain ways of doing things, but somehow we seemed to always get lucky on most designs. It quite possibly may have been that the problems solved themselves eventually. And after we saw the code we wrote we looked at it made it better on the last few days creating, in most cases, an elegant design. The designs were more apparent after the project was done which were never consistent from project to project.<p>One way to learn good software design is to look at other peoples code who are good at what they do. For me those people are John Resig, Douglas Crockford, etc.
Working on large projects where you experience the consequences of bad judgment calls made years earlier, and trying to figure out how things could have gone better.<p>Probably the nastiest way to learn, but still the best.