I'm not a java guy (meaning I haven't done any serious java development in a few years, and my professional focus is the MS platform at this time), but I've found the discussion around Spring that Ted Neward has been having with other fellows in the Java camp to be extremely: a) entertaining, and b) fascinating.

Even though I don't develop professionally in Java at the moment, I totally understand and agree with Ted's comments about the differences between working heavily in Object Oriented Dream Land and doing a good distributed system design. Doing a good distributed system design has significant challenges and is something where OO just doesn't fit right, while it is something where the basic Service Orientation tenets feel like home.

For what it's worth, I believe object orientation to be a good thing, meaning it has many good principles and allows you to create wonderful designs... for some things and at certain abstraction layers of your application. It most definitely does not work everywhere, and trying to fit every square problem into the round OO hole is just going to cause you pain. You know, service orientation, and good old structured, functional and even logic programming all have places where they excel, and where they are far more appropriate and can lead to substantially better designs than a pure OO one (even if we are developing in what is generally considered an OO programming language). By better here I of course mean being more elegant, simple, more performant, more scalable, more secure or any combination of them.

So, from a pragmatic perspective, I find that you really do need to be aware of all (or at least as many as you can) paradigms so you can take advantage of the one that fits a given problem (or problem subset) the most and go with it. Getting bogged down into discussions about it not being an Object Oriented way of doing things is just, well, unpractical and short sighted. This is why I rather laugh at discussions such as the recently presented in recent articles in Communications of the ACM such as "Dataless objects considered harmful" [1]. While it is fine to argue that if you're working on an OO design you should apply OO principles correctly, I think it is rather theoretical and unpragmatic to argue about things like classes with no data, which, forgive the heressy, are just another powerful tool in the arsenal (heck, several Design Patterns depend on them, are they bad as well?) [2].

[1] "On pseudo object-oriented programming considered harmfu" seems to present a slightly more pragmatic position on the subject...
[2] Is the ACM Digital Library a great tool, or what?

Tomas Restrepo

Software developer located in Colombia. Sr. PFE at Microsoft.