First off, my focus is web development (ASP.net webforms up to now), using C#. But, I am interested in learning design principles that will carry into any technology or language.
I have been ready for a long time to step up, and learn how to design software the right way. Up to this point, the software I write has been designing the database schema first, using an ORM for data access (usually Linq To SQL), stepping though requirements building a screen (web page) at a time, responding to control events, and when I notice that I am duplicating logic, I will pull that logic out into a utility class or something like that.
I know that this isn't the best way to design software. I think a couple of things have/are holding me back:
- Recently, when earning my BS degree in Computer Information Systems, my teachers focused on teaching the basics of frameworks (.net) and hardly ever touched on design patterns.
- I have never had a mentor. StackOverflow IS my mentor. I am the only developer where I work.
I am currently reading Pro ASP.NET MVC Framework. The 3rd chapter talks a lot about some design patters, test driven development, and domain driven design. I am very interested in these practices and want to start designing my applications first with an object model that reflects the problem domain and THEN letting the rest fall into place.
BUT HOW?! Seriously, I'm not helpless here, but I need to know what to read and study. I am beginning a Masters in Software Engineering program in the fall, but if history is any indicator, I can't rely on a college education to actually teach me anything useful (regardless of how perfect my grades are).
So, to make a long question short, what should I read or study?