While a lot of developers are sunk deep into trying out new technologies such as WPF, WCF, LINQ, etc. (I’ve done a little bit of that too), I’m currently reading up books and articles that deal with architecture (design patterns, best practices, etc.). And I’m having a blast! As usual, I’m going back to further explore into some areas that I’ve researched and used before, but of course I’m doing that with a new perspective, given the knowledge I’ve acquired since the last time I’ve done so.
I was than thinking about something: usually, they way Microsoft and other writers and speakers throw new technologies at us isn’t even close to the way that should happen.
I mean, I remember several years ago when I was at a presentation where the speaker was showing one of the new features in VS 2005. He had VS open, created a brand new form, went to the Data Sources window, selected some table in SQL Server, dragged the table onto the form, and voila, controls get automagically created on the form (textboxes, checkboxes, VCR buttons), everything already bound to the data.
While the speaker still had this air of satisfaction on his face due to the cool new feature he had just demoed, I heard attendees gasping, incredulously. For how many had we already seen that that was just NOT the way of creating applications? UI controls bound directly to columns in a table on the SQL Server database? What if tomorrow the customer wants to migrate to Oracle? What if the customer wants to migrate to a web application? What about the business logic?
People who doesn’t know any better would just go back home and start creating applications in that way. Worse yet, they’d show it to other people, and the plague would spread like there’s no tomorrow.
Later on, the option to select "object" as a data source was introduced (allowing developers to bind controls to special objects, such as Entities, Data Transfer Objects, etc.), as opposed to binding directly to a database. But why not prioritize that option, promoting the concepts of an application well designed, instead of going with the cheap, quick and dirty, unprofessional option?
An analogy for that is to have a presentation for surgeons, where the presenter goes like "hey, this is a flashy looking new scalpel, which cuts skin open so quick and easy that you don’t even have to think about when you’re performing a surgery. Ain’t that cool?".
Wait, maybe there’s still hope…
With all that said, I was just thinking how great it was to see Scott Guthrie presenting the MVC Framework first-hand at the Alt.NET in Austin last month. In case you missed it, Scott Hanselman has a good post about it, including videos of the presentation.
To me, that was huge. There was no drag and drop. There was no quick and dirty way of implementing something. Mr. Guthrie did the presentation totally based on strong concepts, such as separation of concerns, inversion of control, test-driven development, the MVC pattern itself…
I’m honestly hoping that we get to see more of this type of presentation and tool coming out of Microsoft, from the mouth of influential people such as Scott, since their reach is broad within the software development world (well, at least the part of the world that works with Microsoft technologies).
Any Surgeon hobbyists out there?
We don’t hear about surgeon hobbyists, or fireman hobbyists out there, do we? Nobody starts practicing those profession just by reading a "…for Dummies" kind of book (I guess we can’t even use "profession" and "hobbyist" in the same sentence…). So why do we have so many developer hobbyists then?
Sure, one cannot just "play" being a surgeon, whereas it’s easy and harmless to play being a developer. If a hobbyist decides to turn that into a profession, then he or she should become a professional. That means go learn the practices. Go learn the more appropriate tools. Go learn pros and cons of doing something one way as opposed to another.
The sad thing is that even for the more seasoned developers (people who’s being doing this for so many years now), there’s still a lack of notion that some tools (such as Visual Studio) don’t necessarily promote good practices. Those tools usually offer features for RAD (Rapid Application Development), which demos well for the masses, but don’t really help developers who are trying to follow better practices and processes (such as TDD, loose coupling, n-tier development, etc). There are other examples of this that come to my mind, but I’ll keep those to another post (just trying to keep this one not too long…).
So, are you a hobbyist or professional developer?