OOP is out of the CMU Computer Science Introductory Curriculum

  • Thread starter Thread starter KaiRu
  • Start date Start date
Joined
8/18/10
Messages
153
Points
38
http://www.infoq.com/news/2011/03/oop-out-at-cmu

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.

IIRC, CMU was the first university where they introduced Master in Computational Finance with a good portion of C++. And now they are the first to drop OOP out of their curriculum for the 1st year CS students. Imo, it's quite interesting trend - while CS deparments around the world introduce more and more FP courses for their students we see that MFE programms look for C++ and OOP approach as the only viable option, however functional programming seems to be a lot more math oriented than OOP.
 
MFE programms look for C++ and OOP approach as the only viable option, however functional programming seems to be a lot more math oriented than OOP.

It depends. Let's take a look on F# (which I am aware of a little). You are limited in capabilities of creating many platform independent features. Some quant careers need .NET developers which are to be feeling more flexible in object oriented programming rather than functional one. However in overall point " functional programming can dig into deep math which is to be combined with programming complexities in OOP.
 
In my opinion as a Software Engineer - I think you need to learn both. I think teaching OOP alongside C++ and Functional programming alongside Haskel would be a good introduction for any CS student.

It would certainly give you the basic tools to tackle everything from Java to C# , Lisp and JavaScript.
 
OOP is enough I think for doing quantitative job. The issue can be how to fit it. Functional programming has a limited use since you are only capable to EFFECTIVELY handle the mathematical calculations but other OOP resources and advantages should be of concern of course. So OOP has a huge opportunity cost of being replaced but functional programming has less.
 
It seems to me a bit short sighted to remove OOP from the course IMO. Going into the job market with no knowledge of it is a slightly scary prospect, how many employers are going to just throw your resume straight in the bin?
 
It seems to me a bit short sighted to remove OOP from the course IMO. Going into the job market with no knowledge of it is a slightly scary prospect, how many employers are going to just throw your resume straight in the bin?

Which do you think is more widely used??? Job market is all about frequency of demand on a particular specialization. People have lived without OOP but not object based languages are getting lost from use since they realized where the ease, speed and effectiveness lays.
 
It depends. Let's take a look on F# (which I am aware of a little). You are limited in capabilities of creating many platform independent features. ... However in overall point " functional programming can dig into deep math which is to be combined with programming complexities in OOP.

F# is a very small part of the FP world. Erlang and Haskell have very mature implementation of their VM available on Win, Lin and Mac. Lisp and ML are not far behind.

F# on the other hand has it's own place - functional programming in the .NET/Excel world where it's nice to have.

However in overall point " functional programming can dig into deep math which is to be combined with programming complexities in OOP".

Perhaps I missed a point but why do you need to combine something with programming complexeties if you can avoid it? ;)
 
Which do you think is more widely used???

Well from my experience of software contracting OOP is used everywhere, from ActionScript through to Java and PHP. Regardless if you use it or not, a hell of a lot of code out there is written using OOP. I think most employers expect you to understand OOP.
 
Hi @KaiRu

I mentioned F# since it is the language I had a little touch with. I agree it is a very small part of functional programming. As for the quote above:

Perhaps I missed a point but why do you need to combine something with programming complexeties[/b] if you can avoid it?

You are able to replace FP with OOP in today's languages. You are much more flexible to use OO languages but are limited to mathematical calculations only in FP. (Or at least have no flexible tools)
 
I don't have a strong opinion on whether OO should be in the 'introductory' curriculum, and see some value in this choice, since it gets kids early before they code everything as for() loops.

That may surprise those who read my thoughts in various media, where I deride the majority of CS courses at some length and with emphasis.

I am of course a C/C++ bigot, but C++ code is an expression of my thoughts. not the thoughts themselves, a Real programmer thinks in a far richer framework than he codes. Some of my thoughts are functional, indeed anyone with a competent mathematical education must necessarily experience discomfort expressing some ideas in the iterative/recursive form that most programming languages require.

Functional programming this thus a necessary part of a programmer's education, even if he ends up debugging legacy VB code in an Indian sweatshop, indeed it is FP that will help him avoid that fate, since he can choose between more ways of solving problems.

Connor says that OO was the big thing when he was a student, actually I was there when OO was muscling in against FP, which is part of the primordial soup of programming culture, and some key CS ideas are very much harder to understand if you don't have FP in your vocabulary.

I'm also indifferent as to which FP language to choose, I see growth in F# and think that's a good thing, but am forearmed for any FP language religious war people around here may choose to have.

For the very specific subset of programming used in this line of work it's clear that FP has a lot to offer.
For a start, we have long lost the luxury of being able to write high end code as if it could be efficiently executed in a single thread on a single CPU, and FP offer a route to make that transition easier.

Also, let's be very clear about the majority of the code you people will be writing in your career, >95% will not be in any meaningful way performance critical, some of you will never ever write a program where anyone notices that it's fast or slow.

They will notice that the bloody thing ain't working yet. They will notice this quietly as first, then more insistently and during your career assume there will be cases where a number of highly focused bankers notice that your code ain't working yet. They may even notice with extreme prejudice. If FP gets the job done, then screw with the critical parts to make them go faster later, or recode.

Let me share an iron rule in the micropolitics of software a development, a programmer who gets something out quickly, then makes version 2.0 run faster is a hero, one who takes exactly the same time to produce one equally efficient program with no intermediate delivery is reporting to the first programmer and earns less.
 
Let me share an iron rule in the micropolitics of software a development, a programmer who gets something out quickly, then makes version 2.0 run faster is a hero, one who takes exactly the same time to produce one equally efficient program with no intermediate delivery is reporting to the first programmer and earns less.
So if I were to release two intermediate versions, would I be a boss?
 
Let me share an iron rule in the micropolitics of software a development, a programmer who gets something out quickly, then makes version 2.0 run faster is a hero, one who takes exactly the same time to produce one equally efficient program with no intermediate delivery is reporting to the first programmer and earns less.

In 25 years of SW consulting, I've found this to be true only if the second programmer works in secret. If the customer is educated by the programmer, and relentlessly informed of honest status, there is no difference between the two approaches. In the case of the first programmer, there is the danger of delivering an under-performing product (that is, if efficiency is only a matter of time and design, why wasn't that done in the first place?).
 
Some of my thoughts are functional, indeed anyone with a competent mathematical education must necessarily experience discomfort expressing some ideas in the iterative/recursive form that most programming languages require.

By definition I think a functional language is one which relies on the recursive definition of functions. Not that you are saying any different. Iteration and recursion are the workhorses of just about every programming language. The only exceptions might possibly be logic-based and/or dataflow languages (which I don't know).

I was there when OO was muscling in against FP, which is part of the primordial soup of programming culture, and some key CS ideas are very much harder to understand if you don't have FP in your vocabulary.

I'm not sure functional languages have ever been that big in the marketplace. Perhaps you mean languages like C, Fortran, etc. -- von Neumann languages -- were shouldered aside.

Hard and fast distinctions between languages based on the imperative-OO-functional taxonomy are difficult. A language such as C# 4.0 contain aspects of imperative (i.e., von Neumann), object-oriented, and functional (e.g., Lambda expressions).
 
I've linked it in another thread on this forum (this one was also about C++/OOP, these discussions just seem to have to pop up over and over again), and I'll link it once again: http://www.faqs.org/docs/artu/unix_and_oo.html, from Eric Raymond's "Art of Unix Programming". This is the quote summing it up:
The OO design concept initially proved valuable in the design of graphics systems, graphical user interfaces, and certain kinds of simulation. To the surprise and gradual disillusionment of many, it has proven difficult to demonstrate significant benefits of OO outside those areas.
My own experience (~15 years) is strongly supporting above statements. And from my limited touch with the world of quantitative finance, I'd say Monte Carlo and alike simulations are not of the kind mentioned above, that would absolutely require OOP approach in order to be able to handle their complexity.
 
mikeb, you're right, but it is the case that often programmers are working in secret, either becasue they don't tell, or because their management doesn't ask. I should clarify that I'm specifically talking about financial software development where the "if I don't see something, it does not exist", view is the norm amongst people in charge of IT.
 
Back
Top Bottom