"The first thing we do, let's kill all the Object Oriented Programming."

Shakespeare GlassesDon't blame me, blame Shakespeare. His idea not mine (Henry VI, part II, act IV, scene ii).

I was reading Leigh Ann Sudol's interesting blog posts on computer science and education. When I came across a reference to a new curriculum being developed at CMU. Specifically the move, to introduce a modernized, introductory CS curriculum. This curriculum would introduce functional programming and parallelism early, even in the freshman year. It eliminates OOP entirely from introductory classes because it is "anti-parallel," among other sins.

To me this seems an exemplary experiment. I have both spoken on, and attended numerous panels at SIGCSE, Supercomputing and elsewhere, where these very questions are debated. Usually, the rejoinder, "Well, what are you asking us to eliminate, if you want to include parallelism?" is thrown out as both a challenge and, in some cases, a question meant to end the debate. I am glad to see that at Carnegie Mellon and elsewhere, the spirit of innovation is alive and well. I will be watching the progress of their program with interest.
What do you think about their approach? What would you do?
For more complete information about compiler optimizations, see our Optimization Notice.


anonymous's picture

Maybe at long last the truth is out there. OOP has never been proven to be more effective than traditional programming and its overuse of a large number of poorly defined (and badly named) terms makes even normal programming very confusing indeed. Just compare the number of current OOP terms to, say the ones in procedural programming, and it speaks for itself. The claims that OOP makes code re-use easier is also just plain wrong. Serialization also makes a complete nonsense of encapsulation, data hiding, compact data encoding and persistent/distributed objects (what happened to all the methods then?).

anonymous's picture

The problem of commercial software development is not that of how to have a room full of Seymour Cray build the very best supercomputer possible, it is rather how to make an office park full of very average, very young, fresh (i.e. cheap) graduates, probably recent arrivals with dubious language skills (i.e. even cheaper) crank out dull business systems as rapidly and as reliably as possible. Software, as it is practised by the majority today, isn't about making a better product, it's about reducing the production costs of a mundane product.

You can't run a business on a supply of "tall thin men", there just aren't enough of them.

dan_ernst's picture

As always, I agree entirely with Dave. Someone needs to put together a topic map of these things - where does OO actually fall?

I heard a bit about the CMU efforts at the NAS Symposium I attended this spring. I'm looking forward to seeing their results. (and their methods)

Dave Valentine's picture

I still remember attending an NSF-funded Chautauqua workshop on "How to Teach OO in Introductory Programming." The first thing out of the instructor's mouth was: "Don't even try." He then shared with us about a 1" high stack of flaming messages he had copied from an online debate about "Can HelloWorld be an object-oriented program?" It was pretty depressing.

Those of us in the workshop reached a consensus that the fundamental skills of problem solving, problem decomposition, stepwise refinement, and such were too easily lost when trying to get novices up over the hump of OOP. I think the "anit-parallel" aspects you mention simply reinforce this position. OOP has its place, and parallel has its place; both of them build on a common fundamental skill set that (honestly) deals more with clear, linear thinking and problem solving than "where to put the semicolon."

gthomaz's picture

I can't agree with idea of "kill OO". But, I really agree with Tim Lee explanation. We need learn to think by the 2 ways: like a human and like computers. Each concept has your advantages or weeknesses, we just need to get the better of each one . Maybe could be more dificult for someone who learn first OO understand parallelism concepts. If its true, our education system really need to change and realize about it too.

anonymous's picture

Object-oriented programming poses a systematic obstacle to vertical integration of hardware and software, so it should be killed.

To make the most productive engineers possible, computer science schools should help students learn to span the range defined by computer hardware at one extreme and the human mind at the other, because software requires an understanding of both. Boolean logic is needed for circuits, but Aristotelian logic is required for general reasoning and concept formation.

Carver Mead coined the phrase "tall thin man" to describe the type of person who can understand a complex system from the most concrete detail to the most abstract level. An example of this type of person is Seymour Cray, the legendary computer designer who was capable of producing vast computing power through the use of intelligent vertical integration.

Imagine the kind of world that can be built by many such tall thin men.

Add a Comment

Have a technical question? Visit our forums. Have site or software product issues? Contact support.