24 May 2006

Getting a Clue

A post on TheServerSide.com entitled Java Succumbing to .NET in my Organization this morning had a little clue in it about why I believe that good Object-Oriented systems are relatively hard to come by.

In the post Neil Chaudhuri the author states:
After talking with some of the developers who are in the trenches, most of them are happy to move to .NET. This even includes some who, like myself, have been certified in and built a career on Java. Apparently, Java is just too hard and too intimidating, especially for beginners.
Interesting. It's also quite enlightening. What that tells me is that there is a metric crap-load* of developers out there who simply don't get OO. They prefer the development model of sticking code behind a form, à la VS2003 and its predecessors back to VB 1.0. Perhaps they might get fancy and use helper classes to encapsulate some business logic, but generally I believe that a majority of programmers out there don't have a clue what OO is really about.

This is where there is a very important distinction: there are programmers who can use objects, and programmers who can build OO systems. The former are the ones who like to put 500 lines of code in the onclick event of the OK button on a window. The latter are those who can build practically an entire system with any particular user interface. Of course, there is a spectrum of talent for both of these groups, but I firmly believe that there's a disconnect, a chasm if you will, between them.

I can say that I was in the "uses objects" camp at one point. I first started working with OO languages around 1991. Looking back, it took a few years before I made the leap across that chasm to the "builds OO systems" group. Today, 15 years later, I'm still learning on a daily basis and suspect that I'll continue to do so until I stop coding (which will likely coincide with a cessation of vital signs!).

So, with respect to the post on TheServerSide.com, it's just another symptom that many, many developers don't get object orientation. Given an object, they can write some nice procedural code around it, but they don't understand the abstractions. They believe that OO is simply inheritance for the sake of reuse. They think that patterns are something for making clothes. They believe that domain modelling has something to do with figuring out what the next group of suffixes such as ".com" will be.

They need to get a clue, or Object Oriented Programming with all of its benefits will eventually die.

*Jim Shore also uses this term. I swear I didn't steal it - I've been using it for years!!