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 used 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 used 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.