Robert Harper and Dan Licata, Professors of Computer Science at Carnegie Mellon University, announced last week that they have decided to "eliminate entirely" OOP from the CS introductory curriculum.
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.
Prof. Harper and Licata will be teaching a new course on functional programming to first-year prospective Computer Science majors. The curriculum also includes:
a new course on imperative programming created by Frank Pfenning, and a planned new course on data structures and algorithms, which will be introduced by Guy Blelloch this fall.
Philip Schwarz commented:
Why do you say that OO is anti-modular?
In Object Oriented Software Construction, Bertrand Meyer showed that OO decomposition meets all of the following:
5 criteria:
Modular Decomposability
Modular Composability
Modular Continuity
Modular Protection
Modular Understandability
5 rules:
Direct Mapping
Few Interfaces
Explicit Interfaces
Information Hiding
Small Interfaces (weak coupling)
5 principles:
Linguistic Modular Units principle
Self-Documentation principle
Uniform Access principle
Open-Closed principle
Single Choice principle
In a world that is increasingly "actionable" as opposed to "executable" because every system today is a distributed system, in an era where software architecture has not yet emerged at the programming model level despite attempts like Enterprise Java or Spring, is it really reasonable to step back to train new generations of future Software Engineers just on the basis of the merit of functional programming? Is it really important to focus on "programming" when software engineering is mostly a "system engineering" activity.
It might, at a very minimum, be important for this new generation to include in the CS curriculum what what Barbara Liskov, winner of the 2010 Turing award, had to say about Functional Programming.