Object Oriented Programming Is Not an Excuse for Forgetting to Design Your System
This post is dedicated to a lecturer that I am taking a class with this semester at Texas Tech University. This person doesn’t like object-orientated programming (OOP), which I do love (I <3 Java big time). His main argument against Java and other object-orientated based programming languages is that it pushes people away from developing a mathematical model of both the problem and solution. Instead the desire is to create an object for everything in the system and develop some sort of algorithm that solves the problem, disregarding that you could possibly model the system and use a general algorithm to solve the problem.
I have a problem with the argument that OOP is the culprit for this much larger problem of programmers not modeling the system and instead going straight to code before thinking about the problem. This isn’t just a problem that occurs in OOP but rather I see all the time. It’s a problem that challenges all types of programmers disregarding their tool set or language. The real problem is a problem with both the education system and the dumbing down of the programming industry.
All right so two pretty hefty arguments, let’s tackle the first; that the current education system of training computer scientists is to blame. This is based on what I have observed in terms of my own schooling and what I read from around the web from such readers as Joel Spolsky on the current education system. The current education of CS students tends to rather than provide life like problems that need to be solved and working the students through the process of solving these. It instead is designed to introduce the students to as many topics regarding technology and computers as is possible. This is a good thing, don’t get me wrong but invariably something has to suffer, and what does is the problems. The problems are introduced at a level that is so close to the computer solution it is ridiculous. Give a student a classic CS problem and most will have no idea where to start much less create a viable solution. This is a real problem of the students graduating from college now a days.
This goes into the second argument which is that the degree as a whole is being dumbed down. The CS degree is under a lot of attack from a lot of fronts. You have “technical schools” that will let you graduate in two years with all the experience you need to be a web programmer and make millions tomorrow. These graduates of these “schools” that compete for the same jobs that CS graduates from real colleges are competing for. This is a different problem from the earlier one of colleges not providing real life problems. However this is a problem that the majority of the career fields have solved by having a sort of professional test to determine if someone is say a professional engineer, or passing the bar exam to be qualified to practice law in a state. Computer Science has nothing like that in any fashion. I’m not entirely sure that would be the best answer to solving this problem, but it is definitely a problem that is going to need to be worked on
Blaming OOP for a problem that isn’t the tool’s fault is an even greater problem. This popped up on the blogosphere a while back that Java shouldn’t be taught anymore to students. I think this argument misses the real problem which is the general dumbing down of the industry in terms of non-qualified applicants being introduced and the education system losing it’s focus.