This OOP Debate Isn't About OOP At All

Posted on May 27, 2009

So an object-oriented programming versus procedural programming debate is on fire in the ColdFusion community this week due to a thought-provoking rant by Marc Funaro. There have already been some excellent responses to the post as well as a some thoughtful comments. Some outside our community may wonder what all the fuss is about, seeing as this debate was decided a long time ago in the larger application development world. However, through these comments and within Marc's post,  you can see that Marc touched a nerve with programmers - even some outside ColdFusion - that has brought forth an anger usually directed at unnamed "gurus" who have needlessly hoisted their OOP bias upon the masses. I would like to take a different angle on this debate and argue that it actually has very little to do with OOP at all.

So, yes, all the posts related to this debate talk about OOP and the initial post is even named "How OO Almost Destroyed My Business," which may have you asking how this could not be about OOP? To me, if you read between the lines of the anger and frustration within Marc's post and the comments that concur with him, I see a frustration at the ever-growing complexity of the developer's job in a more competitive and less rewarding environment. This frustration is even evident in that there are articles on "burnout" at A List Apart. OOP and the "gurus" who supposedly force it are just an easy surrogate target for the anger.

Back when I first started my career, I simply took a course called "Fast Track to ColdFusion" and within weeks I had a well-paying job for a young dude. I knew HTML of course and little bit of Flash (though there was no such thing as ActionScript yet) but not much else. I began to get good at SQL but my skill-set was still pretty narrow and yet I had my pick of jobs. Over the years, the requirements for these positions have become more complex with even the most basic positions now wanting things like Flex, ActionScript, Java, Groovy, XML, frameworks, advanced SQL, continuous integration, agile development/scrum and more. All this in addition to expecting you to be a ColdFusion expert (or whatever language you focus on).

Now let's add in that in today's tight job market, we need to compete with a global market filled with people willing to work for 1/3 to 1/10 what we can live on and you have a recipe for resentment. I think there is a sense that if I can't keep up with the bloggers and supposed "gurus" then I won't be competitive in today's job market. Compounding this is the fact that the requirements keep growing but the payout doesn't. This anger, I would argue, is what Marc's post is really about - about the growing complexity and hard work involved in just keeping up. OOP is just a symbol of that complexity because, well, it can be really difficult and because, like the larger problem here, it offers no easy answers.

There is no one correct way to handle this situation. Personally, I have come to find my enjoyment in the constant skill-building and learning necessary for this career by writing about what I learn. My writing has become my personal creativity outlet that isn't often available in my work and from which I often get the affirmations I am looking for while also building out my skill-set. I find enjoyment in being a part of the community - blogging, writing and speaking at conferences help me do that. Some other people find the joy in contributing to an open-source project or teaching and training. Still others, I think, find positions that are comfortable where there is less pressure to keep up with the "gurus" and where they can find the time to focus on interests other than programming.

In the end, perhaps Marc and others like him are finding their path in sharing their experiences with others and learning from them. Thoughts?

Comments

Kyle Hayes I agree with you, Brian, in that his post may have been partly about the aspect you allude to. However, I also feel there is a real frustration in what he is really expressing with OO and CF. I noticed this same type of demeanor with some folks over the years when I strongly worked with CF. I myself have a Java background and as such tried to make CF follow the patterns and paradigms in the way that Java did. At the same time, I also recognized where CF fell short and thus worked with CF in it's capacity as opposed to trying to get it to fit into the same context that Java is in.

With that, I encouraged other folks who worked with me to learn the better structured concepts of OO and MVC patterns and using the right mix of frameworks, such as a MVC, ORM, and IOC framework. The problem is, if you don't understand these concepts from a fundamental level from the beginning without ever mixing CF in, they can be very overwhelming and start to crush the positive attitude that a CFML programmer may have.

Much of the time I also felt that parts of the community were pushing the use of so many patterns it was ridiculous and I think this is the storm that perhaps Marc was feeling.

To reiterate, I do feel that what you mentioned could be an underlying tone and perhaps fueling of anger and frustration, but at the same time I know from other CFML developers that I used to work with, his feelings at that show on the surface are valid and understood.

I think that most of the expert CFML developers in the community know and understand the limitations of the technology. Keep in mind, however, limitations is defined by what the requirements of a project are. Projects' requirements should be written around the technology being used. Perhaps ColdFusion doesn't have limitations in the sense of the word. From it's beginning, it has always defined it's own set of patterns that work for the CFML workflow. Developer's need to understand to not try to redefine something that doesn't need to be redefined. If they have different needs in a project that are strong enough to fully set the project's scope outside the circle of ColdFusion, then they need to choose a different technology.

CF continues to have a strong closely-knit community, something I have always enjoyed about it. Embrace the community, but don't forget that at the end of the day, it's up to you how you want to program your applications. And yes patterns are good, but don't overdo it. Allow yourself to focus on the tasks at hand as well as having good design at the same time. True, not EVERYTHING needs to be "OO".

Finally, change rarely comes at the perfect time. As web developers, the past 5 years or so have been changing very rapidly with new languages, patterns, frameworks, libraries coming out every day it seems. Don't focus on being up to date on every single one and figure out how you can use each of them in your next project. Pick and choose what you want to learn and learn it well. In a time such as now, stick with what you know cause you need to hold on for a little bit longer, there are some rough winds up ahead.

Posted By Kyle Hayes / Posted on 05/27/2009 at 10:13 AM


Jason Blum Good Brian - Yeah I think you're right to zero in on the frustration in general and not specifically OOP, and that the "gurus" gave us an easy surrogate target for that frustration.

That said, one theme I do recall being specifically annoyed by about two years ago was the ubiquitous "it doesn't matter which framework you choose - just pick one" post you'd see in all the forums and more influential blogs. And remember that fatigued tone in which those posts were always written?

Now, while certainly true, the sentiment is totally cryptic and sort of useless to someone struggling to break out of the procedural world: "What do you mean it doesn't matter? You must surely prefer one over the other - just tell me which to dedicate my life to?!?!"

I was fortunate to then work alongside someone with a strong preference for Mach-II, and, being fairly comfortable now in that framework, I can look back and sympathize with the sentiment - and I think I could now probably be just as productive in Model-Glue or Fusebox. And I can appreciate why an advanced developer would want to bracket or suspend commitment to one framework or another, because she, being more experienced, sees they are all premised upon the same OOP principles.

But the problem is that a junior developer can't appreciate this. They're busy navigating all this talk about IoC, AOP, beans, ORM, etc. That's where the burnout begins. It's a bit like a rabid linguophile raising a mute out of fear of biasing the child towards French over Farsi.

As Kyle notes, our CF community is pretty special, characterized by a lot of respect and professionalism. But as someone who thrives on mentoring and being mentored and sharing knowledge in general, I feel the guru's job is to proselytize her process - and to do so by committing to and documenting the way she works, from her development environment to her framework of choice, and all the tips and tricks in between.

If this means exposing herself to the (likely) possibility that her process and preferences later fall out of synch with best practices, or that she is somehow retarding her disciples' growth - well, that's what the junior developer needs - and it's certainly the best way anyway to model a true lover of learning and of her craft.

Thankfully you and maybe a dozen or so other of our community's leading voices do just this and it's much appreciated. Thanks for a provocative post.

Posted By Jason Blum / Posted on 05/28/2009 at 8:12 AM


Dave Anderson Brian, I think your observations about Marc's post are very good ones, and have a couple of things to add.

I've been a CF developer since v1.5 -- distributed on three floppies when MS didn't even have a web browser, much less a server or scripting technology. Working in a Windows environment, CF was the only thing at the time that made sense to me to adopt because I needed database interactivity. I've been using it ever since, and it was about three years ago when I first transitioned into a more OO approach.

The reason I provide a little background here is because I felt a bit of a kinship with Marc in reading his post. I graduated from college at the same time, also with a degree in the humanities. I also experienced a period of significant frustration during the transition from procedural to OO development styles. The major difference between my experience and Marc's is that Marc seemed to spend lots of time and money going to classes and buying books, whereas I learned by doing. What really got me rolling, I'm happy to report, was the Illudium PU-36 Space Disinegr--... er, Code Generator. Once I started generating DAO, bean, and gateway objects (and eventually service objects when I figured out what they were for), and actively using them, the 'paradigm shift' literally shifted my thinking. I would never turn back now, and I *know* that an OO approach, even partially implemented, is a better one. I'm not going to get into an argument with anybody about it any more than I would argue with somebody who doesn't believe in evolution.

Having as much experience in the field as I do, I've noticed some disturbing traits that seem widely shared by many CF developers, even ones with 8-10 years of experience: once they can achieve the bare minimum, their professional development often seems to just...stop. Many of them should know much more about how to model a database properly. Many of them should know a lot more than they do about CSS and Javascript. Instead, they hang that hammer on their toolbelt and pound away indefinitely. Every problem looks like a nail.

I doubt this is limited to the CF community. I think most people seem to get to a point in their lives when learning new things just seems to be a bother. I suspect though that something about CF itself has something to do with it. It's perceived to be 'easy' (and thankfully, you really can do a lot in a short time with a low learning curve), and that easyness may -- I say MAY -- attract many adopters who are less inclined to engage themselves in Learning than your average bear.
Just my humble thoughts on the subject. And thanks again for the marvelously useful Illudium.

Posted By Dave Anderson / Posted on 05/31/2009 at 11:48 AM


Eric Butters I've also seen the tendency Dave refers to of developers reaching a certain skill level in their careers and just suspending further study and skill acquisition. But think that's due to two things: First, that happens in every every profession and most of us at the conferences I've gone to, all seem to be roughly within ten years of each other in age. So that could just be a consequence of a lot of us having grown up together. But the second reason is the one Jason refers to I think: that the guidance from the community beyond that junior skill level has lacking. Guys like you Brian, Ray Camden, Matt Woodward, Sean Corfield, etc. do so much for the community. But junior-minded developers need their hands held a little. Imagine if frameworks and code generation were part of the official Adobe curriculum. Yes that raises all sorts of issues - but imagine an official class or even certification in advanced OOP. I think things would look very difference.

Posted By Eric Butters / Posted on 06/01/2009 at 5:00 AM


Write your comment



(it will not be displayed)





About

My name is Brian Rinaldi and I am the Web Community Manager for Flash Platform at Adobe. I am a regular blogger, speaker and author. I also founded RIA Unleashed conference in Boston. The views expressed on this site are my own & not those of my employer.