For the record, the best way to learn software architecture (what works, what doesn't) is to maintain your own code. Only when you support a project from inception to maturity do you get a sense of how much architecture matters and why it is so important.