Jeremy Miller has a post about the evolution of a developer (in terms of DI/IoC) and also includes something from a previous post of his (but doesn’t directly link):
“I think there is an inflection point where a coder mindlessly spewing out code transforms into a thoughtful software craftsman capable of creating maintainable code.”
Now, I think the idea that this is an off-on switch type of thing is wrong. Developers like to talk about ‘aha!’ moments (“Take on me!!!!!!!!”….sorry, I digress, but I loved ‘Hunting High and Low’) and they are real. They are real in other intellectual disciplines, and the experience of them can be pretty powerful (in my Philosophy hey-day, I had more than a few), but I think the experience is also over-rated. You went from not getting something to getting something (or at least you think so…I think a lot of ‘aha!’ moments are phony), but the development of a developer is much more of a continuum. And the moronic Alt.NET stereotype of the dumb 9-5 80% lingers in here (more on this in another post soon).
Nit-picking aside, there’s an obvious truth to what he’s talking about, and he aptly describes stages along the way.
But, I think there are times at which this ‘development of a developer’ process is in a negative direction.
digression: you can view videos and content from Uncle Fester’s EchoChamberConf here. Lots of good stuff. In order to have Continuous Improvement, you also need to have the notion of ‘a step backward’ and the notion of ‘a completely bad idea that should be abandoned’…but I digress.
To re-use another stupid analogy that I might have used at some point, but am way too lazy to lookup, consider the act of painting.
Have you ever had to paint a room, or had the brilliant idea of painting a room yourself? As a way of making money in college, one summer I worked on a crew that re-painted dorm rooms (looking back, I think the main point of this arrangement was to give middle-aged ‘manager-type’ men a new pool of young girls to hit on in hopes of finding one or more that was dumb and/or naive…this is also the case at any restaurant like Bennigan’s…but I digress). It was not particularly enjoyable (students had many interesting ways of using their dorm rooms…in case you ever need to know this, partially digested Cheerios do not decompose, at least not noticeably, but I digress) . At times, you came across a room where the student(s) had actually done some pretty decent work. And you placed a layer or two of white paint (or off-white or whatever it was) over it, and you were done. Since it was during the summer, and it was in Houston, it was freaking hot. But I digress.
Anyway, if you own a house, you might end up painting a room on your own, because you think you can save money and/or you’ve watched too many Loews’ ads and feel inadequate. Depending on your skill level, it might actually turn out well (as long as you don’t look at the baseboards too closely, etc.).
However, if you are a business owner and need a room painted, you aren’t likely to call Mary Jane Homeowner, but a professional company that does that sort of thing. These companies fit on a continuum but in general, you get a better result than if you would hire someone like, say, me. There are steps you need to take to make sure the results are professional. I think it has something to do with primer. Bad analogy when I don’t know what professional painters do, but figure it out.
To push the analogy, a developer can live a long time (and I mean a *long* time) just slapping a layer of white paint over a codebase without ever thinking about design principles. The transition from coder to craftsman is something like transitioning from “I’m painting stuff for some immediate need” to “I’m painting stuff in a way that is repeatable, because I actually care about it.”
To really push the analogy (to get to the whole ‘without going over’ bit), suppose you are a business that needs a room painted, and all you can hire to do so is Michelangelo.
If I’m Michelangelo,I don’t want to just put up some white paint and make sure the floorboards are painted properly, I want to create a work of art.
But if I’m a business owner, unless I’m painting a room at the Bellagio, I don’t want a work of art. I want a professionally painted room.
The artists of the development world want to push things like deprecating the database, moving to an object-oriented database system, and other things that are really not applicable in the real world. It isn’t that you couldn’t build a system on these lines. You could. And the artist is best capable of delivering this. But this isn’t what a business really wants.
When the ‘development of a developer’ pushes from Craftsman to Artist, you have problems. And it is an interesting problem. If you abstract the context as much as possible, wouldn’t you want to have Michelangelo instead of just some competent painter? Seemingly, the answer is obviously yes. But in the real world of business, the answer is no. You want someone who will accept the business requirement of the job at hand, and a ‘lesser’ painter/developer is more likely to give you that.