CMU is removing object-oriented programming from its freshman courses because it's anti-modular and anti-parallel. What is to replace it?
This is another one of those storms in a tea cup but it is quite interesting and provides a useful measure of where we are in the theory of programming.
In a blog post professor Robert Harper delivers the news that the Carnegie Mellon University (CMU) Computer Science department is removing the required study of O-O from the Freshman curriculum. The reason he gives is interesting:
"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. A proposed new course on object-oriented design methodology will be offered at the sophomore level for those students who wish to study this topic."
You might be surprised by the use of "anti-modular" and "anti-parallel" in connection with OOP which was designed to be modular and doesn't really help or hinder parallel programming. While it is true that many OOP languages in use could do both better, taking the criticism one stage further to the underlying philosophy seems a step too far. In addition there are quite a few object-oriented extensions that do parallel programming very well.
Two courses replace the OOP content. One is "Principles of Imperative Computation" and guess what the language is that it uses? It is C and a subset at that. If you look at the course notes what you have is a good introduction to algorithms nicely expressed as procedural code complete with assertions and invariants in comments. It is very nice but the course notes could have come from the 1970s and don't really represent a step forward or anything controversial. Indeed it is a really good idea to teach procedural coding before moving onto OPP - far too many programmers are great at constructing object hierarchies but can't write an elegant method.
The second is on functional programming and you can't help but jump to the conclusion that it is this paradigm that is really pushing OOP out of the curriculum. The course is being taught using Standard ML, which is hardly a popular or important language at the moment - but these are no reasons for not using it as a teaching language. The class notes commend functional programming because it allows verification, parallelism and abstraction - all of which is correct but there is little hard evidence that functional programming is the way to go in the future for the mainstream of programming.
What is interesting is the way that this decision has polarised attitudes. There are some (who obviously never got the ideas in OPP) who simply say "great - let's sweep it all away." Then there are the functional programming enthusiasts who think that this is obviously the way things should be done. And finally there are the programmers who have been using OOP for so long that they can't remember or imagine that there ever was another way who find the rejection appalling, mystifying and somehow ungrateful.
There is no doubt that it is difficult to use an object- oriented language and approach to teach complete beginners how to create algorithms - there are just too many overheads that have nothing to do with algorithmic computation. For this reason using C or another procedural language makes good sense as a way to get the beginners brain booted. Moving on to objects then seems like a natural step given the current state of real programming. Add functional as an extra to give students an idea that there are other ways of doing things - but do not present it as a way of rejecting OOP.
Blog entry about removing O-O from the curriculum
Functional programming course
Imperative programming course