Object Oriented Programming is Dead
OK perhaps not dead but Robert Harper, a professor at Carnegie Mellon University, says(Teaching FP to freshmen) that object oriented programming and design is “unsuitable for a modern CS curriculum. ” More of the quote in context is:
"Object-oriented programming is eliminated entirely from the introductory curriculum, because it is both anti-modular and anti-parallel by its very nature, and hence unsuitable for a modern CS curriculum."
As you might imagine there is some dissent in the comments. When I posted this link to my Facebook page there were some 16 comments, mostly in disagreement, in a short period of time. One person, who hires people for industry responded with “I'm tired of interviewing interns who know Haskell but can't code up strlen() in C. ” But as Robert Harper says in a reply to a comment on his post “Our goal at Carnegie is provide students with an education, not training.” What does that mean anyway? Is there a conflict between industry and academia? Academics often believe that “There are plenty of opportunities for them to learn the old ways, and to pick up industry practices on the fly” while industry hiring managers lament the fact, as one VP told me, that it takes an average of a year and a half to turn a recent college hire from a good school into a fully productive software developer. Is is any wonder that many companies prefer not to hire people right out of college?
I’ve seen programming paradigms come and go. I started programming as industry (and academia) were adopting structured programming. That was a big advance at the time but required some changes in the way people thought and designed code. Later I lived through the long, slow and at times even more painful transition to objected oriented programming. Are we entering the age of functional programming? Perhaps. But perhaps not to the exclusion of other paradigms.
We do have new needs today. While first structured and later OOP developed to support the needs of larger programs and larger teams of developers as well as the needs of dealing with more data today the key new issue is parallelism. One of the design goals behind the development of F# (a functional language that is built into Visual Studio) is parallelism and making it easier to spread work across multiple processors. Clearly that is where we have to go to continue to be able to take advantage of the newest hardware. But does that mean OOP can become optional or that we can wait for students to learn it after college? That I am not so ready to buy.
Even at the peak of OOP mania I have maintained that not everything has to be an object and that a mix of paradigms would/did/does work. I think that is still going to be the case even as functional programming grows in usage and popularity. But will old style programming completely go away? I don’t think so.Will objects go away? Not a chance. I think universities, especially those who provide an “education not training” do their students a disservice if they ignore the reality of what is currently in the field. The handwriting is on the wall and functional programming is going to continue to grow in importance. But ignoring OOP now is not doing anyone any favors. Just my 2 cents.