Home » Opinion » Object Oriented Programming has Failed Us

Object Oriented Programming has Failed Us

I’ve been thinking about the state of the programmers coming into our industry recently.  It seems to me that many of the college students who graduate today understand the syntax, but few know how to apply true object oriented principles to the real world.

I recently had a discussion with a friend who confirmed my observations.  Simply put, most people do not think in object oriented terms.

We’ve both spent time teaching other programmers, or having other programmers work for us.  We’ve watched good programmers stumble over this whole concept of object oriented programming.  Some leave understanding it and being able to apply it right away.  Others, struggle to do the exercises we give them.  Why is that?

When a high school student ask me about getting a Computer Science degree.  The first question I ask him is, “Did you like Algebra or Geometry better?  Specifically, did you like the proofs you did in Geometry or did you like plugging in the numbers in Algebra?”  The reason I ask this question is because programming is a lot like working a proof.  If you didn’t like proofs, if you wouldn’t be willing to spend the bulk of your day working a proof, you should not be a programmer.

But, with object oriented programming, there is another layer on top of this.  You see, proofs are linier, one dimensional problems.  Object oriented programming is at least two dimensional in nature and maybe even three dimensional.

So, now, my question needs to be modified to include the following question, “Have you ever worked on anything three dimensional.  Something you had to see in your mind’s eye and then transfer to the real world?”  Building with Legos, Tinker Toys, or taking a shop class would qualify.

But, you can see right away, that if I ask both questions, I’ve limited the number of people who are really able to program using object oriented principles to a very small subset.

Back in the day, we moved from C to C++.  I remember that maybe 20% of the programmers were able to make the jump.  Most who switched ended up writing C code using C++ syntax.  I’m pretty sure that’s NOT what Borland or Microsoft had in mind when they gave us the C++ compilers.

I use to think that as we progressed, as kids came out of college, that more people would understand object oriented programming because that’s what they started with.  The reality is that many of them do not.  I use to think this had something to do with the education they were getting. That somehow the teachers were spending time on the syntax and not enough time on application.  But, the more I ponder the problem, the more I realize that the problem is not the students.  You can only do so much with the talent people have.  No, the real problem is that object oriented programming as a mass solution has failed us.

In a world driven by computers.  A world that already has too few programmers available.  Do we really want to limit the number of programmers we have available?

Folks, we’ve been looking at the programming language issue from the wrong perspective.  As we develop programming solutions in the future, we need to aim for solutions that most programmers understand.  Solutions that people understand.  Not solutions that mirror reality but solutions that work in the real world.

I really hate to say this, as much as I like object oriented programming but, I really think we might be better off if we went back to procedural programming for the bulk of the applications that we write and left the object oriented stuff to people who really understand it and for problems that can not be solved any other way.

Meanwhile, back at the lab, we need to come up with a programming environment that most people understand naturally.  We need to do usability studies on the languages we develop just like we test applications we develop for users.  Instead of trying to simplify what we are already doing, which continues to provide solutions that only programmers understand, we need to provide solutions that are no longer programmer centric.

Once we train and use up all the programming talent in the world, we will be forced to do this.  We might as well start now.


Other people talking about Teaching Object Oriented Programming

– Now after watching this video I can understand the potential of the system for teaching Object oriented programming to students even of age 14. The concept where a student get to create something and show off the creation is the most …

– Summary: mainframe COBOL programmers the concepts of object oriented programming. … apps, J2EE apps, C# apps, or Ruby apps. … My specific goal is not to teach any language specific thing (though I …


Other post in Opinion

Related Post

  • Do Programmers even NEED a degree?Do Programmers even NEED a degree? Well, a post that is no longer available really got  things going in blog-o-sphere.  Shoot!  Even Joel Spolsky got involved.  I saw another post, but I'm sorry to say, I can't find it […]
  • Why Programmers Can’t ProgramWhy Programmers Can’t Program Jeff Atwood of Coding Horror writes: “I find it difficult to believe, but the reports keep pouring in via Twitter and email: many candidates who show up for programming job interviews […]
  • How to be a Lucky ProgrammerHow to be a Lucky Programmer I’ve been studying topics related to social science recently and one item that keeps popping up in various places is the idea of luck.  It turns out that lucky people aren’t really all […]
  • What if Everything Was Immutable?What if Everything Was Immutable? The first time a programmer who was trained in the classical procedural/object oriented history is confronted with the concept of making everything immutable, the first question that comes […]
  • Why Start A Blog?Why Start A Blog? So everyone says that as a programmer, you should start a blog.  And yet, so few of us do.  Why is that? And so, I thought I’d spend time today giving you even more encouragement to […]

About Dave Bush

Dave Bush is a Full Stack ASP.NET developer focusing on ASP.NET, C#, Node.js, JavaScript, HTML, CSS, BootStrap, and Angular.JS. Does your team need additional help in any of the above? Contact Dave today.

  • Adrian

    I too think that going back to procedural programming will get us back on the right track.

    I was always told that without objects your code would be a huge mess and nobody would be able to see through it. That turned out to be a huge lie.

    Code libraries always existed, were used, allowed for “modular” design and can be reused.

    In my limited point of view the real issue is the devide-and-conquer strategy. It just creates horizontaly located objects that talk together and fulfill the applications needs.

    What you want though is a clear vertical hierarchy, like a folder structure. This is nature’s architecture, it is a fractal. Meaning the biggest part consist of smaller parts which can also consist of even smaller parts.
    And the bigger one is just one of the smaller parts of an even bigger folder.

    With that you get the typical tree structure, which is easily expandable in every direction.

    Software is not designed like this mainly because object oriented approaches emphasize on inheritance rather than extension. In hierarchies they only see objects or classes which derive from base classes.

    And Inheritance will also give you a vertical hierarchy and is very suited for User Interfaces but the rest of the application also needs to be designed in a vertical way.

    That being said, objects are not evil and are the way to go for certain tasks, not even few, but modern world is about creating “Independent” objects, which is never possible and they try to archieve that by abstracting. But this is getting absurd.

    One last thing I want to say is, that you can’t even define an object outside of a context. You can’t define what a teacher is if there is no student. Yet OOP always does it. The world is just a dialog between parts of itself. So really more about procedures than objects.

  • Adrian

    Object Orientation is not the way I want to talk to the computer. I look at huge diagrams consisting of object-relationships and have no clue what the program is really doing. Most of them have abstract names and minor meaning.

    Maybe this is a way of thinking or solving a problem many programmers are comfortable with, I myself am not.

    I did a bit of research and it revealed that organizing your code into modules and especially nesting them together will still result in a modular application.