<story><title>OOP no longer mandatory in CMU Computer Science Curriculum</title><url>http://www.infoq.com/news/2011/03/oop-out-at-cmu</url></story><parent_chain></parent_chain><comment><author>forkandwait</author><text>My rule of thumb with OOP (of which I am very proud):  if a bunch of code needs to retain state, make it an object, but if not, make it a function.  Also, in a class, you should either have glorified getter/setters (to set the state, possibly in complicated ways) or stateless functions (to execute algorithms).  This approach makes it far easier to test, since you have less set up and tear down.&lt;p&gt;To teach object oriented programming as if it is theoretically foundational, or should precede simpler concepts is a nice bit of foolishness that lasted from excitement over Smalltalk to, say, last week.&lt;p&gt;I think the blossoming of GUI&apos;s -- which have A LOT of state -- is the historic reason for the excitement over OOP, not any theoretical advantage to OOP.</text></comment>
<story><title>OOP no longer mandatory in CMU Computer Science Curriculum</title><url>http://www.infoq.com/news/2011/03/oop-out-at-cmu</url></story><parent_chain></parent_chain><comment><author>carterschonwald</author><text>several remarks worth mentioning, as the infoq page seems to be editorialized link bait begging to foment a flamewar.&lt;p&gt;Bob Harper and (his now graduated phd student) Dan Licata are (world class) experts in programming language semantics. What does this mean? They understand in a very very precise sense how difficult it is to correctly understand the exact semantics of various linguistic constructs.&lt;p&gt;Why is this important? Because some of these freshmen will not have had a solid grounding in understanding the most basic of the tools they use, the programming language. These students should come away from their intro class not burdened by confusion over syntax and boilerplate need to use the built in language constructs, but rather a precise enough mental model of the semantics for a basic programming language that they can accurately simulate the execution of their programs with pen and paper, or just in their heads!&lt;p&gt;Yes objects do provide some occasionally fantastic abstraction facilities in certain use cases in practice, but every semantic model for real OO languages is INCREDIBLY complex, let alone considering what is needed for having a &lt;i&gt;correct&lt;/i&gt; cost model for operations in an OO language once you consider how many OO abstraction are represented by nontrivial lookup operations / data-structures.&lt;p&gt;What I think is more interesting is the following 
1) they&apos;ve come up with low overhead ways of teaching parallelism constructs directly to intro students&lt;p&gt;and 2) this course is part of a larger system of classes that include their intro imperative programming class being taught by Frank Pfenning (an expert in mechanized theorem proving such as might be used to verify program correctness)that teaches a lot of the basic  algorithms / datastructures that are easiest to first see framed imperatively,&lt;p&gt;and 3)they&apos;re having the intro algorithms &amp;#38; datastructures course be taught by Guy E. Blelloch, who&apos;s done a great amount of good research in a huge number of algorithm topics.</text></comment>