Most of us are working in object-oriented environments, right? How many of us are working in a truly object-oriented manner? How many of us merely think that we're working in an object-oriented manner?
I just happened to read the following (who it's from or where i read it doesn't really matter):
When i was learning OOP back in the early 1980s, ...
A statement like that just makes me cringe. Here we are, in the year 2009 and we're all trying to continuously get better at our craft, our hobby, our passion, or maybe just our job. An increasingly larger number of .NET developers are basing their improvement on solid OO principles and practices. And i don't just mean Uncle Bob's SOLID principles. I'm talking about learning from the experience which others before us have gained 20, 30 years ago. How sad is that? I mean, learning from others is great, but how sad is it that all of this great knowledge is something that only a portion of us seek to learn, and usually only after having been active in this profession for a while.
This is an industry where we are supposed to advance rapidly in our way of working, to achieve better results. To produce higher quality software at a lower cost, ideally striking a balance between short-term cost and long-term cost. Yet we are still having difficulty trying to get the majority of us to accept and embrace what others have learned many, many years ago. Oh sure, we might have achieved a higher level of automation within our development process these days due to the availability of more advanced frameworks and tools. But take a look at the principles that are behind most of these frameworks and tools... Most of them have been around for a long time and it's a pretty sad state of affairs that these kinds of principles are only starting to become popular in the year 2009.
Personally, i would put most of the blame with the large software vendors. They continuously hop on whatever bandwagon is popular at the time, while always promising increased productivity with their latest products. You can create a web application just like that (snaps fingers). Want some AJAX goodness? Oh just drag this component on to your web page and voila, you're done! Need Web Services? Just put some of these attributes on top of your methods and there you go! Or better yet, let's just all design some models and generate a whole bunch of code which will save us a tremendous amount of money!
So far, that hasn't really worked out, has it? Yes, most of these 'innovations' increase short-term productivity and best of all, they don't require expensive training and education. Everybody wins! In the longer term, this usually leads to software which is just waiting to be killed off and rewritten and developers who are even more fucked up than they already were.
This has some pretty interesting non-technical consequences as well. What is the general perception of normal people when it comes to the average quality of software that they experience on a day-to-day basis? A lot of people not only accept the fact that software is often buggy or unreliable, they've even come to expect it! Software that crashes? Oh that's ok, just restart it. Weird error messages? Oh that's ok, just click on them and they go away. Is it slow? Well everything is slow these days! I've often wondered exactly how we ended up with this culture of accepted and expected mediocrity. At least there is one benefit: if you're not a complete idiot, you've got a pretty good shot at a successful career in this field.
We're always looking ahead for newer versions of whatever it is that we use, newer tools, approaches that avoid problems that we're currently facing, the silver bullet that is going to solve all of our problems, etc... And that is important, we need continuous progress. It just would be nice if people realized that in order to truly create progress, you need to keep learning from the past as well.
Pingback: Skal vi aldri lære?