Slashdot Mirror


CMU Eliminates Object Oriented Programming For Freshman

fatherjoecode writes "According to this blog post from professor Robert Harper, the Carnegie Mellon University Computer Science department is removing the required study of O-O from the Freshman curriculum: '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.' It goes on to say that '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.'"

755 comments

  1. Hmmm ... by WrongSizeGlass · · Score: 0

    So OO Programming because it's unsuitable for a modern CS curriculum. I guess we should go back to just assembly language so we can make sure we never go down this road of false progress again.

    1. Re:Hmmm ... by mellon · · Score: 4, Insightful

      I don't know about *starting* in assembler, but a programmer who isn't somewhat proficient in assembler is going to have a very weird mental model of how programs work. OOP has the same problem--it's not that OOP is bad; it's that if you start out with an OOP language, you don't learn a lot of things that are important to understand. Once you know how the machine works, then you can start studying abstraction. Treating OOP as the only way, or even the best way, to solve any computing problem is going to tend to produce programmers who think everything is a nail. It doesn't mean that there are no nails, nor that students shouldn't learn to swing a hammer.

    2. Re:Hmmm ... by WrongSizeGlass · · Score: 3, Interesting

      Agreed ... but aren't most modern OS's OO based? In most cases students need OO programming in order to become employable. OO certainly isn't the holly grail of computing but it is entrenched in business and needs to be taught just like COBOL was all those years ago (when I had to learn it even though it was like writing a book every time I wanted to write a small program).

    3. Re:Hmmm ... by Anonymous Coward · · Score: 0

      I agree with you except for your use of proficient. I think familiar would be a better term. Not many are programming in assembler and if a real programmer needs to, they'll be able to because of their skills in modern programming (which includes OO Programming), math skills and ability to learn new computer languages will permit them to.

    4. Re:Hmmm ... by Anonymous Coward · · Score: 1

      I don't know about *starting* in assembler,...

      Why not? What better way to start a CS program than learning how to program an actual computer without all the abstraction? And then go to some mid-level language like 'C' from there and then a higher level language from there - all the while implementing data structures and algorithms in those languages: like parallelism.

      Languages are just syntax of an abstraction of the processor instructions and it pains me when I see posts about how one language is "better" than another for a particular job or the "right tool for the job" - we're talking about CS NOT carpentry.

    5. Re:Hmmm ... by Anonymous Coward · · Score: 0

      Assembler is a great start, but far better to hand wire logic gates and address decoders to have a real feel for what's going on.

    6. Re:Hmmm ... by immaterial · · Score: 4, Funny

      Given its toxicity to humans, I recommend avoiding drinking from the holly grail altogether.

    7. Re:Hmmm ... by oliverthered · · Score: 1

      well if you teach bad OOP then yes, if your good at teaching it and you pick as sensible language (for simplicity) or use good patterns... then the problems mentioned are solved by the very thing they claim is inherently against it.

      --
      thank God the internet isn't a human right.
    8. Re:Hmmm ... by Anonymous Coward · · Score: 0

      Why not? What better way to start a CS program than learning how to program an actual computer without all the abstraction?

      Why not just go program in machine code? No abstraction there!

    9. Re:Hmmm ... by obarel · · Score: 1

      Yes, but how do you create a transistor? Do you just buy one?

      I think all studies should start from scratch - throw you on an island and let you invent calculus yourself. What's the point in progress if you can't explain it to a 10 year old in two sentences?

    10. Re:Hmmm ... by salesgeek · · Score: 4, Informative

      Um. No. Many modern libraries or "frameworks" (newfangled word for library) are OO. Most OSes remain written in classic system programming languages like C and assembly language. In fact, most frameworks start as object oriented wrappers for certain OS calls and cruft up from there.

      --
      -- $G
    11. Re:Hmmm ... by osu-neko · · Score: 5, Insightful

      Agreed ... but aren't most modern OS's OO based? In most cases students need OO programming in order to become employable. OO certainly isn't the holly grail of computing but it is entrenched in business and needs to be taught just like COBOL was all those years ago (when I had to learn it even though it was like writing a book every time I wanted to write a small program).

      And how is this an argument for including in the introductory, freshman curriculum? I put forward the possibility that some topics may be more appropriate to be taught to students only after they've learned the basics.

      --
      "Convictions are more dangerous enemies of truth than lies."
    12. Re:Hmmm ... by Assmasher · · Score: 4, Interesting

      If it means they stop doing everything in Java throughout their education, I'm all for it. There's nothing wrong with Java, and I use it often in my current company, but kids in school need to learn from the get go that languages are tools in a toolbox - use the right tool for the right job when you can. I can't remember the last time I interviewed a graduate who had used C++ or C outside of a single survey course on the language! Hell, I can't remember the last time I interviewed a post 2000 graduate who had built their own processor or had even taken an assembly class. The kids are just as smart, just as eager, but woefully unprepared. The one thing they are getting a little better at is included some 'software engineering' into the curriculum - but only a little bit better in that they do 'projects together' which in my experience means that the alpha nerd does 90% of the work and the other 4 team members offer worship and keep the ramen coming.

      --
      Loading...
    13. Re:Hmmm ... by wisnoskij · · Score: 1

      Ya I am not really sure I believe this article either, sure OO is not great for parallel but it seems a lot better then any alternative to OO I have ever heard of.
      And I can say for sure that at the university of Waterloo (the leading school for software engineering in Canada, by far) OO is still the leading thing they teach freshmen programmers/software engineers.

      --
      Troll is not a replacement for I disagree.
    14. Re:Hmmm ... by narcc · · Score: 2

      far better to hand wire logic gates and address decoders to have a real feel for what's going on.

      Laugh all you want, but this was a big part of my intro to CS class way back before "CS" turned in to "using Visual Studio".

      Programming is a useful skill and should be taught to CS students, that isn't in question. However, college isn't (or shouldn't be) a trade school. Programming is a bit of an art, and consequently shouldn't be a major part of any CS curriculum, certainly not the dominant part as it seems is the case at far too many institutions.

      That said, first year students should learn to program, I'd recommend BASIC for learning basic concepts like iteration, flow control, etc. followed by an assembly language where they can get close to the machine while learning what's really going on as they implement common algorithms and data structures.

      After that, it really doesn't matter what language they use in the rest of their core courses, as there shouldn't be a need to spend any time on even a new language in the rest of their core courses. Any class time spend on "how-to do blank in language x" is a huge waste.

      On OOP specifically, I agree with CMU -- it's both anti-modular and anti-parallel. In short, it's a failed paradigm. Look at the hideous mess modern languages have become as a result of the nearly religious devotion to this astonishingly over-hyped and ill-defined concept! (Before the terminally incompetent chime in: objects are great, OOP is not.)

      I applaud CMU for taking action here -- let's hope other colleges and universities follow.

    15. Re:Hmmm ... by Anonymous Coward · · Score: 0

      I thought the article was the most idiotic piece of written work about IT I've seen in my life... until I saw your head-down comment. And to have it modded as Insightful, congrats on first class trolling... but then that classic Groucho phrase applies "I'd never join a club that would accept me": is it worthy to get such a high modding from people you fool so easily?

    16. Re:Hmmm ... by wisnoskij · · Score: 1

      If you are going into a programming course in univ you probably already know at least the basics of programming.
      And OO is not a complicated extra of programming, it is a simple ideology that makes programming so much easier when you know it.

      --
      Troll is not a replacement for I disagree.
    17. Re:Hmmm ... by wisnoskij · · Score: 0

      Completely agree, no one will hire you if you do not know OO. because after you are gone no one will be able to use your code and while you are there you will not be able to use others code.

      And it should be taught early, because schools often have coop programs that send freshmen to programming jobs, and knowing OO makes everything else about programming easier.

      --
      Troll is not a replacement for I disagree.
    18. Re:Hmmm ... by Jesus_666 · · Score: 1

      Admittedly I never designed my own processor (I only got as far as taking a few introductory chip design courses) but yes. I'm working on getting my university diploma (the only below-doctor degree Germany used to have) and I was exposed to a variety of languages over the course of my studies. C was mandatory, as were CSP, PROLOG and Haskell, even though the university was nominally Java-centric. C/C++ was used in a lot of courses, not just the basic "this is how an OS works" ones. (Assembler was only briefly touched on, though, as a side sbject to formal verification of program code.)

      Now they've switched over to a master/bachelor system. When talking to people studying for the new degrees I'm horrified. The curriculum is essentially fixed, there's minimal choice and you can get a BSc without ever being exposed to any language other than Java. Yeah. That's going to give them deep insight into how programming works.

      --
      USE HOT GRITS WITH STATUE OF NATALIE PORTMAN (NAKED AND PETRIFIED)
    19. Re:Hmmm ... by neumayr · · Score: 1

      If you are going into a programming course in univ you probably already know at least the basics of programming.

      You'd be surprised. But that is not a bad thing. Ideally, CS should be to programming as physics is to engineering. It's called a science after all.

      --
      Truth arises more readily from error than from confusion. -Francis Bacon
    20. Re:Hmmm ... by wisnoskij · · Score: 1

      Well they cannot model the course after the 1% who don't know anything.

      --
      Troll is not a replacement for I disagree.
    21. Re:Hmmm ... by CptPicard · · Score: 3, Insightful

      I actually have never believed that assembly is in any sense informative or educational because "it is how the computer works". It's actually a remarkably hard to decipher representation of a program, and what the program is and does is the important part.

      I consider myself quite a strong programmer, and I never think in terms of assembly when writing programs. Higher-level languages, in particular functional programming languages, are far closer to my mental model of things. Why not work in a language that represents or helps formulate the problem-space abstractions better?

      --
      I want to play Free Market with a drowning Libertarian.
    22. Re:Hmmm ... by neumayr · · Score: 1

      When someone's talking about applying a tool to solve a problem, as opposed to coming up with new ways to solve problems, she's not talking about computer _science_. It's closer to carpentry or, depending on the scale, engineering.

      --
      Truth arises more readily from error than from confusion. -Francis Bacon
    23. Re:Hmmm ... by GameboyRMH · · Score: 1

      the alpha nerd does 90% of the work and the other 4 team members offer worship and keep the ramen coming.

      Haha I remember being the alpha nerd... :-(

      --
      "When information is power, privacy is freedom" - Jah-Wren Ryel
    24. Re:Hmmm ... by Svartalf · · Score: 1

      In order to be "employable" they need to know fundamentals as well as those modern languages. Those that're just taught OO actually have gaps in their knowlege coming out of college and think in a "just so" way like the parent says- and it's noit "all good" for what the business needs. Many of the high profile failures seem to stem from OO-only thinking.

      --
      I am not merely a "consumer" or a "taxpayer". I am a Citizen of the State of Texas
    25. Re:Hmmm ... by Shinobi · · Score: 0

      Then you are not a very strong programmer at all. Assembler is necessary to understand exactly how a processor works, and how well any given algorithm will work on that architecture.

      Which is why a certain CS professor, you may have heard of him, he's called Knuth, uses Assembler in his somewhat reasonably well-known(some would call them the bible of CS) books.

    26. Re:Hmmm ... by sammyF70 · · Score: 1

      Either use a physical board or a simulator (I seem to recall there is one of those as part of the GCompris suite) and build different logical gates out of wires, switches and some lightbulbs (or chainsaw/lasers/fricking sharks if you get more kicks out of it). Once you've done this you will actually understand how a modern computer actually works. The difference between what you built and a real world processor is quantitative.

      --
      "DRM is like the Ford Pinto: it's a smooth ride, right up the point at which it explodes and ruins your day."-C.Doctorow
    27. Re:Hmmm ... by Anonymous Coward · · Score: 1

      Yes, but how do you create a transistor?

      You look over the shoulders of Jeri Ellsworth and imitate.

    28. Re:Hmmm ... by TheRaven64 · · Score: 2

      Ya I am not really sure I believe this article either, sure OO is not great for parallel but it seems a lot better then any alternative to OO I have ever heard of.

      OO is great for parallel programming. The actor model of concurrency comes from object orientation! A number of OOP concepts come from Simula, which was designed for writing concurrent systems. It is a bit less good for implicit concurrency, but it's still pretty good if you have some profiling data to determine when it's sensible to insert the concurrency.

      I read TFA when it was published a few days ago and it sounded like a theoretician trying to push the functional programming agenda by spreading FUD. There are some things that work really nicely in functional programming (e.g. software transactional memory via monads), but most highly scalable code uses a model where you have simple sub-programs that communicate via message passing, which (according to Alan Kay, who coined the term) is the definition of object oriented programming.

      --
      I am TheRaven on Soylent News
    29. Re:Hmmm ... by Anonymous Coward · · Score: 0

      I can't remember the last time I interviewed a graduate who had used C++ or C outside of a single survey course on the language! Hell, I can't remember the last time I interviewed a post 2000 graduate who had built their own processor or had even taken an assembly class./quote
      Time to look at Computer Engineers.

    30. Re:Hmmm ... by maxwell+demon · · Score: 1

      You have to know both.
      Yes, Assembly isn't well suited to solving problems in it. But then, you are not learning assembly in order to better solve problems (well, unless you need the last bit of speed which you cannot get even from decent compilers, but that's the rare exception). You learn assembly to better understand how your solutions in a higher level language will be executed on the computer. You learn to understand why certain ideas which look nice in theory are just non-starters in practice. You learn to understand why it matters what is your outer loop and what your inner loop, even though your algorithm doesn't depend on it. You learn why the order of the fields in your data structures may matter.

      --
      The Tao of math: The numbers you can count are not the real numbers.
    31. Re:Hmmm ... by Nursie · · Score: 1

      Strange, I seem to have managed to hold down a job in plain old C for a while now. Never have done any OO since university. Never needed it.

      Not everything is written in Java. Or C#

    32. Re:Hmmm ... by CptPicard · · Score: 1

      Well, if over 15 years of coding, plus a Master's degree in CS has not made me "see things in assembler", I wonder what would. It's just a completely strange way of modelling things when it comes to formulating Turing-complete formal solutions to problems, which is what programming is.

      In algorithmics (where I more specifically got my degree in), asymptotic complexity beats architectural details every time...

      And yes, I do consider Knuth to be overrated :p

      --
      I want to play Free Market with a drowning Libertarian.
    33. Re:Hmmm ... by muindaur · · Score: 1

      I have to agree. My High School was a joint one for two towns, and had ~800 students total. My junior and senior year I applied for the VB course. I was told to pick another because there wasn't enough interest, and with all my other college(school had general, college, honors difficulty levels) preparation classes I had no time at home. College English 12 had four ~15 page papers with one a summary analysis of three works by an author(I was able to do mine on Arthur C Clarke at least) you analyzed. Of course, since I couldn't take VB I had honors French(I had two study halls used to get most of the general HW done to work on my papers at home.)

      So I went into college having experience with computers, and being good with math and science. I just had not gotten a chance to program due to school budget and personal time constraints.

      To be honest, you don't need to program in HS. If you come out with solid math and science skills you do fine. Programming is very easy, but requires math and logic skills.

    34. Re:Hmmm ... by swalve · · Score: 1

      I agree. A CS major or programmer might need to know the concept of how the machine does the work, but has no need to be proficient at it. It is like telling a structural engineer that he needs to go work in a iron ore mine before he can appreciate how to calculate torsional loads. Don't CS grads have to write a compiler to get their degree like they did in the good old days? That's really all anyone needs.

      Not to mention, and I hate to be this guy, it is irrelevant. Thousands of people have labored furiously for the last 50 years to make computers more usable. Programming languages are the result of people wanting to focus the work on problem solving, not on how each computing architecture prefers to have its ear nibbled. These people wracked their brains trying to make it so the people after them didn't have to know that the 13th register of pentium IIIs made on Jan 21, 1993 is flaky and shouldn't be used. My job as a programmer is to transform some input into some other output. If I need to model a process, I shouldn't have to go out and chop down a tree, mash it into pulp, build a paper making press, press out a bunch of paper, dry it, perfect it; just so I can draw a flowchart. The "perfect" programming language is one that most closely matches how people think and divide up processes.

      Though I would submit that OO programming is NOT that. Writing the words "make 10 copies" onto the piece of paper in front of us does not magically make 10 copies appear in the literature holder in Denver. Maybe it is because I learned in BASIC and Pascal and C, but the scope jumping possible in OO programming makes me crazy, and causes bugs. Of course it is easier to directly poke some other thing within some function, but it creates webs of complication that add misery to lives. That's why I like the UNIX way- everything has an in door and an out door.

    35. Re:Hmmm ... by mikael_j · · Score: 2

      I actually agree with that.

      Or rather, it makes sense that students get a chance to sort of "climb up" to the current level of abstraction. Start out with basic electronics, digital gates, registers and ALUs, machine code/asm, C, OO...

      Maybe I'm biased because I sort of followed that path on my own and I'm annoyed by all the developers out there who started out with VB using Visual Studio and then went on to VB.NET or Java using Visual Studio or some other IDE. I mean, I've worked with guys who think that something is wrong if they can't write entire GUI apps just by dragging and dropping with a few clicks in dropdowns. Sure, they may have a decent grasp of the larger systemic view and the concepts used in systems science but it just seems like they keep running into problems because anything more bare-bones than "click 'add data source', click 'auto-discover', pick your database and click 'ok'" is puzzling and black magic to them.

      --
      Greylisting is to SMTP as NAT is to IPv4
    36. Re:Hmmm ... by Anonymous Coward · · Score: 0

      Remarkably well captured. There are points in computing where "knowing what the little engine in the box is really doing" is critical for shaving off 50%, 75% or even 95% of the CPU time that might otherwise be naively used to solve a tight, 'millions-of-iterations' type computing problem. For example (and this is somewhat dated), of the few dozen assembly-language projects I've chosen, or been required to do, the stand-out was making a specialized sorting routine that was at least an order of magnitude faster than any I had previously worked with, which utilized the 32 bit X86 'block copy' instruction to efficiently move data about rapidly. Oh, today, with 3-level caching lookahead and so on, even backwoods iterative C code performs just about as well. But before that point, it was the special instruction, not accessible in C (pre inline-pragma coding) that made it possible to write a driver for a streaming tape drive that ... actually streamed.

      Likewise (and I would argue "as a constant of the industry, moving forward", inevitably) - today one needs to dig into the assembly code, if even just a bit, to directly access the SSE2/etc specialized instructions to speed things up substantially. Many compilers "try", but largely don't take advantage of the newer instructions to the degree that a well coded .ASM chunk can achieve.

      Knowing what bytes do, why there are "bytes" and "words" and "long words" and "doubles" and "double-doubles", and how strings are organized in really organized in memory, and so on is the key kind of knowledge that prevents continual "reinvention of the wheel", and endless background noise of multimember team bug tracking due to data pass-off issues. I've worked with younger programmers ... that simply didn't know that C-strings are zero-value terminated. What a handicap!

      In any case - I applaud your point of view. I would argue that the old(er)-school programming-for-freshment corpus, such as founded at Berkeley (alma mater) might remain the best pedagogy. It is deliciously steam-punk for a freshman to learn just enough about a machine, and assembly language to write (by hand!) that one-and-only machine code program ... all of 15 or 30 bytes worth, that queries some port, waiting for a character to come along, then echoing it back to another port, to see it actually on the screen. Of course, this is no "practical" program, but it absolutely requires learning enough about the machine to check bit positions, it requires the tactile "flipping of paddles", and when it works, for all people who've ever done it, there is that great big ear-to-ear grin of "I did it!". It separates the wannabees from the gonnabees.

      Berkeley - in the same class the following week, hey we didn't fool around! - then had a quick run of assembly. Now the programs were maybe a few hundred bytes, and the same dumb little machine would load "from the network". Again, when your program finally ran, ear-to-ear grins. You could just smell that "there had to be a better way coming next week". And sure enough there was. Tiny-C ... totally limited, but still "C". You worked through K&R "C" ... even well into the '90s ... just because it was the easiest, most well written, absorbable-in-a-few-weeks course on modern structured computing. By the end of that very first quarter, you either had failed miserably and dropped the course (never to return! Off to the counselor for a Major change), or you "got it" almost totally, and were ready to move on to the practical coding and computer SCIENCE courses. Yet, the "coding" was always there, all the time.

      For instance, (and I think this was brilliant) - all courses were taught in "reverse prerequisite" order so to speak. While coding some thing for a general course, you might be required ot use a lot of SQL. 2 or 10 page "cheat sheets" were handed out for the whole SQL language, and the project would be due in 5 day

    37. Re:Hmmm ... by Pinky's+Brain · · Score: 1

      It might model the problem space, but it doesn't model the solution space.

      We will always need some people to write the optimizing compilers to match the two ... and some of us just need the performance and work with relatively simple algorithms, trying to internalize a functional programming language and determine the imperative (ie. real world) program flow in my head just gets in the way.

    38. Re:Hmmm ... by CptPicard · · Score: 2

      I sort-of agree with you; I am not making an argument that one "should not" know assemby, or at least the principles of it so you can read output even if you did not actually write it yourself. It's about being a well-rounded programmer.

      My issues are more about this (mythical, to me) attitude that some people display that assembly is "the real thing" that is just hidden by abstraction in higher-level languages and that this is some kind of a mental crutch and that the assembly is what somehow actually "tells you what is going on". It leaves me with the impression that their thinking about programs and computation is not on a particularly abstract level, and I generally use "abstract" as a positive word here... think "abstract" in the sense of mathematics.

      Of course, with a lot of modern programming languages, you don't even have a compiler that outputs anything, so understanding assembly is not going to give you any idea of what actually happens on the machine when you run, say, Ruby code.

      --
      I want to play Free Market with a drowning Libertarian.
    39. Re:Hmmm ... by DannyO152 · · Score: 1

      You should note how in recent updates interpreted and compiled languages have had syntax and semantic extensions in order to assist with the concurrency and parallel problems. C++0a for C++ immediately comes to mind. Scala and Clojure both run on the jvm, so their programs may use java libraries and objects, but they use functional paradigms first and foremost. The problem with objects is mutable state, which means extra and complex overhead is required in order make sure that each thread, which may not bring the object into scope in the exact sequence the programmer intended, still gets with minimal delay the appropriate version of the object for reading or writing.

      I daresay the faculty at The University of Waterloo are thinking about this.

      Now, this is still the First College Programming Course problem. MIT a couple of years back changed from Scheme to python. The bright kids who are admitted to top CS schools have written lots of code before they arrive on campus. The top CS schools will still, in the course of the undergraduate program, teach OOP, procedural, assembly, and functional programming approaches, compilers, formal languages, discrete mathematics, and data structures. The freshman language is an implementation detail.

    40. Re:Hmmm ... by RingDev · · Score: 1

      I can't remember a single job post 2000 that required a graduate to build their own processor, or write in assembly.

      I know those jobs exist, but they are a tiny percent of the market. There are tons and tons of programing jobs in the world, and the vast majority of them don't require that type of knowledge. Is it good to have a basic understanding? Sure. Especially when it comes to memory. But is being able to write assembler going to make anyone better at writing LOB apps?

      If I had to choose between an applicant that had assembly classes or technical writting classes, I'd take the one with the tech writting classes almost every time, all other things being equal.

      -Rick

      --
      "Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
    41. Re:Hmmm ... by Anonymous Coward · · Score: 0

      A library that your code calls. A framework is something that calls your code. "Frameworks" have been around a long, long time.

    42. Re:Hmmm ... by CptPicard · · Score: 1

      I'm not sure I understand; solution space is how you put the things in your programming language together to solve the problem. The closer the language makes this already, the better. All Turing-complete languages are computationally equivalent; the asm solution is not any more "real" than, say, a Scheme solution, performance considerations aside.

      Compiler authoring is its own niche problem domain; there, one needs to use assembly. After that is done, you just use the compiler to solve other problems.

      Also, imperative program flow is not "more real" than a functional-programming language definition of a function... that's a mindset problem that takes a lot of effort to break down (been there, done that, seen the light). Actually, a functional-programming version often demonstrates what the problem is about much better, making you think better about how to solve it.

      --
      I want to play Free Market with a drowning Libertarian.
    43. Re:Hmmm ... by Anonymous Coward · · Score: 0

      The one thing they are getting a little better at is included some 'software engineering' into the curriculum - but only a little bit better in that they do 'projects together' which in my experience means that the alpha nerd does 90% of the work and the other 4 team members offer worship and keep the ramen coming.

      Sounds like they're doing a perfect job of preparing them for the real world then.

    44. Re:Hmmm ... by Anonymous Coward · · Score: 0

      I was that alpha nerd.

      If it means they stop doing everything in Java throughout their education, I'm all for it. There's nothing wrong with Java, and I use it often in my current company, but kids in school need to learn from the get go that languages are tools in a toolbox - use the right tool for the right job when you can. I can't remember the last time I interviewed a graduate who had used C++ or C outside of a single survey course on the language! Hell, I can't remember the last time I interviewed a post 2000 graduate who had built their own processor or had even taken an assembly class. The kids are just as smart, just as eager, but woefully unprepared. The one thing they are getting a little better at is included some 'software engineering' into the curriculum - but only a little bit better in that they do 'projects together' which in my experience means that the alpha nerd does 90% of the work and the other 4 team members offer worship and keep the ramen coming.

    45. Re:Hmmm ... by Pinky's+Brain · · Score: 1

      Exactly, so they should all learn Occam :p

    46. Re:Hmmm ... by Anonymous Coward · · Score: 0

      Uh that's what I did when I was 8. I didn't have an assembler on my Apple II clone.

      Must say the clone's cloned Apple II manual was good too. It was two or so Apple manuals combined into one book. Great stuff. Learnt BASIC and 6502 machine code from it.

    47. Re:Hmmm ... by Anonymous Coward · · Score: 0

      Knock knock
      Who's there?
      Wait 2-3 minutes
      Java!

    48. Re:Hmmm ... by swalve · · Score: 1

      This "programming is an art" and "college isn't a trade school" stuff is bullshit.

      What is college for, if NOT to train someone in the workings of some area of learning? I mean, that's what the degrees SAY in their names. Bachelor = apprentice, master = master, doctor = master of masters.

      And art. Art is the skillful and creative use of some medium. A guitar player has to learn to play the guitar before he can demonstrate his artistry. A brick layer has to learn how to lay bricks in a structurally sound manner before he can make a beautiful arch. And a goddamned programmer has to know how to program before he can create anything approaching artistic.

      Just slapping some shit together and having the luck that it comes out looking good isn't art. Art is having an idea and having the skills to bring that idea to life. You have to know the rules before you know how to break them.

    49. Re:Hmmm ... by Anonymous Coward · · Score: 0

      You can (and probably do) write OO code in C and arguably even assembly just like you can write completely procedural code in Java and C++ if you make an effort. Most OS's use take a very OO approach (think "handles" in Windows). You need to understand OO to use OS APIs.

    50. Re:Hmmm ... by Dails · · Score: 5, Insightful

      I outright laugh at people in an Interview when they ask me if I'll write OO code.

      Good advice for those seeking work.

      If you can't read straight up C code and understand what the fuck is going on, stop calling yourself a programmer.

      They used to say that about assembly. Try writing a modern game or GUI in assembly. You might well be able to do it, but by the time your'e done I'll have finished several projects and be moving on to the next one.

      If you can't code directly for the hardware you're interfacing with, stop calling yourself a programmer.

      Right. Abstraction has no place in computer science education or in programming. As a matter of fact, if you're using anything other than a magnetized needle to right to your hard drive, quit calling yourself a computer user.

      If you depend on .NET, any library, framework, or something written by someone else, you're not a programmer. You're a script kiddy.

      Right. Code reuse is so lame. Anything that reducing development time and improves efficiency has no place in computer science. Everything should be written directly in binary on a computer you, the programmer, built from latches, switches, and flip-flops. Otherwise, you're just a bum.

      OO should never be taught lest we end up with a generation of useless tools who think they're "programmers" that can't actually accomplish fuck all

      Right. After all, every program written using OO is useless and nonfunctional. Except for the hundreds of thousands of programs that work just fine.

      Go back to your garage with your unflinching dedication to The Old Ways and leave the rest of us to be productive.

    51. Re:Hmmm ... by Kjella · · Score: 1

      I doubt I could write anything past a basic calculator in assembler, but it's been proven several times I could code in circles around some of those that call themselves programmers. By far the most difficult thing I've found in complex non-OOP code is the memory management of inits and cleanups. If you change a code's path and somehow miss a cleanup step, you get memory leaks and seven kinds of hell. You always have to make sure all the t's are crossed and i's are dotted. It can be done and everything written in C in proof of it, but it's not for the faint of heart.

      To be an object is primarily a self-contained entity that can clean up its own mess. If it has children, it should also tell them to clean up their mess so that I can delete just the top level object. This is the essence of the QObject in Qt. That also goes for any file handles, network sockets, database connections and whatever else it's holding onto. In the real world, I do have state. If I try connecting to a network, there will be a delay and unless I want to block everything I have to buffer the data I was going to send somehow until the connection is ready. If the connection fails, I have to clear out that data. What when someone trips over the network cord? If the client clicks an "Abort" button? If I have timers that I need to wait for? I have to respond to such things and you're about to reinvent the event loop.

      I'm not sure what the deal with parallelization is, I've managed to use both worker/queue and thread pools to deal with that efficiently. With signals and slots I've never felt that my applications were so modular in any other language as they are in C++/Qt. They have their inputs and outputs but otherwise you can rearrange the pieces pretty much any way you want like a bunch of legos.

      Maybe it's not the style for the 10000-core supercomputer, but I think you get very, very far just being skilled at using what you have. I think the analogy of tools in a toolbox is wrong, it's more like writing a book half in English, half in French according to what language you feel expresses it the best. The result is mostly that a) very few understand it and b) they don't work well together. That said, there's a helluva lot that can be improved about OOP languages.

      --
      Live today, because you never know what tomorrow brings
    52. Re:Hmmm ... by Assmasher · · Score: 2

      An applicant for what though?

      If I wanted a guy/gal as a back end systems and server engineer, I would want somebody with a well rounded CSCI education including assembler, kernel space programming, long running process experience, et cetera.

      If I wanted someone who had to rapidly iterate client software because I was running a consulting firm, I'd prefer the person with the tech writing skills.

      I've never seen a single job post 2000 that required students to know calculus either, but I'd still prefer to hire engineers who have had it.

      --
      Loading...
    53. Re:Hmmm ... by woboyle · · Score: 1

      As far as I'm concerned, starting CS students with OO modeling is appropriate and I am disappointed in CMU in eliminating this from the freshman curriculum. Why? Because they need to start learning the discipline of thinking about computer constructs as things and not strictly abstractions. To think about how they are structured, behave, and interact. I've been doing large-scale distributed, parallel, and highly available systems for over 20 years, and with OO modeling, some of the stuff that I and my colleagues have accomplished would have been, quite frankly, impossible. Modeling helped identify pernicious race conditions, determine what programming abstractions were appropriate (a storage adapter abstraction, for example, so the same user code could store an object in a local database using one storage adapter type, and in a remote server using a bus storage adapter type - which is a configuration option, not a programming one), and what elements may have platform-specific issues. When the resulting work product is 10M LOC, and has to be delivered in 2-3 years by a small team of programmers/engineers, modeling helps resolve a lot of issues very early on in the design process. So, in my opinion, CMU has just dropped off of the top of the CS education institutional list, and I speak as one who used to teach for CMU in their professional education division, the AIPE.

      --
      Sometimes, real fast is almost as good as real-time.
    54. Re:Hmmm ... by Oxford_Comma_Lover · · Score: 1

      > Don't CS grads have to write a compiler to get their degree like they did in the good old days? That's really all anyone needs.

      Most. Useless. Class. Ever. Learned *nothing*. It was just "implement X. Here is the design of X. You must implement it this way."

      It would have been much better if we had at least just been told "Implement X" and had to figure out how. As it is, the only thing we were able to do to make it slightly more tolerable was talking the professor into letting us do it in C++ instead of Java.

      The class where we learned assembly and machine design and microcode was better. So was the VLSI class. Compilers not helpful.

      --
      -- IANAL, this isn't legal advice, and definitely isn't legal advice for you. Also, Squee!
    55. Re:Hmmm ... by TheLink · · Score: 1

      Actually that sort of stuff is more "magic" to me.

      Especially when it stops working. Then you have to figure out why the heck it doesn't work.

      That kind of stuff is like:
      1) Do stuff
      2) Magic/miracle happens
      3) Result you want.

      I think many of us nerds know that miracles are very very rare and we're interested in how the heck the stuff works, and how it typically stops working...

      --
    56. Re:Hmmm ... by aix+tom · · Score: 1

      I think you need at least a basic understanding of it. Of course it makes not much sense to write a business application in assembler, but how do you know where you CS students wind up? When they wind up in kernel development or embedded programming, or even in processor development or PLC programming, there is not much they can do without knowing assembler.

    57. Re:Hmmm ... by Brian+Feldman · · Score: 1

      Of course no one "needs" OO. It merely produces superior software by permitting more powerful methodologies.

      --
      Brian Fundakowski Feldman
    58. Re:Hmmm ... by ChucktheMan · · Score: 1

      Using OO to develop a Turing-complete formal solution would require a Turing-complete description of the OO library you are working with, which would be a very surprising thing to find. The other possibility is that you are working on truly trivial software.

    59. Re:Hmmm ... by h4rr4r · · Score: 1

      Too high a level. Solve the problem with only NAND Gates and some bits of wire.

      Actually most CS folks and programmers in general could badly use a lesson in the hardware underneath it all. Does not mean you should toss out programming languages though.

    60. Re:Hmmm ... by Anonymous Coward · · Score: 0

      Most programming is now web programming (Ruby on Rails, Django, Java, PHP, Javascript): how do assembly or building your own processor help with any of this?

      What is it they are unprepared for? Most programmers don't need assembly, and most programming is now done in languages abstracted enough from the hardware that it doesn't matter. Optimizations that make sense to do in C often don't make sense in Java because the compiler will do a better job of optimizing than you will. (And if you want to talk specific jobs, aerospace still uses Fortran all over the place: does that mean it needs to be part of a modern programming curriculum?)

    61. Re:Hmmm ... by Anonymous Coward · · Score: 0

      I have often felt the same way. On the other hand, there is a lot to learn these days and only so much time to learn it.

      What concepts/skills are the graduates learning in school that you require in an new employee but did not learn yourself back in the day? Do these new skills compensate for the lack of assembler/C/C++ experience?

      I'm not trying to troll here. This is an honest question that I've pondered myself when interviewing new graduates. I've never made up my own mind about the answer.

    62. Re:Hmmm ... by Brian+Feldman · · Score: 2

      You're truly not giving Java enough credit. It is never good to learn from only one example but it can be used to teach compiler theory and assembly, as it is a bytecode VM, and DOES expose very low-level language details: you can freely use native types, even though they are awkward compared to objects. One of the best features is all of the threading and synchronization primitives you need at a low level are part of the language itself. So what if it doesn't compile to machine code?

      --
      Brian Fundakowski Feldman
    63. Re:Hmmm ... by khallow · · Score: 1

      Then you are not a very strong programmer at all. Assembler is necessary to understand exactly how a processor works, and how well any given algorithm will work on that architecture.

      Last I heard, the world didn't need a lot of "strong" programmers. They needed a lot of good ones. You don't need to know assembly to be a good programmer. There's a lot of coding that goes nowhere near the level of abstraction of assembly.

      Which is why a certain CS professor, you may have heard of him, he's called Knuth, uses Assembler in his somewhat reasonably well-known(some would call them the bible of CS) books.

      Knuth is probably one of the worst examples you could have picked. I've had to screw around with Knuth's TeX code (which is his primary programming work) before. Beautiful output, but the complexity and sheer treachery of the code is staggering. He breaks so many common sense rules (such as making code modular), it's surprising that the code is almost flawless in its execution.

    64. Re:Hmmm ... by CptPicard · · Score: 1

      I'm not sure you got my point, or otherwise I'm just missing yours. To make things clearer, what exactly is it that you disagree with in my statement that programming is the act of formulating solutions to problems using Turing-complete languages?

      --
      I want to play Free Market with a drowning Libertarian.
    65. Re:Hmmm ... by Duradin · · Score: 4, Funny

      So you can't call yourself an english major if you can't read Sumerian cuneiform?

    66. Re:Hmmm ... by Shinobi · · Score: 1

      Assembler is useful for solving some problems, for example establishing whether an approach is in fact deterministic, and not just in theory. It's also useful for debugging, proofing compilers, embedded stuff with tight requirements etc.

    67. Re:Hmmm ... by chthon · · Score: 3, Informative

      While I also disagree with the tone of the parent, I hope you understand that abstraction and code reuse are not features that originate solely from OO programming? It is enough to have a module or package mechanism.

    68. Re:Hmmm ... by Hognoxious · · Score: 1

      The article said that OO wasn't suitable for a CS curriculum, not that first year students aren't suitable for OO.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    69. Re:Hmmm ... by RobDude · · Score: 1

      Perhaps assembler is necessary to understand exactly how a processor works. But understanding exactly how a processor works is not necessary for development of most applications. Heck, understanding the underlying frameworks/libraries you are utilizing often isn't.

      Some company wants a great website. They want to hire you to make it. 'How a processor works' as more than a vague understanding isn't going to help you make a great website.

    70. Re:Hmmm ... by Shinobi · · Score: 1

      How about working on some specific real world fields, such as writing interconnect drivers and such for HPC, or extremely tight requirements in some fields of embedded stuff, such as telemetry gear, both networked and autonomous? Or just proving in fact that something is deterministic, instead of just in theory. Or verifying that the compiler is indeed doing what it should.

      And as for architectural details being dwarfed, then you haven't been working with porting things between different architectures. An algorithm that yields excellent performance on one can be 2 orders of magnitude slower on another. Which should be right up your alley, namely of developing and selecting the right algorithms etc.

    71. Re:Hmmm ... by Anonymous Coward · · Score: 0

      A CS / CE student should start with functional programming and assembly (we had a special CPU without an automatic assembler (i.e. we had to convert our mnemonics to hex manually), we even had to write the microcode for the processor ourselves). That is, start at the very top and the bottom to teach proper theory and the fundamentals from the very start.

      This approach also have the nice side effect that everyone starting Uni with a serious case of the perfect programmer syndrome cannot just slack off in the beginning, they will be humbled and actually have to learn something from the start.

      When the students know the functional and assembler parts well, then you can move on to teach OOP (I would probably throw in concurrent programming before OOP). I am absolutely convinced that this approach breads better programmers than just teaching common engineering tricks (i.e. starting with OOP since it is used in industry).

    72. Re:Hmmm ... by haystor · · Score: 1

      Around here, the C programmer is probably getting paid more and also have a plethora of offers any time he is looking. The OO programmer is going to be asked trivia questions about the default configuration of Struts 2.3 files or the MS C++ equivalent in a never ending series of interviews for big companies that don't write anything interesting.

      The C programmer is probably pursued by a headhunter who knows what they want, the Java/C# programmer is typically pursued by a recruiter who will be some vapid grad who looks good and has no real skills.

      It's two different worlds really. Sure all you Java/C# programmers can tell me how it is different for you in particular, but observing the process the last two years the C (and often C++) jobs were consistently better. Again I realize that C++ is OO, but that comprises about 1% of the difficulty of programming C++. If you're coming out of college and a company is recruiting for a C++, they'll train you if you come from a C-teaching university. In fact, they'd prefer a C-taught student over a Java/C# one any day.

      --
      t
    73. Re:Hmmm ... by Shinobi · · Score: 1

      Strong is equal to good in this case. And I see many who style themselves good, but can't understand when a program of theirs works well on one processor, but not on another. Sure, they may be "good" inside their specific niche, but they have no versatility in their problem solving.

      As for Knuth, he's showing that he is indeed a good programmer. Just because something is modular does not explicitly make it good code, nor does it being non-modular make it explicitly bad code. IKEA furniture is modular. Masterwork furniture is less modular. But which is made by the more skilled craftsman?

      Modular is a crutch, that works well in some general fields, but are unwieldy or even a waste of resources and a roadblock in other fields.

    74. Re:Hmmm ... by RobDude · · Score: 1

      The world needs a lot more guys who can lay tile using best practice materials and approaches than the world needs guys in a lab trying to invent a better mortar.

    75. Re:Hmmm ... by wisnoskij · · Score: 1

      Or maybe Scala

      --
      Troll is not a replacement for I disagree.
    76. Re:Hmmm ... by wmbetts · · Score: 3, Funny

      Yes it produces more powerful methodologies, because of the synergistic effects that objects have with modern cloud environments.

      --
      "Ubuntu" -- an African word, meaning "Slackware is too hard for me". - stolen from Dan C alt.os.linux.slackware
    77. Re:Hmmm ... by Shinobi · · Score: 1

      "Perhaps assembler is necessary to understand exactly how a processor works. But understanding exactly how a processor works is not necessary for development of most applications. Heck, understanding the underlying frameworks/libraries you are utilizing often isn't."

      And then we are stuck with the endless bloat, endless patchwork with messy kludges that are in constant need of fixing....

    78. Re:Hmmm ... by Stevecrox · · Score: 1

      My Uni course involved Assembly, Pascal, VHDL and C++. It forced a certain knowledge on how a computer works, I finished university 3 whole years ago and have been involved in training up new graduates for various projects. Almost all of them have only done Java in university, the result is they never understand basic concepts like pointers. Which would be fine but you need to understand pointers in order to code in Java (since it has them).

      Having a basic understanding of the fundamentals is what a degree is all about, you also seem to think a person would either do technical writing or assembly. If your looking at a Software/Computer Engineering course the candidate should have done both since engineering involves everything from the design phase through to support and testing. Otherwise all the person has done is a software developer or technical writing course.

      I do agree with CMU in that teaching how to write modular code is important, I love C++ but prefer Java because most old C++ projects I've worked on (and some are 15 years old) start out as modules but always turn into enormous inter-dependent blobs.Eclipse's plug-in approach seems to help keep dependencies to a minimum.

    79. Re:Hmmm ... by rerogo · · Score: 1

      Also, imperative program flow is not "more real" than a functional-programming language definition of a function...

      I understand how that is true, in a sense, but in another very "real" sense, your processor is imperative. Function calls are just a clever trick played on you by your compiler, your standard library, and some assembly macros.

      (Well, unless you're running on a Reduceron or something.)

    80. Re:Hmmm ... by chrysrobyn · · Score: 4, Insightful

      I consider myself quite a strong programmer, and I never think in terms of assembly when writing programs. Higher-level languages, in particular functional programming languages, are far closer to my mental model of things. Why not work in a language that represents or helps formulate the problem-space abstractions better?

      In a word, performance. In your particular field of expertise, performance and memory footprint may not matter (99% of desktop applications I suspect), but a strong programmer is fully aware of what goes on under the covers when [his|her] program is compiled to the degree that it impacts the product. Until recently, I never thought there was a functional difference between a lone line containing "i++;" "++i;". Of course, for variable assignment it matters, but what's going on under the covers? If you stop and think about it, i++ actually has to return the old value. ++i can destroy that old value and never needs to worry about returning the old value (you can avoid an extra copy). If you're in a high performance loop, either with not much body or with a lot of increments, such things matter. Understanding the impact of caching, the scarcity of registers, the high cost of flushing the cache, all of these can matter, and it's hard to teach these concepts without using at least a pseudocode that looks suspiciously like assembly. If you're paying for compute cycles, or if you're selling something in a market where performance matters, you're going to see a strong advantage in a computer scientist who understands assembly and compiling.

      Now, if your main concern is code readability, maintenance and/or moving onto the next product as soon as this one compiles with no errors, higher level languages are undoubtedly far more appropriate.

    81. Re:Hmmm ... by Anonymous Coward · · Score: 0

      Then you are not a very strong programmer at all. Assembler is necessary to understand exactly how a processor works, and how well any given algorithm will work on that architecture.

      And most programming solutions require this because ... computers are too slow today? Lacking in memory? Compilers don't produce optimized code that's usually better than hand written assembly? The processor is the bottleneck and one must squeeze every single cycle out of it?

      What is this, the 1950s? Even then, you had the folks at IBM and the likes of McCarthy looking to abstract away from the machine. I seriously doubt McCarthy was concerned with exactly how an algorithm worked on a given processor while he was discovering an alternative computing model to Turing machines.

    82. Re:Hmmm ... by SaidinUnleashed · · Score: 1

      Last time I checked, HTML isn't a programming language...

      --
      Shiny. Let's be bad guys.
    83. Re:Hmmm ... by Anonymous Coward · · Score: 0

      My university taught OO in the first year, and then did Machine Code, Assembly through a hardware course and a compilers course, as well as a computational logic course and a OS course in second year. The OO in first year is necessary because it is a co-op program. Don't most CS programs do this?

    84. Re:Hmmm ... by Bing+Tsher+E · · Score: 0

      Maybe a library that YOUR code calls. Not everybody is an application-layer coder in a trivial user-level environment.

    85. Re:Hmmm ... by Just+Some+Guy · · Score: 3, Insightful

      but only a little bit better in that they do 'projects together' which in my experience means that the alpha nerd does 90% of the work and the other 4 team members offer worship and keep the ramen coming.

      That's called "managing expectations", and is a wonderful introduction to their future careers for a lot of CS grads. Now go fetch me some coffee while this build finishes, would you? Thanks.

      --
      Dewey, what part of this looks like authorities should be involved?
    86. Re:Hmmm ... by Anonymous Coward · · Score: 1

      If you consider using frameworks and libraries 'endless bloat, endless patchwork etc....' then sure. We'd have that. The end product is easier to create and easier to maintain and the cost of development/maintenance significantly out-weights the near trivial cost of hardware capable of handling the endless bloat (in most situations).

      If I need a new kitchen floor, I don't want to hire a guy who has the all of the knowledge and experience required required to make the tiles, underlayment, mortar and grout from scratch. I *certainly* don't want to pay that same guy to make custom tiles for me, use his home-brew underlayment material, his redesigned mortar, and his new formula for grout. The cost would be outrageous. And I don't care how much 'better' it might be; because the existing best practice methods for installing a new tile floor are enough to last for the next 50 years.

      Keep in mind, the industry knowledge and best practices we have now were built upon years of use from the leaders in the industry. Just 'knowing' assembler isn't enough to derive the rest. If you need to learn the rest anyway, you could just learn the rest, not learn assembly and say, 'I'm going to do what these other people say is the best for reasons I only vaguely understand" and be just fine. In fact, in most situations, you'd be significantly ahead of the guy who spent that same time learning assembler while you were learning Java or C#.

    87. Re:Hmmm ... by npsimons · · Score: 1

      So OO Programming because it's unsuitable for a modern CS curriculum. I guess we should go back to just assembly language so we can make sure we never go down this road of false progress again.

      No, trust me, they probably already have some other higher level paradigm lined up, perhaps functional. While I may disagree with OO being anti-parallel (have they never heard of thread classes?) and anti-modular (WTF? what are classes if not modules?), I can see how they might want to start students out on something simpler or more straightforward. For a little better understanding into this mindset, see Object Oriented Programming is Inherently Harmful.

    88. Re:Hmmm ... by RobDude · · Score: 1

      Last time I checked, nobody said anything about HTML.....

      ASP
      ASP.NET
      PHP
      PERL
      C
      Flash
      Javascript
      AJAX
      Java
      Coldfusion
      Silverlight
      etc....

    89. Re:Hmmm ... by Bing+Tsher+E · · Score: 0

      Many good programmers get their start outside of an academic environment. I took a BASIC course in High School, but that was all that was offered at the time, and it was on ASR-33 teletypes that we dialed into a mainframe on with 110 baud Acoustic Couplers.

      What prevented you from having a chance to program? Because no teacher told you to? You only do what you are told? What are you doing here on Slashdot?

    90. Re:Hmmm ... by narcc · · Score: 0

      Your post is rightly modded flamebait, but I agree with virtually all of it.

    91. Re:Hmmm ... by iMadeGhostzilla · · Score: 2

      It's a "library" if you call it from main(). It's a "framework" if main() calls you.

      I hate frameworks.

    92. Re:Hmmm ... by narcc · · Score: 1

      Of course no one "needs" OO. It merely produces superior software

      Having a laugh, are you?

    93. Re:Hmmm ... by stanlyb · · Score: 1

      Nope. Linux is NOT OO. Windows is NOT OO. Apple's OS is NOT OO. OS2 is OO, but is extinct.... BeOS is OO but is also extinct..................

    94. Re:Hmmm ... by Kenneth+Stephen · · Score: 2

      I think you have a very limited view of what kind of programming folks do. Only a small percentage of folks do programming at the level where they need to know how a processor works. The vast majority of programmers out there work in high level languages like Java or SQL or XSLT where the nature of the processors capabilities, whether it is RISC or CISC or whether it is a multi-processor or uni-processor systerm doesn't matter a bit to what they are delivering. A lot of times you have assembler bigots on /. spouting things like "...you can write fast / efficient code if you don't understand how the processor works" or if you haven't programmed in assembler. I don't believe this. In the real world out there, what matters most in a huge percentage of projects speed of delivery of function points. If one has to compromise between a 30% efficiency improvement by using a lower level language, vs a 50% improvement delivery time by using a higher level programming language, then that 50% improvement will be the deciding factor in your company making a profit and therefore keeping you employed.

      I have done programming in assembler. I have done programming C, C++, COBOL, VisualBasic, Lisp, and a whole bunch more languages for over 20 years. And my experience is that knowing how the processor works or a stack works, isn't helpful in 99% of cases..

      I don't deny that in the embedded space, or to system programmers, that these details aren't important. But those programming spaces are a small portion of the programming market.

      --

      There is no such thing as luck. Luck is nothing but an absence of bad luck.

    95. Re:Hmmm ... by Bing+Tsher+E · · Score: 1

      Does not mean you should toss out programming languages though.

      Definitely not. It isn't an either-or choice. But abstractions like pointers and malloc in the C language make a lot more sense if you have written at least one or two well-structured assembly language programs. Instead, further abstractions are often spun up to make the concept of pointers even MORE remote from the actual hardware.

    96. Re:Hmmm ... by siride · · Score: 0

      The C library is a framework under that definition. main() is the last in a series of calls inside the runtime that perform initialization work. On the big 3 OSes, main() is decently far away from the actual entry point of the program.

    97. Re:Hmmm ... by Bing+Tsher+E · · Score: 1

      Well, if over 15 years of coding, plus a Master's degree in CS has not made me "see things in assembler", I wonder what would.

      Sounds like it's too late for you.

    98. Re:Hmmm ... by stanlyb · · Score: 0

      In fact, if you are not EXTREMELY good in OO, then no one will got the slightest idea of what your OO code is, and why it is working at all (if it is working at all of course)...

    99. Re:Hmmm ... by siride · · Score: 3, Insightful

      You are still probably doing OO on some level even in C. OO is not a whole different paradigm, but is rather an institutionalization, so to speak, of a variety of patterns that are already used in procedural programming, with its own additional "enhancements" (for better or for worse).

      I don't think the difference in job markets between C and Java really has a lot to do with OO as a methodology. It probably has more to do with what's available on what platform and what companies are using those platforms (more importantly, what *kind* of companies are using those platforms).

    100. Re:Hmmm ... by svirre · · Score: 1

      Bull.

      There are other SW development jobs out there that absolutely do not require OO. In fact I would be very reluctant to hire anyone who have done OO and framework based stuff most of the time. To clarify: Our SW devs are firmware developers who work with embedded devices that get all of 2-8KB of ram and 16-128KB of flash to play with. Devs that rely on libraries and frameworks will never be able to get the job done.

      On top of that I will still require your code to be understandable and reusable.

    101. Re:Hmmm ... by Bing+Tsher+E · · Score: 1

      Modular is an approach that lends itself well to ant-farm type operations. It means that the coders themselves are pluggable modules, and can be recruited and fired at will.

      It's an important part of the world, but it's not a particularly innovative part of it. Somebody else has to set things up 'just so' so the little worker ants have the proper little nuggets to move around.

    102. Re:Hmmm ... by Anonymous Coward · · Score: 0

      All these "kids today" rants are not misplaced when talking about CMU. There is always some university which stands above even the best of its peers in a particular discipline. For math it is Princeton, for law it is Yale, for medicine it is Johns Hopkins, for computer science it is CMU. These may not be the universities which produce the advances which everyone hears about. They are the places which set the directions which will lead to advances that everyone will hear about in 20 years.

    103. Re:Hmmm ... by svirre · · Score: 1

      Superior how. Do you fit your code in a smaller memory footprint, can you you make it run on a slower clock, using less energy? If not I am not interested in your so called 'superior code'.

    104. Re:Hmmm ... by rgbatduke · · Score: 2

      I agree, actually. Duke has run the gamut of teaching OO languages in their first year classes for decades now, from C++ through java to who knows what now. As a consequence, I end up teaching independent study students who want to actually learn C before they take the required course in operating systems. Most of e.g. C++ relative to C is bloat, in my opinion (although of course, sigh, stating this out loud in Modern Times simply invites the compiler flamewar to begin).

      Personally, I think the best way to teach programming to future computer scientists is indeed to start with a course that mixes a foray (at least) into assembler followed by C. The best description of C that I've heard in numerous discussions on the subject (many of them heated, of course:-) is that C is a thin veneer of upper-level language sensibility on top of naked assembler (sometimes with the assembler literally shining through with inlined code). If your goal is to teach somebody computer science as opposed to train them for a job as a poorly educated web programmer, starting from the ground up in this way teaches them about the processor, memory, registers, basic operations, devices and interfaces, and much more as they learn to program, and in the end will make them far more effective programmers who write far more efficient code. Working without the "safety net" associated with higher level compilers also teaches them (sometimes painfully) to be careful.

      Naturally, I expect nothing but flames from those who have focused one OO languages for their professional careers or who have drunk the kool-ade, but I cannot help but finish by posting a link to a bit of humor:

      http://www.phy.duke.edu/~rgb/Beowulf/c++_interview.php

      More than a bit of wisdom in this rather biting satire... I truly hope that Duke one day pays heed and returns to teaching its majors solid computer science starting at the very beginning and only later explores OO languages and concepts (and list oriented languages and concepts, and specialty languages and concepts and so on). And it is rather difficult to get more fundamental than C and still be considered a compiler.

      rgb

      --
      Even when the experts all agree, they may well be mistaken. --- Bertrand Russell.
    105. Re:Hmmm ... by siride · · Score: 1

      Modular, for example, is necessary because software is not just about getting something once that works, it's also about maintainability, extensibility and the like. There are other requirements that must be factored in when architecting a piece of software. For embedded software on, e.g., memory constrained devices, you might have to use hacks and other weird tricks just to get it to work. It wouldn't be considered good programming in other contexts, but given the constraints and requirements of the software, it's the optimal solution.

    106. Re:Hmmm ... by Bozzio · · Score: 2

      Programming is very easy, but requires math and logic skills.

      I agree that learning the basics of programming is easy. But, like with any other trade, becoming a good programmer requires the right kind of motivation, curiosity, attention to detail, and desire to improve one's craft.

      In my experience people who say "Programming is easy" are usually the ones you don't want to having working with you on a project.

      Programming is a craft. You have to love doing it to be good at it.

      Anyone can saw wood or swing a hammer. It takes a passionate person to properly build a staircase..

      --
      I just pooped your party.
    107. Re:Hmmm ... by siride · · Score: 1

      Is understanding assembly going to make you produce PHP code that's faster and lower on memory usage? Probably not a whole lot. PHP is bloated and if you are using it, your stuff will be bloated one way or another. The best you can do is make efficient use of PHP to reduce that footprint. Knowing assembly tricks won't help you at all.

    108. Re:Hmmm ... by Anonymous Coward · · Score: 0

      and how well any given algorithm will work on that architecture.

      I assume you have evidence that this is true even with highly optimizing compilers?

    109. Re:Hmmm ... by Bing+Tsher+E · · Score: 1

      Definitely. There is always a need for more worker ants. More people in production than in design.

      If that's what you choose as your role, all power to you.

    110. Re:Hmmm ... by fbjon · · Score: 1

      That all depends on what you consider interesting: solving a problem, the way of solving a problem, or the way of solving the solving of a problem. None is "more important" , "more correct" or "more real programming" than the other.

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    111. Re:Hmmm ... by pthisis · · Score: 2

      I went to CMU. The curriculum is designed so that if you work hard, you can make it through the freshman courses without an incoming knowledge of programming; it's much, much easier if you know some basics coming in, but if you're motivated it's not necessary.

      --
      rage, rage against the dying of the light
    112. Re:Hmmm ... by Bing+Tsher+E · · Score: 1

      You do the equivalent of 'creating a transistor' in your physics labs. Then you progress to the course where you build a flip-flop circuit. After that you might start to be taught design at the level of logic modules, TTL gates, etc.

      It doesn't really even have to be a linear progression. But your understanding does need to 'flesh out' so that you eventually can grasp the issue all the way down to the electrons.

      Well, no, it doesn't. There is a huge need for Telephone Sanitizers and always will be. Just not on my space ship, please.

    113. Re:Hmmm ... by narcc · · Score: 1

      programming is the act of formulating solutions to problems using Turing-complete languages?

      So... it's not programming if you're not using a Turing complete language?

      Perhaps you should have paid more attention while earning that MS degree.

      And yes, I do consider Knuth to be overrated :p

      Looks like a case of the Dunning-Kruger effect.

    114. Re:Hmmm ... by fbjon · · Score: 1

      Modular is a crutch, that works well in some general fields, but are unwieldy or even a waste of resources and a roadblock in other fields.

      And meticulously crafted software is also a crutch, a waste of time and resources, and a roadblock in some other fields. What exactly is the argument here?

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    115. Re:Hmmm ... by Javagator · · Score: 1

      A number of years ago, I worked on a team that developed this 500,000 line FORTRAN program for the analysis of scientific data. The code was very modular, but the data was all over the place. A change in the data in one part of the program could cause unforeseen problems in another part. Object oriented programming helps prevent this problem by organizing the code and the data it acts upon into objects. In my experience, object oriented programming is one of the biggest programming breakthroughs since higher level languages. I just can't see an institution with the reputation of CMU deprecating this methodology.

    116. Re:Hmmm ... by Bing+Tsher+E · · Score: 1

      I remember always picking one of the useless fucks from the back of the classroom to be my lab partner, because they would then stay the hell out of the way.

    117. Re:Hmmm ... by ultranova · · Score: 1

      Programming is very easy, but requires math and logic skills.

      Programming main requires an insane attention to detail, since getting any detail wrong will cause the program to either crash or develop security holes. Most people aren't monomaniacs, so most programs are full of bugs.

      Managed environments help, but don't solve the underlaying problem: any error causes completely unpredictable behaviour, rather than a few hiccups the system could recover from. We know that Turing powerful systems can degrade gracefully: human brains are (at least) Turing powerful, yet drunk humans can still walk - not a gracefully as when sober, but can anyway.

      Now, the question is: how do you make a system where errors don't cause a cascade failure, as they do in current programs? How do you build a system where programming errors are more like a badly tuned car engine than Chernobyl meltdown?

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    118. Re:Hmmm ... by pthisis · · Score: 1

      The world needs a lot more guys who can lay tile using best practice materials and approaches than the world needs guys in a lab trying to invent a better mortar

      Sure, but that doesn't mean that MIT should gear its material science program toward the guys laying tile using best practices. CMU's one of the top 3 computer science programs in the country; their curriculum isn't geared toward turning out programmers.

      --
      rage, rage against the dying of the light
    119. Re:Hmmm ... by Anonymous Coward · · Score: 0

      It's do develop the understanding of higher level concepts. It is not to teach someone a series of "best practices", rather, "best practices" are derived from the intimate understanding that institutions of higher knowledge bestow upon you. For the less intelligent, this means going to college after university. For the more intelligent, this means skipping university all-together. ;)

    120. Re:Hmmm ... by dealmaster00 · · Score: 1

      As a recent CMU alum, I can testify that the Java language is not stressed by any means at the University. There are 2 introductory programming classes that are Java based. If you scored a 4 or 5 on the AP computer science exam, you can get credit for 1 or both of these, respectively. Java is a perfectly acceptable programming language to begin learning with. I studied it in high school and was able to pass out of both of these classes, so I took C classes next. If one has a solid understanding of the Java language they will see that it is in fact very similar to C, and any C class should be a breeze. Then there is an algorithms class (15-211) which is Java based. After this, every other standard undergraduate computer science class is not Java based, but more focused on systems/functional programming (if one wishes to take a programming route). After freshman/sophomore year, you will be hard pressed to find significant Java work in a CS class. Note that the above was true when I attended CMU, things may be slightly different now.

    121. Re:Hmmm ... by ADRA · · Score: 2

      By your logic, Universities should be teaching Cobol again. They STILL to this day 40 years after the language's hay day make massive amounts of money to basically maintain the ugly code of Cobol because nobody else wants to. Do you respect Cobol programming more than C? Then I suggest you detach the salary proposition from the equation.

      I learned C in school and for years worked in companies where my job was in C. I was in a tight spot in 2001 when the bubble broke and I dove into a Java shop. I had done a Java course in school, but I would never consider myself competent in it at that point. The first thing I realized was "Damn, I can be so much more effective at coding in this language. I don't have to do any of the crap I had to deal with in the C world. It just works". I quickly fell in love with the language, and now years later I'm still a fan of the language even now that the sick plague of dynamically typed languages are flooding into popular use (again).

      --
      Bye!
    122. Re:Hmmm ... by ADRA · · Score: 1

      Why not? Because invariably they'll base their curriculum on X86 which is the most blasphemous instruction set in the world. F*ck you Segment offsets!!

      --
      Bye!
    123. Re:Hmmm ... by stanlyb · · Score: 1

      How? How do you do parallel programing using OOP??????????

    124. Re:Hmmm ... by frist · · Score: 1

      You will find even less demand for functional programming or imperative programming. Hopefully other schools won't follow this loon's lead, because we will have to import even more programmers (or offshore) from overseas.

    125. Re:Hmmm ... by multipartmixed · · Score: 1

      I don't understand what you mean by "C-teaching" university etc.

      Do universities *really* teach these languages?

      When I went to school, we were taught Turing in first year, and were told straight-up that we would never use it in the real world. It was a fine language for exploring CS concepts, having easy (pascal-like) syntax and support for abstract data types.

      In second year, we were taught Miranda, SmallTalk and Prolog. Quickly, all in one half-semester course. We learned just enough of each programming language to write programs in each of the functional, object-oriented, and logical programming paradigms. These weren't hand-holding courses, either: basic syntax and ideas were explained, after that it was pretty much RTFM for details.

      In third year, we had a digital electronics course that required us to interface with our VHDL projects in C. Nobody taught us C, but there were tutorials available for the hopelessly-lost. We were expected to learn the language on our own. I don't know if the tutorials were any good or not; attending would have affected my party schedule.

      In third year, we also had a software engineering course that taught client-server architecture using X11 as a model and discussed object oriented programming design. We were expected to be able to write a simple GUI application in C++ using X11 base classes, and to override bits of one of the widget toolkits to do something or other.

      I've had a successful career programming in many languages - mostly C. I didn't need to learn how to write program in C in school; I just needed to learn how to write programs.

      IMHO, anybody who thinks a university should be teaching them a particular programming language should probably be going to a community college. I RTFA and I think CMU is on the right track. And given the quality of all the CMU grads I've ever had the pleasure of working with, I'd have to say that whoever is running their CS program is doing a really great job.

      --

      Do daemons dream of electric sleep()?
    126. Re:Hmmm ... by Anonymous Coward · · Score: 1

      And then we are stuck with the endless bloat, endless patchwork with messy kludges that are in constant need of fixing....

      So what is your proposal? We go back to producing non-portable code close to the metal? There are reason many smart people have spent the last 50+ years abstracting away from the machine level.

      Computers are usually better at handling the low-level details than humans. Hardware has exponentially grown more powerful, cheaper and plentiful such that the programmer's time is a lot more important. At the same time, software requirements has grown ever more complex. And finally, computers are our slaves, not the other way around. Abstractions are to make life easier on us.

      Computers would be just as "happy" if we fed them 1s and 0s. But that's notoriously hard on humans. So we started abstracting away from that, beginning with assembly. And even in the 50s when you really, really need to squeeze every bit of performance out of those slow-lumbering beasts, people were working on 3rd generation languages. Many assembly programmers thought there was no way Fortran could produce assembly code that would run as well as hand-written code. But they were wrong.

    127. Re:Hmmm ... by bill_mcgonigle · · Score: 1

      As a matter of fact, if you're using anything other than a magnetized needle to right to your hard drive, quit calling yourself a computer user.

      Hard drive? If they're not playing Doom on Jacquard's loom, they're just wannabes. Sure the frame rate sucks, but this is about keeping it reel [sic].

      --
      My God, it's Full of Source!
      OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
    128. Re:Hmmm ... by pthisis · · Score: 1

      As far as I'm concerned, starting CS students with OO modeling is appropriate and I am disappointed in CMU in eliminating this from the freshman curriculum. Why? Because they need to start learning the discipline of thinking about computer constructs as things and not strictly abstractions. To think about how they are structured, behave, and interact

      I guarantee you that with the freshman curriculum moving to include functional programming, the students will be thinking a lot more about structures and interaction than in any freshman-level OO course. You can't avoid thinking about it when you're programming in ML (which CMU uses for most of their functional stuff).

      --
      rage, rage against the dying of the light
    129. Re:Hmmm ... by Anonymous Coward · · Score: 0

      they do 'projects together' which in my experience means that the alpha nerd does 90% of the work and the other 4 team members offer worship and keep the ramen coming

      So. It's very good training for the real world. FWIW, my school (UVa) engineering courses often required group projects. I don't ever recall having been on a team where one guy did all the heavy lifting. Occasionally there would be groups where there was one free rider, and you'd hear people complaining about him/her.

    130. Re:Hmmm ... by Anonymous Coward · · Score: 0

      Perhaps you're looking for grads from the wrong places. CS and SE student at Rose-Hulman do in fact build their own processors in Comp Arch I.

      Disclaimer: I'm a graduating CS/CPE double major from Rose.

    131. Re:Hmmm ... by S.O.B. · · Score: 1

      Sounds a lot like my last year of high school, if you add 3 advanced math classes, but I still found the time to take a computer course and work part time as a programmer for a small firm.

      I've found people head down two paths when they start out in IT. The first group has a real curiosity about everything related to computers and usual end up being the techies that keep IT departments working. The second group are people who an interest and a bit of attitude but quickly get overwhelmed by the day to day demands of IT work. They usually end up getting out of the pure technical roles and move towards more management type roles within a few years.

      Because of the extremely technical nature of the job it requires a true passion for the work to be successful. If by the time you get to university you don't have more than a basic (no pun intended) proficiency in programming then you're likely headed for a non-techie role.

      --
      Some of what I say is fact, some is conjecture, the rest I'm just blowing out my ass...you guess.
    132. Re:Hmmm ... by narcc · · Score: 1

      And most programming solutions require this because ... computers are too slow today? Lacking in memory? Compilers don't produce optimized code that's usually better than hand written assembly?

      This attitude, coupled with the horror show that is the state of "modern" programming languages, is the reason that we have so much shit software that uses ridiculous amounts of memory and runs slower than Rosie O'Donnell.

    133. Re:Hmmm ... by pavera · · Score: 2

      its not compiler optimizations you're missing when you only learn java. Sure java does lots of stuff for you and does the "right thing" most of the time... But it doesn't teach you how things work at a low level. Learning only java doesn't teach you how indexes in a database work, because you just use Java's built in data structures that "just work" and you never have to learn how to manually build a b-tree. Which then teaches you how indexes work, and by deduction why its a bad idea to index every column in a database table. Yes, I once worked in a place full of java only programmers, they had indexed everything in the database to "make it faster" and were then completely confused as to why it wasn't faster. When I explained to them how b-trees (the database indexes were b-trees) worked, and how indexing in a database works in relation to that, they were actually pretty upset that in all the schooling they received no one ever explained this to them. They weren't "dumb" or "bad programmers", they just didn't know what they didn't know, once I explained it, they were very happy, willing to learn, and understand. For a couple of them it really opened their eyes and they'd come ask me questions regularly for the rest of the time I worked there... things like "I've always used java's built in sort functions, but why are they fast?".

      Repeat above story for any sufficiently advanced data structure (linked lists, doubly linked lists, trees, queues, graphs, etc). Having a fundamental understanding of how the data structure works is imperative to being able to understand when its a good idea to use one, and when it will be an epically bad idea to use one. I learned these things in AP CS in high school which when I took it was c++. I "relearned" them again in c++ my freshman year of college, then the college changed to all java.... and I never heard mention of a data structure again, or for that matter an algorithm "Just use javas sort, its faster than anything you'll write"... Data structures and algorithms are still very important in web programming. Just cause you can get those 1.5 million rows out of a database doesn't mean you can effectively deal with that scale in code (much less 100 million or a billion records). I'm sure you can teach data structures and algorithms in java, my experience at a large state university though argues that java makes it too easy to gloss over the details... and so lots of professors will.

    134. Re:Hmmm ... by mswhippingboy · · Score: 1

      What? Where are you getting your information. If you examine the assembly code generated from a C program (/FAs option for VisualStudio, -S option for gcc, etc), you'll see that the entry point to the program is exactly at "main". Any C runtime initialization is performed when/if it's needed. In fact, if your program does not link in any C runtime calls, the executable will contain no "runtime" at all. This is no different than if you had coded the program in assembler and named the your entry procedure "_main" and set the entry point for the linker to "_main".

      --
      Sometimes the light at the end of the tunnel is the headlight of an oncoming train.
    135. Re:Hmmm ... by Intron · · Score: 1

      Yes it produces more powerful methodologies, because of the synergistic effects that objects have with modern cloud environments.

      You forgot "enterprise". You need to include the word somewhere in the sentence or management won't take you seriously.

      --
      Intron: the portion of DNA which expresses nothing useful.
    136. Re:Hmmm ... by Needlzor · · Score: 1

      Actually, with the addition of CSS3, HTML5 has been proven to be Turing-complete

    137. Re:Hmmm ... by farble1670 · · Score: 1

      Not everything is written in Java. Or C#

      ... or ruby, or python, or javascript, or objective C, or C++. oh, looks like we are covering a lot of ground with that statement.

      the only places where OO languages are not dominate are situations where you can't afford to step back from the bare metal (OS internals, firmware, device drivers, etc). in other words, if the environment permits OO, then it dominates. that might say something about what developers prefer and what works best.

    138. Re:Hmmm ... by RobDude · · Score: 1

      As much as people hate to admit it, the ratio of actual innovators to implementors is STAGGERING. Even really great, successful, smart people, haven't contributed anything of value to the knowledgebase of the field. That's not a bad thing. Most college professors, even with their published papers in magazines nobody reads and their awards haven't. Even most really successful developers and architects aren't doing anything other than implementing best-practice solutions to really common problems.

      The real test shouldn't be whether or not you look for 'new ways to solve problems' but whether you *can* find *better* ways to solve problems or whether you can find solutions to problems that haven't already been solved. The number of people who can honestly say they've accomplished either of those things is unbelievably slim.

    139. Re:Hmmm ... by fph+il+quozientatore · · Score: 2

      I never thought there was a functional difference between a lone line containing "i++;" "++i;". Of course, for variable assignment it matters, but what's going on under the covers? If you stop and think about it, i++ actually has to return the old value. ++i can destroy that old value and never needs to worry about returning the old value (you can avoid an extra copy).

      You need not worry about that anymore nowadays, at least in C and C++. Recent compilers optimize the useless instructions out automatically.

      --
      My first program:

      Hell Segmentation fault

    140. Re:Hmmm ... by jasomill · · Score: 1

      I don't know about *starting* in assembler, but a programmer who isn't somewhat proficient in assembler is going to have a very weird mental model of how programs work.

      You say that like it's a bad thing. Yet a person who is "somewhat proficient" in assembler will likely have a mental model of how a modern computer works, that, while possibly less wierd, is no less incorrect. And it's is even more difficult to reason about how most nontrivial "programs" work by trying to "think like the machine." Moreover, to the extent this is false, the programs tend to be either trivial, or else difficult to design and maintain.

      Once you know how the machine works, then you can start studying abstraction.

      Given that the machine is a highly layered system of abstractions, this strikes me as a naïve and even dangerous philosophy from standpoints both theoretical and practical.

      C.f., e.g., Parnas' remarks on your approach — under the heading "why conventional software development does not produce reliable programs" — "this intuitively appealing method works well," he writes, "on problems too small to matter."

      With that said, I suspect we agree more than we disagree. To wit,

      Treating OOP as the only way, or even the best way, to solve any computing problem is going to tend to produce programmers who think everything is a nail.

      I agree completely. And it's even worse to treat OOP as synonymous with "abstraction," given that the problems with OOP are not that it encourages"abstraction," rather that it very frequently seems to lead to the wrong abstractions! But students' learning less about how to build the "right" abstractions doesn't strike me as a good solution to this problem.

      In fact, the less practitioners know about "abstraction," the more likely they'll have little choice but to use "pre-canned abstractions," and in a very bad position, moreover, to evaluate vendors' claims that the "Frobozz Magic Framework(tm) v10.0" (incorporating even better "best practices") is not only both a floor wax and a dessert topping, but in fact the solution to all possible problems.

      This is hyperbole, of course, but your "square peg, round hole" comment is quite on-point —I spent years working with developers, consultants, etc., who seemed to see programming as figuring out how to "adapt customers' problems to the latest solutions," and nearly always had a "solution" in mind before they knew anything about the problem. This led to things like "projects" like replacing perfectly workable Perl-driven Web applications with Java applications that were not only buggier, but orders of magnitude slower, to boot, because "Perl doesn't scale," then, when performance became a probem, suggesting a rewrite to enable a "multi-tier architecture" that included "Web acceleration front-ends" (read: proxy servers) to cache static pages, rather than forcing the application server to generate each page dynamically.

      The reason why the Perl code was much faster than its replacement was that it only generated dynamic content once, so nearly every request was simply served by Apache out of the application's "content cache," guaranteed to be correct since the appropriate bits were purged automatically whenever new data arrived.

      When I pointed this out, I was flooded with questions about whether it was "designed with future applications in mind." When I asked what future applications were in mind, none were, so I couldn't answer the question, of course. But given that the whole thing, modulo Apache itself and mod_perl, consisted of maybe 500 lines of code and was written in the course of a couple weeks, if, given some "future application," the answer wasn't an unqualified "yes,"

    141. Re:Hmmm ... by NJRoadfan · · Score: 1

      If it means they stop doing everything in Java throughout their education, I'm all for it. There's nothing wrong with Java, and I use it often in my current company, but kids in school need to learn from the get go that languages are tools in a toolbox - use the right tool for the right job when you can. I can't remember the last time I interviewed a graduate who had used C++ or C outside of a single survey course on the language!

      This surprises me, most schools didn't become Java happy until about 2000-01 or so, I know I avoided the switch over by a few years and I started my BS in 2000. Prior to Java, most schools were teaching C++ without exposing the students to classes and such.

      Hell, I can't remember the last time I interviewed a post 2000 graduate who had built their own processor or had even taken an assembly class. The kids are just as smart, just as eager, but woefully unprepared.

      I took asm, it was required. Granted it was VAX asm, still taught the concepts.

      The one thing they are getting a little better at is included some 'software engineering' into the curriculum - but only a little bit better in that they do 'projects together' which in my experience means that the alpha nerd does 90% of the work and the other 4 team members offer worship and keep the ramen coming.

      Group work in schools usually resulted in one doing all the programming since the rest well, simply didn't know how to program. Its a joke how many folks working towards a computer related degree struggle with it.

    142. Re:Hmmm ... by Antisyzygy · · Score: 1

      I went through two years of CS courses at a university as a math major. They used Java as the language and frankly, it was the worst choice for beginning programming students. Its too modern, teaches you to be sloppy (with the whole garbage collection thing) and does not give you a good understanding of how a computer actually works. When I took C programming classes it was a much better course, as you had to be careful with memory allocation, pointers and such and the language is only procedural based, which makes more sense if you are in Calc I or Precalc over objects to a freshmen. Even though I don't know any assembly, I believe it would have been the best choice for a freshmen intro to CS course followed by a class in C. Java should only be a class you take as needed.

      --
      That brings me to an interesting point, / . is just "the ramblings of socially-inept, technology-literate news-mongers".
    143. Re:Hmmm ... by Anonymous Coward · · Score: 0

      That certainly depends on what OO means to you. From what I can see, Linux is quite OO code - everything is quite modular and it's a very nice state machine. From where I sit, Linux itself can be considered OO code - just that it doesn't use classes or OO language doesn't mean anything.

      non-OO code is like libc

    144. Re:Hmmm ... by Antisyzygy · · Score: 1

      Assembly should be taught to every CS major yes, but its more useful to the Computer Engineers. A good CS dude is partially a mathematician and as such they think in functions and operations (i.e. procedural language).

      --
      That brings me to an interesting point, / . is just "the ramblings of socially-inept, technology-literate news-mongers".
    145. Re:Hmmm ... by dave562 · · Score: 2

      If you come out with solid math and science skills you do fine. Programming is very easy, but requires math and logic skills.

      That is certainly one (popular) route to take into programming. A strong background in linguistics also provides a solid mental foundation for programming. The important ability to cultivate is structured, organized thinking.

    146. Re:Hmmm ... by mooingyak · · Score: 1

      If you are going into a programming course in univ you probably already know at least the basics of programming.

      Anecdotal, but from many interviews, that's about all most have when they're done with the univ too.

      --
      William of Ockham had no beard. The most likely explanation is that it was chewed off by squirrels every morning.
    147. Re:Hmmm ... by Antisyzygy · · Score: 1

      Modular is a crutch, that works well in some general fields, but are unwieldy or even a waste of resources and a roadblock in other fields. And meticulously crafted software is also a crutch, a waste of time and resources, and a roadblock in some other fields. What exactly is the argument here?

      It also gives you less job security, since if your code is easily understood and extensible, they can hire someone else at a lower wage to add on to it with ease.

      --
      That brings me to an interesting point, / . is just "the ramblings of socially-inept, technology-literate news-mongers".
    148. Re:Hmmm ... by mswhippingboy · · Score: 1
      Wow. I find it incredible in 2011 that this is even being debated. I suppose next you'll be arguing that using "goto"s is how we should all be programming.

      Sure, there are problem spaces where the efficiencies of straight "C-style" procedural programming are warranted just like there are problem spaces where C is too inefficient and assembler is warranted, but for the vast majority of problem spaces the ability to abstract away the details is absolutely necessary to achieve a reasonably maintainable application, which, at least as I read it, is how the term "superior" is being applied here.

      Companies can spend $$$ on highly trained programmers squeezing every bit of performance out of the existing hardware by optimizing low-level code, or they can spend (usually less) $$$ on increasing the performance of the hardware by another 5 or 10% to compensate for the overhead of supporting a less efficient, but easier to maintain OO implementation. Given the ever increasing hardware performance relative to cost trend, most companies opt for the latter.

      --
      Sometimes the light at the end of the tunnel is the headlight of an oncoming train.
    149. Re:Hmmm ... by arkenian · · Score: 1

      "Perhaps assembler is necessary to understand exactly how a processor works. But understanding exactly how a processor works is not necessary for development of most applications. Heck, understanding the underlying frameworks/libraries you are utilizing often isn't."

      And then we are stuck with the endless bloat, endless patchwork with messy kludges that are in constant need of fixing....

      1.) "Messy Kludges" -- I spent several years as a chief architect of a company in charge of maintaining and improving a 10 million line legacy codebase for a large organization. In my experience messy kludges result from people who ignore OO principles, not from people who ignore assembler ones.

      2.) I agree there is basic value in understanding how a processor works, especially if you're writing RT or NRT apps. If you want to highly optimize a program, being able to visualize a bit about how many instructions you've put into the loop you're repeating a million times is a good thing... But honestly, IME most of the optimization is understanding how data is vectored onto the CPU, and how the L1 and L2 caches work, these days. Furthermore... I met one of Intel's top assembly writers once. I don't remember the exact numbers, but I think he said something like he matched the compiler 85% of the time, the compiler beat him 10% of the time, and he beat the compiler 5% of the time....Increasingly the compilers optimize code so much better than humans could, that I really fail to see why actually knowing assembly well enough to write it is helpful.

    150. Re:Hmmm ... by khallow · · Score: 1

      Sure, they may be "good" inside their specific niche, but they have no versatility in their problem solving.

      I don't buy that assembly language programming gives you that insight. At high level programming, you're far more likely to be affected by varying quality in the platform dependent parts of your environment than on the nuts and bolts of the underlying CPU. Sure, it gives you options (like some ability to troubleshoot a flaky device driver) which could be better than nothing.

      Just because something is modular does not explicitly make it good code, nor does it being non-modular make it explicitly bad code.

      Non-modular code, on the scale of TeX, is a strong indication of bad code. Anything that breaks the rule of local change, local effect is going to be much harder to maintain.

    151. Re:Hmmm ... by mordenkhai · · Score: 1

      That's odd, because I live in Ca and the first 5 CS courses are Algorithm Design, C, Assembly, OO in C++, and Data Structures (in C++) which is the last class I completed last semester. I took a Java class just because I could but it does not count towards my requirements for graduation. I wonder how different the requirements are for a CS degree across the country, it seems much more varied than I would have expected.

    152. Re:Hmmm ... by ultranova · · Score: 1

      Then you are not a very strong programmer at all. Assembler is necessary to understand exactly how a processor works, and how well any given algorithm will work on that architecture.

      Except, of course, that with modern processors assembler is really a highly abstracted virtual machine running over the actual hardware. The modern processor typically has multiple pipelines, out-of-order execution, and a greater number of general-purpose registers than is made available by the instruction set.

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    153. Re:Hmmm ... by dave562 · · Score: 1

      I've found people head down two paths when they start out in IT. The first group has a real curiosity about everything related to computers and usual end up being the techies that keep IT departments working. The second group are people who an interest and a bit of attitude but quickly get overwhelmed by the day to day demands of IT work. They usually end up getting out of the pure technical roles and move towards more management type roles within a few years.

      Have you been doing IT for very long? I've been at it for fifteen years at this point and I have always enjoyed the technical side of the profession. After a while, the newness and the gee whiz factor fades. In my case it had to do with being expected to be interested and engaged five plus days a week, on someone else's schedule and time line. Tech is great and fun when it is a hobby. Once you've been doing it as a profession for a while, the rate of change can wear you down. In case it is not that I got overwhelmed, I simply lost interest in being out there on the cutting edge and dealing with all of the headaches that come along with it. I took a realistic look at where I was and asked myself, "Do I want to be the guy dealing with the bugs of the latest .01 incremental release for the rest of my life?" In my case, the answer was no.

      Once you've been through a few technology refreshes, your attitude shifts from, "Cool, new toys!" to "Here we go again..." I've seen people who tend toward two poles. They are either very helpful and enjoy helping others be better. Or they are arrogant, and derive self gratification from being the "smartest person in the room" and their ability to fix other people's "stupid mistakes".

      At this point in my career I am enjoying mentoring people who are still excited about the technology, but who in most cases are such tech heads that they either do not see, or do not care about the bigger organizational picture. Being a pure tech employee is a path to high stress and always dealing with someone younger, who has less distractions (no family yet, etc).

      I like the middle ground, where I understand the tech well enough to architect solutions to business problems, and then manage the implementation. I'm on my third iteration of that right now. Get hired, spend a few years getting everything dialed in and running smoothly, rest on the laurels for a little bit, get bored and move on to some place else where they pay more. Rinse and repeat. It has worked out well for my employers because the salary of someone who can maintain a system is less than someone who can build it from the ground up and/or identify and remedy major structural problems.

    154. Re:Hmmm ... by Anonymous Coward · · Score: 1

      Err, easily? Java, style, you'd create a class that extends Runnable (or whatever it's called - it's been a while). When you create one of those and call .run() on it, it starts in a new thread. When the object is destroyed (and garbage collected), the thread dies with it. Nice and easy. Otherwise, you've got much the same concerns as in an imperative language; result gathering, locks etc.

    155. Re:Hmmm ... by Zediker · · Score: 1

      He's probably coming from the context of entry being the point you tell the OS "i want to execute ".

      --
      I love to slaughter the english language.
    156. Re:Hmmm ... by dave562 · · Score: 1

      Many of the high profile failures seem to stem from OO-only thinking.

      I saw this first hand during a system implementation that eventually failed spectacularly (to the point where the team responsible for the project got fired). There were simply too many instances where the answer was, "We're waiting for the vendor to update the library / dll." Eventually someone in senior management said, "You are supposed to be programmers. Why is this entire project stalled waiting for someone else to write code?"

      If all a person knows are libraries and frameworks, they are setting themselves up for failure. Sooner or later they will hit a wall that they have to climb over themselves. Without a solid foundation in a real language, they will be worthless when that time comes.

    157. Re:Hmmm ... by Unoriginal_Nickname · · Score: 1

      1% who DON'T know anything? You sure about that?

    158. Re:Hmmm ... by Rufty · · Score: 1

      Usually (well, with gcc and linux, at any rate) there's a file called "crt0.o" that does initial setup (sets up argv[], maybe env[] and quite possible errno and funky things with alloca(). Once that's done it calls to main().

      --
      Red to red, black to black. Switch it on, but stand well back.
    159. Re:Hmmm ... by Codifex+Maximus · · Score: 1

      The basics; isn't that what PASCAL is for?

      --
      Codifex Maximus ~ In search of... a shorter sig.
    160. Re:Hmmm ... by Dusty101 · · Score: 1

      They chose... poorly.

    161. Re:Hmmm ... by Sulphur · · Score: 1

      I never thought there was a functional difference between a lone line containing "i++;" "++i;". Of course, for variable assignment it matters, but what's going on under the covers? If you stop and think about it, i++ actually has to return the old value. ++i can destroy that old value and never needs to worry about returning the old value (you can avoid an extra copy).

      You need not worry about that anymore nowadays, at least in C and C++. Recent compilers optimize the useless instructions out automatically.

      Load register from memory
      Increment register
      Store register to memory
      If post ++ then decrement register

    162. Re:Hmmm ... by CptPicard · · Score: 1

      Yes, exactly. For example, in my view, writing web pages does not count as programming, as the language is not equivalent to a Turing machine -- which all the "real programming languages" are. Well, we don't have infinite memory, but still..

      Basic stuff.

      --
      I want to play Free Market with a drowning Libertarian.
    163. Re:Hmmm ... by Anonymous Coward · · Score: 0

      This attitude, coupled with the horror show that is the state of "modern" programming languages, is the reason that we have so much shit software that uses ridiculous amounts of memory and runs slower than Rosie O'Donnell.

      The state of modern programming languages goes back to ideas from the 50s, 60s and 70s (Fortran, Lisp, Algol, Prolog, Simula, Smalltalk, etc). All 3rd generation and up languages are further abstractions away from assembly, which is an abstraction from machine code. Most of the time, there is no need to code close to the metal. It would be a tremendous waste of programmer's time. Not to mention a maintenance nightmare when the code base gets large enough.

      The idea since at least the 50s , if not earlier, was that unless you needed to target the machine, to focus on the problem at hand. And the best way to do that is by abstracting away, not by staying close to the metal. Humans do better by chunking data and processes and putting them into hierarchies than dealing with all the low-level details. Machines are for that, most of the time.

    164. Re:Hmmm ... by Codifex+Maximus · · Score: 1

      Well, here we have two opposing views of programming. On the one hand, we've got the Systems style programmer who can bootstrap a machine using binary digit displays and toggle switches. On the other hand we've got a Scriptor who uses canned programming.

      There are pros and cons to both approaches:
      The Systems programmer will take longer to do the job, assuredly. But, when he's done, the result will be tight fast efficient code that will get the job done in a fraction of the time a script could.
      The Scriptor can probably hack together something that will get the job done but will not scale well. You'll need a supercomputer/Beowulf cluster to handle the load.

      My opinion is: Use the scripting languages to prototype and make the final product a compilation like C/C++/PASCAL etc...

      C++ is Object Oriented and it is also compiled. Best of both worlds.

      --
      Codifex Maximus ~ In search of... a shorter sig.
    165. Re:Hmmm ... by NikeHerc · · Score: 1

      And yes, I do consider Knuth to be overrated :p

      Get back to me when you have published 22 books plus the equivalent of the incredible TAOCP series, when you have about 50 years of CS experience, when you have the admiration of most of the educated, civilized world.

      And, yes, I am a Knuth fan.

      --
      Circle the wagons and fire inward. Entropy increases without bounds.
    166. Re:Hmmm ... by moco · · Score: 1

      Human behaviour is fuzzy, that is, there's a "good enough" approach to say... walking. As long as I am on my feet and "kinda" moving towards my destination, it is good enough. On the other hand, software tends to be very precise. I know of no customer of mine that would accept a program as good enough if it hit the database with the correct information 90% of the time.

      What is very important though, as you already said, is the ability to recover from some error. This is no trivial task and requires lots of experience and attention to detail, especially as the components of the software grow in number and complexity. A good design is essential, and lots of attention to detail is needed. The problem is that customers are not willing to pay for that unless they belong to a small set of industries such as airspace or nuclear.

      --
      moi
    167. Re:Hmmm ... by naasking · · Score: 1

      Agreed ... but aren't most modern OS's OO based? In most cases students need OO programming in order to become employable.

      You're employable if you can program well in *any* language IMO (speaking as a developer who has hired others). In fact, the more wild the language, the more impressed I am. :-)

      And OS's may be object-based, but not object-oriented. Big difference.

    168. Re:Hmmm ... by Anonymous Coward · · Score: 0

      that was funny
      wait 2-3 minutes
      in 1998

    169. Re:Hmmm ... by artor3 · · Score: 1

      Where are you interviewing people from? I graduated in '07 and all the things that you bemoan as missing in new graduates were required. Two courses in computer architecture culminating in designing a CPU, with optional advanced courses that covered design of other components, such as DMA drivers and USB PHYs. The computer architecture courses also covered assembly programming, including having us reverse engineer programs and create buffer overflow attacks against them. The intro to programming courses were entirely C/C++ and were followed by a course in embedded control (in C) and a course in algorithmics (C++). There were also software engineering courses that required us to take common patterns and implement them in various languages.

      I was not the only person in the program, nor was my alma mater the top rated school in the world. If you can't find people under the age of 30 who know this stuff, then odds are you're not advertising the job in the right places, or you're not making it sound interesting enough.

    170. Re:Hmmm ... by NikeHerc · · Score: 1

      (gp) Don't CS grads have to write a compiler to get their degree like they did in the good old days? That's really all anyone needs.

      (parent) Most. Useless. Class. Ever. Learned *nothing*. It was just "implement X. Here is the design of X. You must implement it this way."


      Sorry to hear your compiler writing class was a bummer. My compiler writing class was the most interesting class I took while earning my Master's degree in CS. The prof was spectacular, I learned a ton of stuff, and I later applied the knowledge when I wrote a cross-assembler and worked on several compiler projects.

      --
      Circle the wagons and fire inward. Entropy increases without bounds.
    171. Re:Hmmm ... by stabiesoft · · Score: 2

      Man HS has gone downhill. In the 70's I had 6 years of math, 3 years of chemistry 1 semester of physics and 1 semester of programming in fortran. The card decks had to be sent to the main downtown facility to be run and they would send back thee printouts the next day. Now with computers all but free, your school could not come up with a VB course? Sad indeed.

    172. Re:Hmmm ... by CptPicard · · Score: 1

      In another very real sense, the processor is not imperative in the way asm makes it look like -- there are micro-instructions, parallel pipelines, the works. What I am trying to get across that as long as your formalism is Turing-complete,

      And I hope that you do understand that by functional programming I mean something quite different from something like a C function -- it's not a clever compiler trick, but pretty much a whole programming paradigm with its roots in formal logic and math...

      --
      I want to play Free Market with a drowning Libertarian.
    173. Re:Hmmm ... by Homburg · · Score: 1

      If your program does not link in any C runtime calls, the executable will contain no "runtime" at all

      If the executable doesn't contain the C runtime, it won't work at all, because the runtime contains the function which is the actual entry point, which is traditionally called _start on Unix (I can't remember if it's something different on Windows). This is why if you don't include a "main" function you'll get an error from the linker about an undefined reference - the C runtime refers to the main function in order to call it after it has performed initialization.

    174. Re:Hmmm ... by Lobachevsky · · Score: 1

      static initialization occurs before main(). I'm not talking about function-scoped "static", but real static initialization. Also, any function with __attribute__((constructor)) also gets called before main().

    175. Re:Hmmm ... by CptPicard · · Score: 1

      When you are working on a specific real world field, any of them, they present their real-world requirements which must be taken into account. This is software engineering.

      Proving that something is deterministic has to happen in theory, and then robustly implemented in ways that preserve the logic of the proof. Anything else is folly.

      This is a bit of an Engineering vs. CS debate at its core. I am not an "engineer", but more of a math-style CS guy, so for me it's both the asymptotic behaviour of algorithms that really matters, and there programming is not necessarily involved much if at all. What I am interested in programming, though, is in "how" we express programs in a symbolic way, and how that influences our thinking regarding the program and the problem solution it represents. There asm fails, IMO, and the claims of guys who think they see bits fly in the air Matrix-style as they code, seem suspect.

      --
      I want to play Free Market with a drowning Libertarian.
    176. Re:Hmmm ... by Homburg · · Score: 2

      Seriously, TeX is a great example of how being a great computer scientist doesn't make you a good programmer. From the concept ("instead of a typesetting program, I'll create a programming language which typesets as a side effect") to the implementation of that concept, TeX is evidence that they had some good weed in the South Bay in the 70s (BibTex, on the other hand, is a tragic illustration of the effects of the crack epidemic in the 1980s).

    177. Re:Hmmm ... by Homburg · · Score: 2

      If you stop and think about it, i++ actually has to return the old value. ++i can destroy that old value and never needs to worry about returning the old value (you can avoid an extra copy). If you're in a high performance loop, either with not much body or with a lot of increments, such things matter.

      Note that this only matters with overloaded ++ operators in C++. For the basic types, the compiler will optimize out an unused copy.

    178. Re:Hmmm ... by osu-neko · · Score: 1

      The basics; isn't that what PASCAL is for?

      That's precisely what freshman classes were taught in when I started on my CSci degree. I'm probably dating myself, though...

      --
      "Convictions are more dangerous enemies of truth than lies."
    179. Re:Hmmm ... by CptPicard · · Score: 1

      I suppose I should have read TACOP earlier in life so that the book would have had a fair shot of "educating" me from ground up on its own terms. As I am, I was a bit underwhelmed by how much pages he spends on things that are relatively straightforward. I'm not saying the stuff isn't "fundamental", it's just that I'm not sure it is particularly useful for an experienced CS type, and as far as teaching the "art" of programming, IMO, both the selected topics and the presentation would be different in my own version... which would probably be closer to Structure and Interpretation of Computer Programs :-)

      --
      I want to play Free Market with a drowning Libertarian.
    180. Re:Hmmm ... by CptPicard · · Score: 1

      There's a lot of coding that goes nowhere near the level of abstraction of assembly.

      I suspect you mean "lack of abstraction"? Anyway, I disagree with the notion that for some weird reason, the "strongest" programming happens on the asm level and that it is the assembly itself that somehow, as a language, is special in the sense of gifting a deep understanding of programming in general. It's just a limited set of small instructions, and just because it is "hard" (in the "lot of work" sense), doesn't mean it's actually "informative" -- and as a thought experiment, I'm willing to bet a lot of money that a proficient high-level programmer is able to actually do something with asm when exposed to it, than a hypothetical asm-only programmer would be able to do only in asm. The building blocks for ideas are simply not present there.

      --
      I want to play Free Market with a drowning Libertarian.
    181. Re:Hmmm ... by joaommp · · Score: 1

      But anti-modular? Anti-parallel?

    182. Re:Hmmm ... by mikael · · Score: 2

      C++ and parallelization don't seem to be mutually exclusive. It's fairly easy to write a C++ wrapper around pthreads, so you have a class container for all the data, one or more functions to process a single thread task, and a single function call to scatter the data, assign and supervise so-many threads to the task and gather the data afterwards.

      --
      Vintage computer adverts: http://www.vintageadbrowser.com/computers-and-software-ads
    183. Re:Hmmm ... by Score+Whore · · Score: 1

      If it's just you it's not dating, it's being a lonely old codger.

    184. Re:Hmmm ... by xero314 · · Score: 1

      So what if [java] doesn't compile to machine code?

      Java does compile to machine code. The difference is that the compiler is part of the runtime and it only compiles code as it needs to. At least on all the modern JVM's that use Just in Time compilation.

      you can freely use native types

      This on the other hand is not true. You can't use machine native types. Even the primitive types are not native. Native types would not be portable. Even using the Java Native Interface you can't pass native types around.

    185. Re:Hmmm ... by narcc · · Score: 1

      Er, you know that markup languages don't encompass the whole of non-Turing complete languages right?

      I'm starting to doubt your claim of a MS in CS...

    186. Re:Hmmm ... by CptPicard · · Score: 2

      Sure, they may be "good" inside their specific niche, but they have no versatility in their problem solving.

      Actually it sounds like you are the one coming from a specific niche -- probably some kind of embedded development. It is exactly the versatility in problem solving that is, in my view, not tied to any kind of processor architectures or anything of the sort -- it comes from exposure to both problems (in their abstract form, as the same stuff shows up in various real-life incarnations) and various kinds of solution styles. As my argument goes, assembly just simply doesn't provide the latter -- you still need to know what to actually do with it, even if you had to implement something strictly in terms of a processor architecture.

      By the way, the most gifted programmers I have met -- really, "thinkers about programs" -- have been avid Lispers. Interacting with one years ago made me a Lisper, too... best investment in a programming language I ever made.

      Just because something is modular does not explicitly make it good code, nor does it being non-modular make it explicitly bad code.

      Modularity usually is a sign that the problem's components have been recognized correctly. In 99% of the cases a well written piece of code where the programmer has understood the problem, is decomposed sensibly into some kind of units. In the remaining 1% the programmer really better be a programming god, and even if he were, he still should have been able to do provide a better decomposition.

      --
      I want to play Free Market with a drowning Libertarian.
    187. Re:Hmmm ... by Score+Whore · · Score: 1

      No true Scotsman, eh?

    188. Re:Hmmm ... by jgrahn · · Score: 1

      I outright laugh at people in an Interview when they ask me if I'll write OO code.

      I bet you have to go to a lot of interviews, then.

      OO code is worse than 10,000 jmp, or goto's. Code written in an OO "framework" produces an excessive of files, classes, and thousands upon thousands of useless objects that are not even necessary for the task at hand, almost as bad as XML, but worse. You end up with bloated apps, that cannot be read or understood by anyone quickly. Let alone have any of the code be re-usable anywhere else.

      You're now arguing about various frameworks which suck. You're probably right, but you haven't provided any arguments against OO.

      Here's how I think of it: objects it's about creating abstract data types that fit your problem, rather than solving your problems with a combination of raw char, int, and *. Most people seem to agree that OO also implies using inheritance and run-time polymorphism when there's a need for it. I don't know -- I very rarely see a need for that.

      Incidentally, Standard ML (the language of choice in TFA) supports abstract data types, so probably the parts of OO which the CMU guys hate are the parts I don't use a lot, not the parts I find essential.

    189. Re:Hmmm ... by CptPicard · · Score: 1

      I seriously doubt McCarthy was concerned with exactly how an algorithm worked on a given processor while he was discovering an alternative computing model to Turing machines.

      If you're thinking Lambda Calculus, it's from Alonzo Church, not McCarthy, although McCarthy's Lisp has its roots there. But theoretically, all of them are equivalent.

      --
      I want to play Free Market with a drowning Libertarian.
    190. Re:Hmmm ... by NoOneInParticular · · Score: 3, Interesting

      I think that CMU's point is that in a world where serial speed is stagnant, but where computers will become increasingly parallel (thousands of cores), a methodology that tightly links state and function, and which main mode of operation is to mutate state (i.e., OO) is not a likely candidate to stay dominant.

    191. Re:Hmmm ... by narcc · · Score: 1

      Not to dismiss my earlier reply, but I couldn't resist passing this along:

      HTML5 + CSS3 is Turing Complete

      Neat, apparently Eli Fox-Epstein managed to implement Rule 110 in HTML5 and CSS3 -- check it out

      I know it misses the point -- but it's absolutely hilarious given your last post.

    192. Re:Hmmm ... by Jhyrryl · · Score: 1

      Programming is a craft. You have to love doing it to be good at it.

      Agreed. When I interview someone for a programming position at any level, I drill them on this more than I do on their technical talent and training. I can train anyone with talent, and I can quickly identify those who don't have talent. But if there's no passion for programming, then there's no reason for me to waste my time with the training, regardless of the talent level.

      Being smart and having knowledge will not make someone successful, not without the right attitude.

      --
      Jhyrryl
    193. Re:Hmmm ... by gd2shoe · · Score: 1

      (He's trolling. It's not worth it.)

      No, but you do need to be able to read Shakespeare. Nobody is suggesting we practice using card readers or programming by hand. We need to go back far enough to understand what is going on, but not the truly archaic. (and no, undergraduates don't need to be fluent in assembly.)

      --
      I won't join Slashcott. OTOH, If Beta goes live, I just won't be back until it's fixed. Sorry Dice.
    194. Re:Hmmm ... by CptPicard · · Score: 1

      Uh, no. I'm defining programming languages strictly as Turing-complete ones, which is the class of the languages that we know to be capable of solving the problems we work with in automated computation... I don't understand what the controversy is in this statement.

      --
      I want to play Free Market with a drowning Libertarian.
    195. Re:Hmmm ... by borgheron · · Score: 1

      OO is just another tool for programmers to use. It is by no means a panacea. I agree that it should be taught AFTER a class in functional programming and, perhaps, even after the student learns about how the computer actually works (assembler, computer architecture).

      GC

      --
      Gregory Casamento
      ## Chief Maintainer for GNUstep
    196. Re:Hmmm ... by CptPicard · · Score: 1

      Ok, so I hadn't heard of that yet. Doesn't alter my actual point one bit though.

      --
      I want to play Free Market with a drowning Libertarian.
    197. Re:Hmmm ... by Dan+Ost · · Score: 1

      A novice prefers the tools that he knows.

      A tradesman prefers the tools he's most comfortable with.

      A craftsman prefers the best tool for the job.

      A vendor prefers an ideology.

      You, sir, sound like a vendor or someone who has drank the vendor kool-aid.

      OO is a good tool for a set of common problems. Trying to apply OO outside that set has resulted in more crap software than any programming fad/paradigm that I can think of.

      --

      *sigh* back to work...
    198. Re:Hmmm ... by woboyle · · Score: 1

      Shows how one can make mis-assumptions when not all of the data is available... :-) That helps (using ML for functional programming), but I still think that OO analysis and design are proper subjects for early CS program courses. JMHO...

      --
      Sometimes, real fast is almost as good as real-time.
    199. Re:Hmmm ... by gslavik · · Score: 1

      My professional title is "application administrator." If you have java code running on a java app server, I support it. Problem is, over my 2.5 year experience in this position, there are a lot of "OutOfMemory" issues that occur. There are also a lot of issues related to lazily configured hibernate causing database performance issues. And of course, the fixall comes from Windows ... "just restart it." Only very few Java developers could actually support the infrastructure they code for, that includes database, messaging and ESB backends.

      If I had a shotgun to point at some developers, there would be an extreme shortage of developers.

    200. Re:Hmmm ... by Daniel+Phillips · · Score: 2

      That certainly depends on what OO means to you. From what I can see, Linux is quite OO code - everything is quite modular and it's a very nice state machine. From where I sit, Linux itself can be considered OO code - just that it doesn't use classes or OO language doesn't mean anything.

      non-OO code is like libc

      Actually, not using classes does mean something: the code is more ugly, inflexible and hard to maintain than necessary. Speaking as someone who lives and breathes the stuff.

      Linux kernel would be far better off actually compiling its class-oriented portions with a proper object oriented compiler. Likely as not, the code would be more efficient due to optimizations that can be done on virtual functions. Look at the hundreds of places where you have "if (obj->fn) opj->fn". In many cases that extra test is just pure overhead and can introduce pipeline stalls.

      Still scratching my head about the linked article's claim that OOP is anti-modular. On the face of it, that claim is bold and counter to my experience.

      --
      Have you got your LWN subscription yet?
    201. Re:Hmmm ... by narcc · · Score: 1

      The idea since at least the 50s , if not earlier, was that unless you needed to target the machine, to focus on the problem at hand. And the best way to do that is by abstracting away

      Yeah, we're long past the point where abstraction adds simplicity, we've been adding unnecessary complexity for more than a decade.

      Just take a look at this example of reading a file and displaying it's contents to the console using Java.

      What a waste. I stand by my earlier post.

    202. Re:Hmmm ... by omglolbah · · Score: 1

      You might be surprised to know that some of the students starting these courses have never touched programming at all.
      Hell, in 2003 I had people in my class who had never used a word processor.... this was in a course-line on programming industrial PLCs.... scary :p

    203. Re:Hmmm ... by Daniel+Phillips · · Score: 1

      Those that're just taught OO actually have gaps in their knowlege coming out of college and think in a "just so" way like the parent says

      Some truth to that. I had interns coming out of UCLA working on my project at Google who were not ashamed at all about using malloc as part of their per-function-call API. After squirting code like that all over the code base it took longer to get rid of it than it did for them to write it in the first place. Epilogue is, after converting it back to reasonably orthogonally, typical C code it also shrank in size by a factor of 5 or so and was orders of magnitude more efficient, plus maintainable, whereas in that sort of weird C++-in-C style it was nigh on indecipherable not to mention buggy. I was pretty shocked and wondered what kind of education these highly sought after interns were actually getting.

      Note that I am not arguing against OOP at all, I get a huge amount of mileage out of it. I am instead arguing against mindlessly applying some idea like "new is OOP, use it everywhere" in completely inappropriate contexts. I am pretty sure they would have made the same mess in C++, just not as immediately obvious.

      --
      Have you got your LWN subscription yet?
    204. Re:Hmmm ... by cowboy76Spain · · Score: 2

      Yes, learning Basic at home helped me a lot with Java.

      I had a little trouble at the beginning compiling with the line numbers, but I solved it quickly. Now my code is as efficient and good looking as everyone's else.

      /* 10 */ public static in main(String args[]) { // This line does nothing. Brackets are empty and they did not even 'DIM' args
      /* 20 */ System.out.println("Hello world!"); // semi-colon because the guys at Sun / Oracle didn't figure out that the line ends at CRLF
      /* 30 */ } // Maybe this has something to do with the opening symbol at 10

      Still working it with GOTOs, yet.

      --
      Why can't /. have a rich-text editor? Editing your own HTML is so XXth century.
    205. Re:Hmmm ... by Daniel+Phillips · · Score: 1

      I suppose next you'll be arguing that using "goto"s is how we should all be programming.

      I'll argue that, at least in the case where what you're writing is a parser for example, in which the most natural and efficient embodiment is a state machine directly implemented with jumps. In this case the goto implementation is also the most readable and easiest to verify because you can mindlessly map it back to your original state diagram. (You did write the state diagram before starting to code didn't you? Didn't you??)

      --
      Have you got your LWN subscription yet?
    206. Re:Hmmm ... by Daniel+Phillips · · Score: 1

      Linux is NOT OO.

      You'd be wrong about that.

      --
      Have you got your LWN subscription yet?
    207. Re:Hmmm ... by Daniel+Phillips · · Score: 2

      Which is why a certain CS professor, you may have heard of him, he's called Knuth, uses Assembler in his somewhat reasonably well-known(some would call them the bible of CS) books.

      I have a great deal of respect for Knuth and have implemented a number of algorithms from his texts. Particularly in the case of high precision arithmetic, it was necessary from time to time to actually read his horrible assembly language. The end result was good and tight, however I can say with confidence that his exclusive use of assembler for detailing algorithms is a blemish that weakens his monumental work. There are some cases where only a description of the algorithm in machine instructions will do, for example where a carry flag is an integral part of an algorithm, however the vast majority of his algorithms would have been better expressed in an algorithmic language.

      That said, I will still continue to collect everything he publishes, and aspire to understanding more of his deep mathematical presentation.

      --
      Have you got your LWN subscription yet?
    208. Re:Hmmm ... by wisnoskij · · Score: 1

      In my opinion over half of being OO is simply striving for understandable and reusable code (the rest being mostly unimportant specifies), personally I think you might have more OO-ish code then you think.

      "Devs that rely on libraries ..."

      lol, you don't like relying on libraries but you still want reusable code, isn't that a contradiction? If you can use a library to do something and get out of coding it again then you are simply reusing someone else's code, and why not?

      --
      Troll is not a replacement for I disagree.
    209. Re:Hmmm ... by CptPicard · · Score: 1

      I still honestly don't get your problem here. We have Turing-complete languages which are equivalent in terms of problems they solve; then we have more restricted languages that are unable to solve those problems (regexps, markup languages etc). As far as I know, we do not have programming languages that go beyond what a Turing machine is capable of solving. If you know of some, please let me know.

      --
      I want to play Free Market with a drowning Libertarian.
    210. Re:Hmmm ... by Daniel+Phillips · · Score: 2

      my experience is that knowing how the processor works or a stack works, isn't helpful in 99% of cases..

      However, it is helpful in 100% of cases where efficiency matters.

      --
      Have you got your LWN subscription yet?
    211. Re:Hmmm ... by wisnoskij · · Score: 1

      I have been in freshmen programming courses and I know what you mean, I don't understand why they are their but their always seem to be a few.

      But I am surprised about the word processor.

      --
      Troll is not a replacement for I disagree.
    212. Re:Hmmm ... by Daniel+Phillips · · Score: 1

      I think that CMU's point is that in a world where serial speed is stagnant, but where computers will become increasingly parallel (thousands of cores), a methodology that tightly links state and function, and which main mode of operation is to mutate state (i.e., OO) is not a likely candidate to stay dominant.

      Interesting argument, can you supply concrete examples of such state mutation?

      --
      Have you got your LWN subscription yet?
    213. Re:Hmmm ... by CptPicard · · Score: 1

      If there is a designer on the project who has derived his programmatic thinking only from asm and does not understand, for example, why functional programming conceptually matters, the whole project is hosed from the start and I'd prefer to steer clear of such idiocy... designers need a FAR more high-level, abstract understanding of things. And of course in the end you cannot separate the two roles; a developer will have to be a designer in the end.

      --
      I want to play Free Market with a drowning Libertarian.
    214. Re:Hmmm ... by CptPicard · · Score: 1

      Ah, so you're a troll... no need to respond then :-)

      --
      I want to play Free Market with a drowning Libertarian.
    215. Re:Hmmm ... by Rakishi · · Score: 1

      As a matter of fact, if you're using anything other than a magnetized needle to right to your hard drive, quit calling yourself a computer user.

      Bah, everyone knows that real computer users employ butterflies not needles.

    216. Re:Hmmm ... by narcc · · Score: 1

      You're a bit thick, aren't you? My point was that your definition was incorrect, as a programmer can "formulate solutions to problems" in a non-Turing complete language. Granted, only a subset of problems, but completely True none-the-less.

      This painfully obvious observation turns your silly and unnecessary definition of programming into what you ultimately intended to say: "programmers formulate solutions to problems using programming languages"

      Which is totally useless and a waste of time.

      I know that you're very proud of knowing what Turing-complete means -- as you've used the term in virtually all of your other useless posts in this discussion (correctly and otherwise) -- but it's not unfamiliar to the Slashdot crowd, or to anyone who took an intro to CS course in college.

      Calling yourself a great programmer and then unnecessarily denigrating Knuth makes you look like an ass. Add to that the incredibly stupid things you've said that make you look like an idiot, for example:

      When you say things like this:

      Why not work in a language that represents or helps formulate the problem-space abstractions better?

      While going on about practicality you create a perfect storm of arrogance and ignorance that is hard to ignore -- it's like you're the best troll ever.

    217. Re:Hmmm ... by IICV · · Score: 3, Informative

      Until recently, I never thought there was a functional difference between a lone line containing "i++;" "++i;". Of course, for variable assignment it matters, but what's going on under the covers? If you stop and think about it, i++ actually has to return the old value. ++i can destroy that old value and never needs to worry about returning the old value (you can avoid an extra copy).

      Isn't it great that we have optimizing compilers that'll take care of considerations like that for us?

      A.. code should be written for clarity first, and if it turns out that it's not quite fast enough only then should you start worrying about whetehr or not it should be i++ or ++i.

    218. Re:Hmmm ... by rastos1 · · Score: 1

      If you can't read straight up C code and understand what the fuck is going on, stop calling yourself a programmer.

      They used to say that about assembly. Try writing a modern game or GUI in assembly. You might well be able to do it, but by the time your'e done I'll have finished several projects and be moving on to the next one.

      I don't think that the GP suggested writing a GUI or a modern game in assembly. Or C. But I've met fresh graduates that did not understood the difference between passing a parameter by value an passing it by reference. Don't you think that such "programmer" is going to produce crappy code even if using C++ or VB.NET to write OO code? Understanding for example pointers or generally "what the fuck is going on" helps there a lot.

      Btw did you see Days of Thunder? You can be clever, talented and all that, but only understanding what's going under the hood can make you excellent.

    219. Re:Hmmm ... by dgatwood · · Score: 1

      Could be worse. This is valid C:

      #include <stdio.h>

      main() {
      int i = 1;
      line_10: printf("%d\n", i);
      line_20: i = i + 1;
      line_30: if (i <= 10) goto line_10;
      }

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    220. Re:Hmmm ... by CptPicard · · Score: 1

      Yes, I suspected you were after something like that while I assume you still understanding perfectly well what I was saying. Or maybe you don't.

      You are still intentionally missing my point in all of my posts, though, and choosing to slander me instead on irrelevancies. For the purposes of what is interesting to the discussion, programming languages really are the Turing-complete ones, as they, if needed, will also encompass the lesser classes. It does not matter that you may actually use, say, a regular expression to provide a solution to a sub-problem in a program, or that you use finite languages in your enumerations, or in the set of your programming language keywords...

      The point is that we have this class of symbolic languages that we know are equivalent theoretically, and within that class, we're free to choose a representation. I personally do not believe that assembly does, in any sense, convey any particularly interesting meanings to the programmer within that class. This is the reason why higher-level programming languages exist.

      I am not sure how I could actually mention Turing-complete languages without sounding like I'm somehow "proud" of understanding of the meaning of the term. Sorry, but I can't avoid using it when its usage is appropriate.

      --
      I want to play Free Market with a drowning Libertarian.
    221. Re:Hmmm ... by AaronW · · Score: 1

      I agree with this. OO does have a place in system level programming. Years ago I worked on a complex networking driver for OS/2 (about 100,000 lines of C++) to handle ATM (Asynchronous Transfer Mode). The company I worked for also had a driver for Windows NT that was written in C. The C driver, by comparison, was 360,000 lines of code and tended to have a lot more bugs and was much more difficult to maintain.

      The C++ driver was considerably smaller and faster and contained more functionality than the equivalent C driver. Performance was also excellent due to the way the data path was implemented.

      I think C++ definitely has its uses and can be great for things like protocol stacks or where a lot of complexity takes place. It can be a lot trickier to work with C++, though, which I think is probably the main reason. C is a much simpler language than C++ and it's a lot easier to understand what's going on at the machine level without a lot of experience.

      I think there's definitely room for C++ within Linux, though. I think it might be easier to restrict it to loadable modules and I recall that somebody once implemented a C++ framework for modules.

      --
      This post is encrypted twice with ROT-13. Documenting or attempting to crack this encryption is illegal.
    222. Re:Hmmm ... by Daniel+Phillips · · Score: 1

      I think there's definitely room for C++ within Linux, though. I think it might be easier to restrict it to loadable modules and I recall that somebody once implemented a C++ framework for modules.

      No framework is necessary, just declare the external linkage extern "C".

      --
      Have you got your LWN subscription yet?
    223. Re:Hmmm ... by guruevi · · Score: 1

      And that's what OOP should be - it should be abstracting away which modules to call and automatically parallelize the calculations on an array as optimally as possible for the platform. However OOP's fame has made it that programmers think everything should be an object within an object within an object.

      Need an array? There's an object for that which includes the array and all functions you might ever need to call in your life as a programmer. Need a string? Here's an object for that where you can serialize it in a AJAX call and also divide your string by a numerical value. Need a low-level GPU calculation? Here's an object that instantiates the whole freakin' GPU's memory space. I just built a program - it's also an object so you can put your object in my object and we can object our programs together.

      --
      Custom electronics and digital signage for your business: www.evcircuits.com
    224. Re:Hmmm ... by thegarbz · · Score: 1

      Thinking in assembler is a last line of optimisation and not something that is relevant or even related to bloatware. Bloatware comes from recycling old APIs, writing new ones expanding functionality within the bounds of ensuring backwards compatibility isn't broken. Bloatware comes from being removed by several layers from the system. Sure I could write a hello world program on the command line in C, or I could write it in HTML5 to dump in the browser window, which causes more bloat?

      I think in assembler, but then I write programs which are often limited to 16k of program space. The type of optimisation you get from "thinking in assembler" is like a for-loop using 7 processor instructions to determine its break condition, where as a while-loop uses 5. Compilers these days are fantastic and even in cases where space is a premium they are well documented so you know the for-loop is going to save you two operations on a while-loop.

    225. Re:Hmmm ... by colinrichardday · · Score: 1

      I'd be more worried if they had never used a text editor.

    226. Re:Hmmm ... by asc99c · · Score: 1

      > If by the time you get to university you don't have more than a basic (no pun intended) proficiency in programming then you're likely headed for a non-techie role.

      I don't agree with this. Not everyone is from an environment where they will have been exposed to much of this stuff - certainly, before I went to university, I couldn't do any programming. I didn't know many people from any professional background really, just knew I quite enjoyed messing about with computers and figured I'd do computer science. My parents both work in the public sector, the school careers service was very heavy on public sector jobs (IIRC airline pilot was the only non public sector job which appeared on my list, and I'm colourblind which rules that one out...) In the end I've been a techie for 10 years now and am still mostly avoiding moving into management.

      University is the first time people are really making their own choices on a large scale. Any assumptions made on a person before that are unlikely to be valid.

    227. Re:Hmmm ... by deniable · · Score: 1

      Copy, paste, compile, run, shudder.

    228. Re:Hmmm ... by deniable · · Score: 1

      It was when I went through. Now, if Java is the new COBOL, how can it also be the new Pascal?

    229. Re:Hmmm ... by deniable · · Score: 1

      Did you every have any problems with pointers? The assembler courses are designed to make pointers understandable. I guess if you're working in modern languages that abstract away a lot of the memory management and so forth, you wouldn't need to know this. Then again, I still see buffer overrun holes announced in modern software built with all of the OO goodness money can buy.

    230. Re:Hmmm ... by colinrichardday · · Score: 1

      Of course, TeX has been around since 1979 and is also "complete", so how hard can it be to maintain it?

    231. Re:Hmmm ... by colinrichardday · · Score: 1

      Then they asked what I'd do if we were "forced to migrate to IIS." When I asked how this could arise, all they could come up with was "what if regulatory requirements force you to use Windows?" In other words, if we weren't willing to dump money into utterly unknown "future applications," we should really consider "standardizing" on Java because the government might mandate Windows.

      Did they know that Apache and Perl are available for Microsoft Windows? Or were they worried that the government might mandate IIS?

    232. Re:Hmmm ... by Xtifr · · Score: 1

      I was going to raise the same point about optimizing compilers, but to your second point, I don't see a great deal of difference between "++i;" and "i++;" as far as clarity goes, and with operator overriding in (e.g.) C++, the actual work that goes on behind the scenes for the two flavors of "++" may well be more than any optimizing compiler can really cope with.

      I strongly agree with the idea of striving for clarity and avoiding premature optimization, but when two approaches are equally clear, and one of them has a strong possibility of imposing pointless overhead, I see no reason not to avoid that approach.

    233. Re:Hmmm ... by haystor · · Score: 1

      The school you describe attending is not a Java/OO type school. I oversimplified speaking strictly about C. The point is that those schools using C or Pascal or a good chunk of other languages are teaching references and data structures and memory footprints and any number of things that are just unreachable and thus unteachable in the new Java/OO crowd.

      You describe a rigorous program, far different from the typical program that stresses OO and begins students with Java as the base language for their CS career.

      --
      t
    234. Re:Hmmm ... by cowboy76Spain · · Score: 1

      <sarcasm> I had the same problem with a database, we had some weird bug. So, me and a couple of programmmers wrote from scratch an entire DBMS with all the features of Oracle and without that bug. It took us a couple of days, though. Management told us not to slack so much next time.</sarcasm>

      Yes, there are tradeoffs for using somebody's else work for your frameworks/libs/OS. Even paying does not protect you. And a bad choice of tools can be fatal.

      But I bet that if that guy had gone to management and asked x men-months to improve/develope the tool by themselves, management would have say that it was too expensive and that there was no need to "reinvent the wheel" and that he had to "concentrate in the core bussiness" and "get external expertise" and use a product finished.

      Ah, and from my experience whatever management says were the reasons for firing that guy and the real reason may have no relation at all.... management won't care if the project is impossible with the given constraints of technology/resources/time, if you try to explain to them they will resort to "I do not care about the technical details". But if they see the project coming behind their proyected schedule, they may find it useful to fire someone in order to show everyone that they "take care of things".

      --
      Why can't /. have a rich-text editor? Editing your own HTML is so XXth century.
    235. Re:Hmmm ... by Oxford_Comma_Lover · · Score: 1

      Good to know.

      --
      -- IANAL, this isn't legal advice, and definitely isn't legal advice for you. Also, Squee!
    236. Re:Hmmm ... by omglolbah · · Score: 1

      We're talking a person in their 20s that still, in 2003, sent out HAND WRITTEN job applications.

    237. Re:Hmmm ... by colinrichardday · · Score: 1

      Sorry, I was thinking more of someone who didn't use a word processor to write programs.

    238. Re:Hmmm ... by mswhippingboy · · Score: 1

      I suppose in most cases this is true, but what crt0 does is very much platform dependent. I don't think of this as initializing the runtime "library" (although if your code calls stdlib routines it does do that as well) because what it is essentially doing is setting up the stack space, initializing the registers (possibly initializing the hardware); basically doing the housekeeping that an assembler program would have to do anyway on startup. In some embedded environments, crt0 is just a stub that does nothing because the ROM monitor establishes the runtime enviroment (stack pointers, hardware initialization, etc). In these cases (unless your C code does calls any runtime library routines, no runtime library code is included at all in the final executable. Most implementations of crt0 are actually inline code that is simply placed "in front" of the C "main" function so it doesn't really "call" the main function but either falls through to it or executes a jump to it.

      --
      Sometimes the light at the end of the tunnel is the headlight of an oncoming train.
    239. Re:Hmmm ... by mswhippingboy · · Score: 1

      In that case the same would hold true for an assembler program. The OS has to interpret the shell command, load the program from disk, start up a process, initialize the registers, etc. before calling the entry point. In fact the only environment I can think of where your entry point would be the first thing executed would be if your code was in ROM and the entry point was set to the processor's reset vector (used to be 0xFFFFFFF0 on x86 - not sure if that still holds true with today's processors).

      --
      Sometimes the light at the end of the tunnel is the headlight of an oncoming train.
    240. Re:Hmmm ... by mswhippingboy · · Score: 1

      In general, your right, but this is not true in all cases. In some embedded environments the crt0 object module (the module that contains the _start entry point) is just a stub if the code does not call any library routines because the ROM monitor performs all initialization of the hardware, registers, etc.

      --
      Sometimes the light at the end of the tunnel is the headlight of an oncoming train.
    241. Re:Hmmm ... by mswhippingboy · · Score: 1

      I could argue corner cases for just about any technique, including self-modifying code, but I wouldn't want to recommend that as a standard programming practice that all programmers should use.

      --
      Sometimes the light at the end of the tunnel is the headlight of an oncoming train.
    242. Re:Hmmm ... by mswhippingboy · · Score: 1

      In general, this is true. In most cases crt0 (containing the _start entry point) is placed before the main() function and performs the initialization you are referring to. However, while this is the default way, it not a requirement. Most C compilers include the source code to crt0 so that developers can write their own initialization code or none at all if not required. If your C code does not call any library routines, no other initialization may be needed (depending on the OS or embedded environment). In fact, it is usually possible (e.g. the -mno-crt0 switch for gcc) to tell the linker to not link the crt0 code and you can instead set the entry point directly to your C code entry point (doesn't necessarily even have to be main).

      --
      Sometimes the light at the end of the tunnel is the headlight of an oncoming train.
    243. Re:Hmmm ... by Digital+Vomit · · Score: 2

      Good god -- is there any human endeavor that doesn't turn people into raging douchebags?

      --
      Modern copyright is theft of culture from everyone and it retards the progress of the useful arts and sciences.
    244. Re:Hmmm ... by ppanon · · Score: 1

      While it isn't around anymore, AmigaOS had a very object-oriented design. With the exception of the (BCPL-based) file system, AmigaOS was implemented in C and assembler, but the design of the O/S libraries and their interfaces was object-oriented back when C++ was struggling to escape from Bell Labs.

      --
      Laissez lire, et laissez danser; ces deux amusements ne feront jamais de mal au monde. - Voltaire
    245. Re:Hmmm ... by vga_init · · Score: 1

      I'm an ex-computer science major, so I may not be qualified to speak on this, but my experience in the field has asked me to offer the following input:

      Computer science is not about how the machine works. In one sense, it's the last thing that computer science is concerned about. I'm not saying flat out that computer scientists don't or shouldn't understand the underlying machine, but there is always going to be a big grey area regarding how much needs to be understood and why. Knowing everything about the machine is a job for computer engineers, who are not "computer scientists." The difference is subtle and huge.

      What does it take to write assembly? Most people couldn't reasonably write assembly code that fully takes advantage of modern chips and instruction sets. They're not even designed for human use in a "let me sit down and code something" sense. That may have been the case in days gone by, but nowadays knowing about machine code on the CPU level is less important for two reasons: one, that software available today relieves you of needing to know about it, and two, so much of what chips do now internally is obfuscated from the outside programming instructions that are issued to it further than ever before. In summary, assembly today tells you less about what the chip is actually doing, and it also is less relevant to the software that you need to write. I took one assembly course to satisfy my computer science major; we wrote code for a (now ancient) 16 bit virtualized microprocessor (the 8086); back then it made more sense to write assembly code for a regular programmer.

      I think a computer science student could learn the appropriate lessons that assembly code used to teach by programming Java bytecode or some other virtual machine. This is a good example because there is no actual "machine" there to learn about, but you're still learning "how programs work" like you said.

      My favorite computer science quote is that "Computer science is no more about computers than astronomy is about telescopes." If you ponder over this, you will be enlightened.

      So in summary, no, I don't think computer scientists should start in assembler. I think computer engineers should learn programming that way. Computer scientists are best served by starting in a functional language, preferably a pure one. My first language in computer science was an OOP language: C++ (which isn't even very good for OOP). It really was a mistake to start with this language, and it didn't help me to learn more about computer science. I later learned Java, but that too was not good enough. Eventually I started picking up Lisp, but by then it was too late--I had already changed majors. :)

    246. Re:Hmmm ... by CptPicard · · Score: 1

      Yes, when I first was learning, pointers were a somewhat hard concept. I'm not sure you need assembly for that though; some basic education on computer architecture should suffice, and the rest really, semantically speaking, is a matter of having "indirection variables"... variables that know where to find some other value.

      --
      I want to play Free Market with a drowning Libertarian.
    247. Re:Hmmm ... by sg_oneill · · Score: 1

      It depends on what they are trying to achieve. I've often thought university CS really ought have two streams, science and engineering , so the student can chose whether he's doing it for employment or if he wants to be involved in CS research. (For contrast think of the difference between a physicist and an engineer. An engineer APPLIES physics, a physicist DISCOVERS physics)

      OO is brilliantly productive technology, it encourages people to think in terms of modelling and interactions, and it naturally suits the UML style of project design and management. If I'm hiring coders for a real work task, they better damn well know OO, not just as pseudo namespaces for structured programming but how to think in objects, models and stuff, because we'd be doing a heck of a lot of that.

      However from a computer *science* research point of view, OO really isn't the most interesting game in town, and I think CS has been starting to look back at the functional and non imperative modes of coding as a better foundation for really understanding algorithms. Once thats well understood, students can then learn OO/structured/etc with a much deeper understanding of WHY a good algorithm works, not just how to do it.

      This is especially important as the age of parallelism is starting to show up OOs short falls. I'm still regularly surprised at the amount of coders , for instance, that don't know why "side effect" programming is bad, or if they do, don't know why.

      Don't get me wrong, OO is still vital technology and is still the centerpiece of my personal toolkit of coding skills, but science vs engineering are different practices and whilst OO is great engineering, its not that interesting anymore as science.

      --
      Excuse the Unicode crap in my posts. That's an apostrophe, and slashdot is busted.
    248. Re:Hmmm ... by Dails · · Score: 1

      Of course abstraction and code reuse came before OO, but OO makes it much clear and easier to learn and understand pre-existing code, in my opinion. I can code in Java, C++, and Scheme, and I can easily say that code writtn in Java or OO C++ is much easier to figure out (with or without documentation) than Scheme.

    249. Re:Hmmm ... by Dails · · Score: 1

      Well, you're also injecting an argument about compiled vs. interpreted code, too, which has its own pros and cons. I would agree that you can write the same program to run faster in assembly, but the time lost far outweighs the time gained in execution. Remember that nowadays programmer time is expensive and computer time is cheap.

    250. Re:Hmmm ... by Dails · · Score: 1

      If a CS graduate does not understand the difference between passing by value and passing by reference, there are serious problem with the way that CS curriculum is designed. My college's CS program is not one of the best ones in the country (USA), but we started out with C++ to understand what programs are, how the interact with the OS, things like that. In that same intro course, we touched on OO (in C++) and assembly, but mainly as different ways to code rather than different ways to think of a program. Follow on classes got into the theory of OO and what assembly code (which is basically shorthand binary) does in the processor itself. Whether they're better for practical programming or not, all of these things should be covered in undergrad CS.

      As for crappy code, any profession runs into this dilemma. The modern tools we use (chainsaws, prewritten code, power tools, etc) are all very effective and efficient because of the history of professionals who have refined them. Would you think any less of your car mechanic if he didn't know how his tools worked, but could still use them to fix your car? Does that matter to you, the one who contracts his service?

    251. Re:Hmmm ... by siride · · Score: 1

      Yes, we know that in embedded environments, things are different. Thanks for repeating yourself five times. However, on the big 3 OSes, and certainly many more, there is a whole lot of user-space activity that takes place before getting to main(). On standard glibc Linux, for example, after the fork completes, the real entry point is in ld.so, which loads dynamic libraries, calls any constructors, initializes stdio, initializes malloc, initializes threads, etc. Finally, the standard stack is setup before calling main(). Yes, with the right arguments to gcc, you can skip all that stuff. The point is, however, for most non-embedded software, your program, even if it's a simple C program, is actually embedded within a framework (glibc on Linux, Win32 on Windows, etc.) and main() is not the entry point for your program.

    252. Re:Hmmm ... by emt377 · · Score: 1

      Um. No. Many modern libraries or "frameworks" (newfangled word for library) are OO. Most OSes remain written in classic system programming languages like C and assembly language. In fact, most frameworks start as object oriented wrappers for certain OS calls and cruft up from there.

      A framework is a collection of libraries and other resources, like daemons and agents. The C runtime (including crt0.s etc) can be said to be a framework. In fact, "runtime" is closer than "library". You could say, for instance, that the is a Core "runtime", a UI gadget "runtime", a Windowing "runtime", a "video rendering" runtime, etc - but it's a bit weird conceptually to have multiple runtimes. Enter the term Framework. In older days we used to call these "layers" and similar, but Framework is more general and doesn't paint you in a corner where you're forced into layering violations just to get something to work. A Framework may also include daemons, like a UI manager, SNMP agent, or such.

    253. Re:Hmmm ... by Anonymous Coward · · Score: 0

      Ensuring they are employable as freshmen is putting the cart WAAAY before the horse.

    254. Re:Hmmm ... by ChucktheMan · · Score: 1
      Turing completeness is an abstraction that, while useful in the Itower is less useful out where users can type just about anything, at anytime, with any intent, and then produce just about any complaint in response to any response the software might make. This is not a problem if the software is trivial, but if the software is non-trivial than it becomes a much more difficult problem. Turing completeness is such a simple thing it cannot capture real-world complexity in software use.

      Also...

      I would rather rescue the drowning Libertarian, not play insensitive games as if her life were of no value.

    255. Re:Hmmm ... by mswhippingboy · · Score: 1
      Well I'm sorry if my similar responses to 5 other similar comments irritated you but I can't always judge the level of technical understanding of all commenters.

      However, to cut to the chase, even though there is no "universal" definition, IMO the commenter that posted the response that started this, something akin to "you call a library, a framework calls you" basically had it right, although as often happens on /., it got completely picked apart. I wouldn't consider (nor would any knowledgeable C programmer I know) the C standard library a framework, regardless of how many machine instructions are executed prior to beginning execution of your logic. That has nothing to do with it anyway. A framework attempts to enforce a predefined way of doing things. In many cases, applications that are invoked via a framework really become extensions or features of that framework, but the core logic is driven by the framework. A library on the other hand is simply a collection of routines that can be called by your applications. What goes on at the machine level really has very little to do with the distinction.

      By your description of what constitutes a framework, every single program, regardless of whether it's C, assembler or brainf&ck, is part of a framework because one or more machine instructions gets executed before your main() entry point. I guess we should alert the standards committee that the name needs to be changed to the "C standard framework".

      My point is, no program just pops out of nowhere on your machine and begins running. There is always some set of instructions that get executed to prepare for your program to run. However, main() is, and always has been the entry point for a normal "C" program. How this entry point gets invoked is irrelevant (or at least "should" be for the sake of portability). To argue otherwise is purely pedantic.

      --
      Sometimes the light at the end of the tunnel is the headlight of an oncoming train.
    256. Re:Hmmm ... by siride · · Score: 1

      You are missing the forest for the trees. It's not just about a few extra instructions in front of main(). Yes, technically there are a "few" extra instructions in front of main(). But the reality is that there is actually an entire framework defined by both the OS (kernel and userspace) and the C runtime that calls into main() and also manages other aspects of the operation of your program. I don't think the argument that "by your description, every single program...is part of a framework" is valid. For one, the argument does not rest on the fact that there are a few instructions before main() (see above) and secondly, if it turns out that every single program is running as part of a framework, then so be it. After all, every single program we have today, whether written in C, assembly or brainfuck does, in fact, run on a computer. Is that a problem? No. That's just the reality of things. These days, we have powerful and rich environments and programs simply fit into those environments. Some environments (platforms) are smaller and less intrusive than others, I'll grant that. But at the end of the day, there is always a framework and it generally does a great deal of work. That's where we are. Deal with it. Either that, or go program on embedded where you don't have a runtime environment, per se. And I'm not knocking that either. Just stating facts.

    257. Re:Hmmm ... by mswhippingboy · · Score: 1
      No, sorry, this discussion has probably gone on far past it's usefulness, but I don't think you are getting my point. An OS is an OS, not a framework. A library is a library, not a framework. Your definition of a framework would encompass just about any software system. While that may be logical for your argument, it bends the definition of a framework to the breaking point.

      There have been OSs for the last 50 or so years and there have been libraries for a great many years as well. Frameworks are much more recent and generally include certain features such as default behavior, IOC, extensibility, etc. In a typical non-framework application, when your program receives control via main(), the entire remaining logic flow is pretty much up to you. This is not so within a framework. In the first place, most frameworks (at least the ones I've used) don't call main(). Instead the framework invokes a function within your C code, usually via callbacks and expect your code to return certain values (and sometimes within certain time constraints). Generally, your application consists of callback routines which are invoked by the framework. This is very different from a standard C program which begins at main().

      You are entitled to your own opinions of course, but not your own facts. While there are certainly many grey areas between what may be considered a library and what may be considered a framework, and there are many libraries that may call themselves frameworks when in fact they are libraries, frameworks are not the same thing as libraries and OSs are certainly not frameworks. QT is a framework, the linux kernel is not.

      --
      Sometimes the light at the end of the tunnel is the headlight of an oncoming train.
    258. Re:Hmmm ... by NoOneInParticular · · Score: 1

      Concrete example of state mutation? Methods.

    259. Re:Hmmm ... by rastos1 · · Score: 1

      Would you think any less of your car mechanic if he didn't know how his tools worked, but could still use them to fix your car?

      Compared to one that knows how his tools work? Yes. All right, both can call themselves mechanics. Or what about "repair man" vs. "Mr. mechanic" ?

    260. Re:Hmmm ... by CptPicard · · Score: 1

      Turing completeness is an abstraction that, while useful in the Itower is less useful out where users can type just about anything, at anytime, with any intent, and then produce just about any complaint in response to any response the software might make.

      I'm not sure I understand how this is relevant; what I was saying is intended to be abstract. All languages once in a certain class (which, according ot that one guy in some other post, I am not allowed to mention so that I don't sound arrogant) are equivalent, so at least going down to asm does not give us any more theoretical power. Therefore, we're free to choose a representation, and my position says that for the human mind, asm is a remarkably bad representation for a symbolic expression in that class of languages, and coding in it does not produce as much insight about programming in general as some people try to claim. I am a bit of a believer in the Sapir-Worf hypothesis as far as programming languages go -- programming languages shape thinking processes about problems. And I never have had a symbolic thinking process about a problem that represents asm a bit.

      This is not a problem if the software is trivial, but if the software is non-trivial than it becomes a much more difficult problem. Turing completeness is such a simple thing it cannot capture real-world complexity in software use.

      As far as I agree with it -- I sort of do, but it's not a Turing-completeness issue -- it seems like my preference for higher-level languages would indeed manage complexity in non-trivial software better, no?

      Also...

      I would rather rescue the drowning Libertarian, not play insensitive games as if her life were of no value.

      Well, that exercise is outright designed to find the fair value of his life... I suspect that to both of us, the value is actually quite high indeed, and we'd come to an agreement about that.

      --
      I want to play Free Market with a drowning Libertarian.
    261. Re:Hmmm ... by CptPicard · · Score: 1

      Now, if your main concern is code readability, maintenance and/or moving onto the next product as soon as this one compiles with no errors, higher level languages are undoubtedly far more appropriate.

      Well, code readability and maintainability often mean a good design, which means that the problem is understood correctly and that the program can be seen to be correct. These are very good qualities in a language if it helps in achieving this.

      Productivity is just a side-effect of a good language; for me this issue is more philosophical than that. The actual conceptual features of higher-level languages outright produce better thinking about issues...

      --
      I want to play Free Market with a drowning Libertarian.
    262. Re:Hmmm ... by Daniel+Phillips · · Score: 1

      Well that sounds like nonsense then, I thought the argument was deeper. In fact the opposite is true: holding state in multiple independent objects tends to make an algorithm more parallelizable, not less, provided synchronization does not require serializing access between objects.

      --
      Have you got your LWN subscription yet?
  2. so the wheels are coming of the OO band wagon then by mjwalshe · · Score: 4, Interesting

    I always thought the obsession with making everything OO when it doesn't suit every type of programming problem was a bad thing - glad to see some one agrees with me.

  3. Oups by Anonymous Coward · · Score: 0

    I don't see the point of such drastic measure.

    1. Re:Oups by Locutus · · Score: 1

      the very first sentence in TFA states it's because 2 professors have fallen for the "functional programming" methodology to solve the parallel processing problems caused by poor OS design in a multi-processor(or core) environment. By believing FP is going to solve all the problems, they're pushing it on the very young and impressionable to further the belief.

      As others have stated, an entry level course excluding much or any OOP concepts could be justified easily with the fact that underlying OOP and other methodologies are the methods/procedures. Starting students with a procedural foundation gets them a solid foundation first without mixing in much or any abstraction layering methodology also.

      By claiming FP is the reason they show their bias right off the bat and the motivation for the course change. IMO

      LoB

      --
      "Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
  4. strange progress by Anonymous Coward · · Score: 0

    while I'm sure it looks strange to the jargon-speakers of the business world, it's nice to see some actual progress being made in programming education.
    now, I'm not sure about the choice Standard ML over Haskell or Scheme, but at least we're seeing FP taught again at a freshman level outside of MIT and Britain.

    1. Re:strange progress by Anonymous Coward · · Score: 1

      I forgot one important caveat though, which the summary neglects. "TFA" states that OO is "anti-parallel by its very nature," but does not explain how or why this is so, and indeed, my own experience is that this is complete hokum. A well-designed program can be parallelized regardless of implementing code; let's not forget the idea of computational equivalence. This is not to disparage FP and other such "rational" languages as I would have to agree that implicit parallelization can be a major feature -- but how about some love for Erlang in all this?

    2. Re:strange progress by Assmasher · · Score: 2

      Ironically, I find it vastly easier to encapsulate my mechanisms for parallelization in objects :).

      --
      Loading...
    3. Re:strange progress by narcc · · Score: 1

      Using objects is not the same as OOP.

    4. Re:strange progress by Assmasher · · Score: 1

      Perhaps you mean not the same as OOA/OOD, but relating to OOA/OOD - of course not, but you can obviously extrapolate my meaning in that I find it quite easy to manage concurrency and OOP in my designs.

      Most mistakes in parallelization, irrespective of what type of programming you use, are related to where in your abstraction you plan for it. People usually pick the wrong level. There's nothing about OOP that is anti-parallelization.

      I'm no OOP fanatic either, it's just another tool in the toolbox.

      --
      Loading...
    5. Re:strange progress by Waffle+Iron · · Score: 1

      "TFA" states that OO is "anti-parallel by its very nature," but does not explain how or why this is so, and indeed, my own experience is that this is complete hokum. A well-designed program can be parallelized regardless of implementing code; let's not forget the idea of computational equivalence.

      Of course you can write any kind of code in any Turing-complete language. However, every language "encourages" people to code in particular styles. OO "encourages" the use of opaque stateful objects, which are by default not threadsafe. Making every object threadsafe is a massive undertaking and a drag on performance (for example, Java's collections libraries tried this route at first, then gave up on it later).

      Functional languages "encourage" keeping all state on the execution stack, which by default *is* threadsafe, and some of these languages encourage tail recursion and map/reduce instead of loop constructs, and these can often be automatically parallelized.

      So that's great for problems that fit well into a functional model. However, IMO, the object model seems to more naturally fit many real-world business problems than the functional model, which is why it's far more popular today. That may change if the only way to improve computing performance going forward continues to be adding more parallel CPU cores.

    6. Re:strange progress by synthparadox · · Score: 1

      As a CMU student who heard from a professor who shall remain unnamed, the future of computing doesn't lie in "parallelization across a single resource," but massively parallelizable computing, or distributed-resource computing. OO languages are not great at that as message-passing has massive overhead when serializing and deserializing. Thus, in the interest of the "future" they're moving away from OO as a freshman course, and instead leave it for the more specific courses. (15-211, etc).

      That could be all speculation by the professor who shall remain unnamed but it also could be that the silly drama students have to take a programming course and they have no use for OO so they're dumbing it down so that not all the drama students fail. I suspect the latter.

  5. Computer scientists? by DNS-and-BIND · · Score: 5, Funny

    Why are computer scientists even learning programming? When did this happen? Programming sounds like one of those get-your-hands-dirty jobs in flyover territory, where you would show a lot of ass crack on the job and live in a trailer park. Educated people don't do that.

    --
    Shutting down free speech with violence isn't fighting fascism. It IS fascism!
    1. Re:Computer scientists? by Haedrian · · Score: 2

      Not sure whether you're being sarcastic or not, assuming you're not...

      Programming lets you put your mind in a certain 'mindset' which can help you analyse and solve problems, even if you don't actually get your hands dirty in the end.

    2. Re:Computer scientists? by multipartmixed · · Score: 2

      Chem majors do work in chem labs.
      Physics majors do work in physics labs.

      Why shouldn't CS students do lab work?

      --

      Do daemons dream of electric sleep()?
    3. Re:Computer scientists? by WrongSizeGlass · · Score: 5, Insightful

      Why are computer scientists even learning programming? When did this happen? Programming sounds like one of those get-your-hands-dirty jobs in flyover territory, where you would show a lot of ass crack on the job and live in a trailer park. Educated people don't do that.

      They need to be able to program for the same reasons management and engineers need to spend some time on the assembly line: so they can learn how things actually work. There's often a wide chasm between "on paper" and "in practice" and ideas need to be able to traverse it.

    4. Re:Computer scientists? by Anonymous Coward · · Score: 0

      No money in it?

    5. Re:Computer scientists? by Concern · · Score: 1

      LMFAO

      --
      Tired of Political Trolls? Opt Out!
    6. Re:Computer scientists? by Platinum+Dragon · · Score: 2

      Goodness forbid an "educated" person get their hands dirty. It is useful to put theory into practice through direct effort, and it demonstrates a proficiency with the practical tools and results that can only lead to better theory.

      --

      Someday, you're going to die. Get over it.
    7. Re:Computer scientists? by Sponge+Bath · · Score: 1

      "...show a lot of ass crack on the job"

      This establishes the social hierarchy of programmers, similar to the silver coloring on the backs of male gorillas.

    8. Re:Computer scientists? by Anonymous Coward · · Score: 0

      As a chem major ('94), there is a difference between a Chemist and a Chemical Engineer. As there is between a Physicist and all the other physical engineers. I would think the distinction would apply to computers and software. The computer Scientist is more worried about low level OS things, drivers, math and shit. Where as the EE is about making CPUs, buses, PCI Cards and stuff. Where as a "Software Engineer" is about making applications on top of all that.

      This is where I have always gotten confused about who goes to work at Apple or Microsoft and writes the OS and the win32 api or the NS Foundation classes. Who goes to work at XYZ corp and makes the latest software that organizes your whatever or Word or iTunes. I would think that the CS major would do the OS stuff and that the Software Engineer would do the application stuff. And the EE would work at Intel, AMD, Nvidia, Soundblaster, etc.

      Any 12 year old kid can write a simple HTML page with CSS and Javascript. A programmer/developer/software engineer it does not make. Designing and building Amazon.com takes a lot more knowledge. I believe there should be more Software Engineering tracks in College and not just relegated to a Trade School. It should cover the basics like HTML, CSS, and Javascript as well as C, C++, Java. Then design patterns, tuning and God knows they all could use some GOOD knowledge on how to use a database correctly, it is called a Stored Procedure assholes, sorry.

      As an ex-chemist who works as a consulting on installing Cisco telco gear (not a challenge), I do like application development and I have no desire to write an OS or design a CPU. I have often thought about getting some more formal education, but the CS degree always seemed to be too much for AppDev. Thats my opinion.

    9. Re:Computer scientists? by Kwesadilo · · Score: 1

      As an Electrical and Computer Engineering major at CMU, I agree with you. ECE students currently get almost all of their programming experience from courses offered by the CS department. Those of us that go the software route generally tend in the systems direction or at least toward things that are useful in a non-theoretical sense. The upper level systems courses in the CS and ECE departments depend on the course Introduction to Computer Systems, which will stay the same during the change from OOP (Java) to FP (ML). Currently, this course depends on a freshman course, Effective Programming in C and UNIX. This course is to be replaced during the transition. Apparently, it will start by gradually weaning students off of the nice, clean functional model of execution and only allow them to use a "safe" subset of the C language until the very end.

      I fear that there will be a nasty chain reaction of sorts: students will start with one of the intro courses and get the functional view of the computer without learning much at all about how it actually works or why that might be important. When they get to the imperative course, they will spend significant time learning what were previously considered to be the basics of introductory programming. Because of this, they will spend less time actually becoming proficient with C and Unix. When they get to Intro to Computer Systems, their lack of proficiency will make what is already a very challenging course an absolute nightmare. I predict that, as a result of the planned changes, fewer students than currently do will stick with computer systems.

      --
      This space reserved for administrative use.
    10. Re:Computer scientists? by catmistake · · Score: 1

      Why are computer scientists even learning programming?

      I am in complete agreement. Programming is for programmers. Let's put the 'science' back in computer science! Be gone coders, be gone systems administrators! Computer Science is the domain of scientists and mathematicians!

    11. Re:Computer scientists? by swanzilla · · Score: 1

      I'll assume your asumption was sarcastic, and keep the epic whoosh to myself.

    12. Re:Computer scientists? by ChrisMaple · · Score: 1

      Would you like to explain to me how being on an assembly line helps an integrated circuit design engineer?

      An assembly line is not (generally) a place to see how things work, it's a place to see how they're made.

      --
      Contribute to civilization: ari.aynrand.org/donate
    13. Re:Computer scientists? by Anonymous Coward · · Score: 0

      I would think that the CS major would do the OS stuff and that the Software Engineer would do the application stuff.

      In practice the difference between OSes and applications is not really that much a big one. I'm not into OSes myself, but beside the really core OS parts (eg. kernel), even the "system libraries" (Eg. win32 api/core foundation classes) are more like "application stuff".

      Unless you're just writing glue code to fit ready-made systems together in "applications", a lot of application development work is really making reusable and reliable components where more sophisticated components could be built... which is somewhat similar to what win32 and core foundation is.

      I do like application development and I have no desire to write an OS or design a CPU. I have often thought about getting some more formal education, but the CS degree always seemed to be too much for AppDev.

      A real CS degree (well, I haven't got one either :-/) supposedly gives you enough knowledge and training to get yourself started in most (non-electronic) computer related things, whether it be OS, databases, applications, or the like. Of course, most people in the computer industries end up doing application development anyway, so the more "vocational training" schools tend to skip over the "harder" topics.

    14. Re:Computer scientists? by Anonymous Coward · · Score: 0

      You're not sure? Sheldon, is that you?

    15. Re:Computer scientists? by multipartmixed · · Score: 1

      As a chem major ('94), there is a difference between a Chemist and a Chemical Engineer. As there is between a Physicist and all the other physical engineers. I would think the distinction would apply to computers and software

      The OP's point was that computer science students should only concentrate on things like algorithm development and that they should not even learn how to program.

      I disagree, and by way of analogy pointed out that chem majors have to learn how to work in a chem lab -- they don't spend their entire undergrad working with pen-and-paper.

      I had plenty of chem major friends at school - we had Engineering Chemistry, Chemical Engineering and "Chemistry" majors. The first two were under the faculty of *Applied* Science. Friends with all three majors spent time in labs -- some more than others.

      Did you successfully complete a degree in chemistry without stepping foot in a lab? If so, please tell us where!

      --

      Do daemons dream of electric sleep()?
    16. Re:Computer scientists? by bknack · · Score: 1

      Respectfully: I understand the idea you are getting at. It would be wonderful if computer scientists learned programming so they could see how things actually work. My problem with this theory is that it is absurd to think that anyone would learn anything "real" about programming by completing a couple of courses in university. As I recall one of my courses, we were to use the semester to build an ant colony simulation. By semester's end we were not even close to this goal. That inconvenient fact was not even mentioned as a potential problem in the "real world". I remember thinking that this type of approach explained a great deal of what was then (and to a large extent) still is wrong with the software industry. I promise I'm not a troll. I love programming etc., it's just that I was ruined for life because my first job was working for a consulting shop were we had to deliver working software on time and on budget. I was very young and green (I hadn't even returned to university to complete my degree yet) and have always believed as a consequence of my time there that software design should meet these criteria as much as possible. Cheers, Bruce.

      --
      Bruce A. Knack
      Silicon Surfers
    17. Re:Computer scientists? by IICV · · Score: 1

      I know I did lab work for my degree; in fact, there were a couple of different labs.

      There was an Internet lab, and each station had four desktops on a KVM, four Cisco switches, four dumb D-Link switches and all the ethernet cables you could ever want in a giant, tangled mess.

      There was a cluster lab, which wasn't really a physical place - you'd just SSH into the gateway computer, and do your stuff.

      There was the digilab, which had a computer equipped with some funky ribbon cables you could program at every station along with an osciliscope, a multimeter, a function generator, some 9v DC power jacks hanging everywhere, and some drawers with tons and tons of various different kinds of resistors and capacitors, along with all the 26 gauge wire you could ever hope for in three different colors. There were also signs encouraging you to not solder and eat in the same place, though there weren't any soldering irons as far as I could tell.

      There was also a CS specific computer lab, equipped with a ton of slow computers and bad smells. The ECE computer lab was across a partition, and I never went there but I heard their computers were even slower than ours.

      So yeah, I mean I guess it depends on the program but I did do quite a bit of lab work.

    18. Re:Computer scientists? by colinrichardday · · Score: 1

      Perhaps the parent to your post meant how production works, not the product.

    19. Re:Computer scientists? by ancienthart · · Score: 1

      As someone raised on a farm, and then attended university (science/education), I can only say that a truly educated person does both theory AND practice.
      At Uni I cringed when the physics majors said things like 'physics is the basis of all other science - everything else is derivative'.
      But I also cringed when I went back to my hometown for the holidays and heard people saying 'I don't need book-smarts, I'm street-smart'. As if the two were mutually exclusive and one or the other was superior. :(

    20. Re:Computer scientists? by cthulhu11 · · Score: 1

      At CMU in the early 1980's, the intro programming course, 15-111, started off using a bizarre thing called Karel, with a horrid captive editor called ALOE -- championed by a widely-hated prof who was the spitting image of country star Lee Greenwood. It progressed to PASCAL, again with the ALOE (A Language Oriented Editor), which really hummed along with 20 users on each of two 11/780's. Subsequent courses assumed that one had picked up C on one's own.

    21. Re:Computer scientists? by hazydave · · Score: 1

      Time have changed.

      When I was at CMU, Math/CS majors (they didn't have specialized CS/CE degrees at the time... I did "computer engineering" by double-majoring in EE and Math/CS) took "Introduction to Pascal" as a Freshman course (then, as now, you declared your major when you applied). At least the course I took was extremely well done, It taught everything from a modular programming perspective -- at least in as much as that's possible, given late 70s/early 80s Pascal running on large computers (DEC-20s). Having known only BASIC, FORTRAN, and Assembly as an in-coming Freshman, this was a very good course.

      The second level course, 15-211, was hardcore computer science. It started with FSMs (Finite State Machines), went though lambda calculus, all sorts of things that might be possible in programming languages... and all book and paper work, until near the end. The point was not to teach any programming language, but to give you the fundamentals for any language that might follow.

      And since those days, I've done at least one major project in over 40 different languages. The idea that OOPL was required is a bit odd... beyond the 15-211 course (which had a 50% attrition rate in 1980, and got splt into to course covering the same material a year or two later... I got an "A", and yeah, it was hard enough to make me brag about that "A", even now), there weren't many specific requirements. You have to have certain number of courses at certain levels... I took CAD and Comparative Languages (Pascal, APL, LISP, and SNOBOL4 were the main languages... we spent a day on FORTAN and a day in InterCal), I could have taken Computer Engineering (the large project course... but we did that in CAD).

      Languages themselves are often fads. There's no reason a university CS course should get too language specific, but you do need to program in order to learn how to program, and to really get the higher level ideas of CS. The best thing all that extra money I spent at CMU (and paid back over the next ten years) bought me was improved tools for taking on new things. So I picked up Java in a day when I needed it, same with Python and Ruby... RF Hardware Engineering took me a bit longer. But you really don't know where you're going to end up after school... 5, 10, 25 years later.

      --
      -Dave Haynie
    22. Re:Computer scientists? by rhalstead · · Score: 1

      It's to teach them the meaning of "Side Effects"

    23. Re:Computer scientists? by Ocker3 · · Score: 1

      This! The sound of all the Whooshing is making my hair stand on end!

    24. Re:Computer scientists? by Anonymous Coward · · Score: 0

      I don't know how it could have been more clearly a joke.

    25. Re:Computer scientists? by Anonymous Coward · · Score: 0

      well programming computes results for complex problems .
      unless you want to do thought experiments (simulated execution) like Einstein.

    26. Re:Computer scientists? by lennier · · Score: 1

      Computer Science is the domain of scientists and mathematicians!

      Though to be a real computer scientist, and not just an effete self-absorbed mathematician, you need to be able to conduct proper double-blind experiments to prove your hypotheses about computational theory. First semester assignment is to design, build and implement a parallel universe where P=NP.

      --
      You are not a brain: http://books.google.com/books?id=2oV61CeDx-YC
    27. Re:Computer scientists? by davidhall01 · · Score: 1

      "Not sure whether you're being sarcastic or not, assuming you're not" - perhaps you're from India or someplace where you wouldn't recognize sarcasm if it slapped you upside the head? Not teaching O-O (even as theory or a survey of programming methodologies course) is sort of like teaching the "new math" - you know, the touchy-feely math that has now put the USA at #25 in math of the top 25 industrialized countries. The summary by fatherjoecode did say a 2nd year elective would be taught, presumably to peasants whom may want to learn about the real world, and perhaps they actually have the notion that they may need to get a job one day.

  6. CS... by Anonymous Coward · · Score: 0

    Well, maybe the correct way to say that is "modern CS curriculum is unsuitable for programming".

    1. Re:CS... by lennier1 · · Score: 1

      We're back to the discussion about the "scientific education" vs. "trade schools" rift again?

  7. Re:so the wheels are coming of the OO band wagon t by Doc+Ruby · · Score: 0, Troll

    So "no OOP" == "some non-OOP"?

    You must be a terrible programmer.

    --

    --
    make install -not war

  8. Why remove it? by Haedrian · · Score: 3, Insightful

    I don't see why it should be removed, it should be 'complimented' instead with other programming methodologies in order to let users compare and contrast. But most CS in the end will end up being done with OOP so there's no reason not to start in the beginning - at least that's my personal experience.

    In my first year we had a mixture of different programming types, including functional programming. I never really used any of those, I'm sure there are certain places where Prolog or Haskel is used, but its not as common as an OOP.

    1. Re:Why remove it? by MemoryDragon · · Score: 1

      Well I would not call OO either directly anti parallel, the statefulness of objects is. The entire Actors / Message model which seems to become more popular despite being functional really blends well into OO. After all some OO systems are basically very close to that, you have objects and messages for interoperation. The main difference to the Actors / Message model is, that OO leaves it up to the implementor whether the message sender/receiver can be stateful or not.

      Outside of that, I personally think an introductory course should reduce itself down to basic algorithms, the various programming paradigms should not be taught.
      Thats how we learned it we basically used Modula II back then which had a very clean syntax for teaching the basic core algorithms back then in a modular procedural paradigm, but I dont think I missed anything by not having OO in the first courses.

    2. Re:Why remove it? by unwesen · · Score: 1

      I don't see why it should be removed, it should be 'complimented' instead ....

      Oh java, your polymorphism is awesome.

      You flatter me! I don't even know multiple inheritance!

    3. Re:Why remove it? by Anonymous Coward · · Score: 0

      It not the language which is OO or not OO. Any language can be used in any way. The problem with teach OO is that some programmers can't get past it and apply it inefficiently to all problems. If you've only ever programmed OO. Then you haven't programmed a large variety of problems or machines. Some machines ( yes modern systems ) don't even allow branching or sequential execution. It's extremely parallel. You can't do that with an OO mentality.

    4. Re:Why remove it? by deniable · · Score: 1

      Twenty years ago I could have said the same thing for procedural programming.

    5. Re:Why remove it? by Anonymous Coward · · Score: 0

      Oh my spelling God.

      complimented = flattered
      complemented = enriched

    6. Re:Why remove it? by travisco_nabisco · · Score: 1

      I never thought I would find someone else that was taught Modula-II in their introductory CS course. It really is a decent language for introducing a lot of concepts.

    7. Re:Why remove it? by Needlzor · · Score: 1

      Outside of that, I personally think an introductory course should reduce itself down to basic algorithms, the various programming paradigms should not be taught.

      Couldn't agree more - in my first year of Uni we didn't actually code anything for the whole first year (and it was for a very technical-oriented degree), we spent it all using plain old algorithms until we could get them right. The debugging was quite painful though...

    8. Re:Why remove it? by Ossifer · · Score: 1

      Maybe that's the problem in my marriage -- I need to complement my wife more often...

    9. Re:Why remove it? by MiddleHitter · · Score: 1

      Does this virtual method make my heap look fat?

      --
      I don't fear computers, I fear the lack of them. -I. Asimov
    10. Re:Why remove it? by Anonymous Coward · · Score: 0

      "complemented." It's best to learn natural languages before C.

    11. Re:Why remove it? by Anonymous Coward · · Score: 0

      I don't see why it should be removed, it should be 'complimented' instead ....

      Oh java, your polymorphism turns me on.

      Fixed that for ya....

    12. Re:Why remove it? by hazydave · · Score: 1

      I think the key is to teach different methodologies, and not to rely too heavily on any specific language.

      When I was at CMU, they didn't really get into parallel programming. Later, working at Commodore on hardware and learning AmigaOS programming, I caught on that "thread" is just another regular programming construct, just like using "class", "function", "structure", or "method".

      And yet, the fact that mainstream software is still not up to that level is a shame. In programming Windows some years back, I found that the Windows API was actually working hard to serialize thing (via the single application message queue) that I had imagined were happening in parallel, as they would have been on any reasonable OS. Linux doesn't get a pass either ... it's a royal pain in the butt to do asynchronous I/O in Linux, something that, as an Amiga programmer, I believe fundamental enough it should be a literal no-brainer.

      The real critical thing here... what gets taught, or not taught, at the college level today ultimately sets the scale of things like APIs we're all going to be working with in the future. As much as you'd kind of hope that actually innovations in computer science make it into new OSs, it's ultimately going to be those two 2nd year programmers writing that one module you're interacting with. If they don't understand the need for multithreading, much less the fact it should be ubiquitous, they will screw things up in ways that will at least give you a headache (as a user or programmer), at worse have negative impact on the quality and evolution of software.

      --
      -Dave Haynie
    13. Re:Why remove it? by Anonymous Coward · · Score: 0

      Perhaps learning your wife's "love language" would be more beneficial - its different for everyone. Words of affirmation may not be the thing that makes her feel loved. =)

    14. Re:Why remove it? by AmiMoJo · · Score: 1

      OO is a software layer on top of non-OO hardware and operating system code. Most CPU and system designs do not use OO, most operating systems do not use it at the kernel or driver level. Most embedded software is not OO.

      So really I think anyone wishing to study Computer Science, as opposed to application programming, will spend most of their time not using OO. Even if they happen to code in C++ or Java they probably won't make any significant use of OO features since they will be looking at lower level data structures like lists, trees, heaps etc... You know, the science stuff rather than the application stuff.

      --
      const int one = 65536; (Silvermoon, Texture.cs)
      SJW, n: "Someone I don't like, and by the way I'm a fuckwit" - AC
  9. Interesting move by bradley13 · · Score: 4, Interesting

    OO is practical for lots of problems, because it makes modelling real-world data easy. However, it is not useful if you want to give students a solid understanding of the theoretical computer science. OO is fundamentally data-centric, which gets in the way of algorithmic analysis.

    To give a pure view of programming, it would make sense to teach pure functional and pure logic programming. If CMU really wanted to concentrate on the theory, they would have eliminated imperative programming from the introductory semesters, because it is very difficult to model mathematically. Apparently that was too big of a step.

    --
    Enjoy life! This is not a dress rehearsal.
    1. Re:Interesting move by janoc · · Score: 1
      If you read the article, they kept functional programming in parallel with imperative one, with focus on proving validity of programs. So part of that is there.

      On the other hand, you must balance theory with practice, because otherwise the students will a) leave b) not be able to do practical projects while studying the theory. So teaching only logic programming (which is great, IMO - it helped me a lot!) is not practical.

    2. Re:Interesting move by Pinky's+Brain · · Score: 2

      Functional and logic programming get in the way of some aspects of algorithmic analysis too ... the hardware is imperative after all.

    3. Re:Interesting move by digitig · · Score: 4, Interesting

      OO is fundamentally data-centric

      Maybe the way that you do it. Personally I find that quite a lot of my classes have methods.

      If CMU really wanted to concentrate on the theory, they would have eliminated imperative programming from the introductory semesters, because it is very difficult to model mathematically.

      Imperative programming isn't really any more difficult to model mathematically than functional programming. They just use different branches of mathematics. Check out David Gries's The Science of Computer Programming for example, which shows how to do it, and Object-Z which actually does it. The main difficulty is with side effects, but functional programming has the same issues as soon as you try to interact with the external world.

      --
      Quidnam Latine loqui modo coepi?
    4. Re:Interesting move by maxwell+demon · · Score: 2

      This is about freshman courses. You are not expected to be finished after the first semester. You are expected to learn the basics you need to know in order to get the most of the courses in the later semesters. For example, in my first semester physics courses, the majority of courses weren't actually physics, and the physics course wasn't very deep. Actually it was more of a math study with a bit of low-level physics added on top. The actual physics came later. After the first semester, I didn't know too much about physics which I didn't already know before; I did, however, know a lot more about the math I needed to understand the physics in the later semesters.

      --
      The Tao of math: The numbers you can count are not the real numbers.
    5. Re:Interesting move by narcc · · Score: 1

      OO is practical for lots of problems, because it makes modelling real-world data easy.

      One of OOPs biggest myths. Check out http://www.cs.loyola.edu/~binkley/772/articles/oopbad.htm. The site is a bit of a mix, and the author is married to his pet paradigm, but there's more wheat than chaff.

    6. Re:Interesting move by meburke · · Score: 2

      Most of the imperative languages I have used in the last 45 years have been easy to model, but not easy to prove mathematically at the same level of logic. They invariably needed to be proved in some customized Higher-Order-Language, and many times this was LISP or PROLOG.

      Object-Oriented programming has the drawback of distributing data all over the system, and it tends to obscure the underlying structure of the problem space and the matching solutions. OOP is convenient for plugging completed subsystems into a larger system, and so it can be a boon to good application development. However, a program is simply a set of instructions that work on some data. (An object is still a set of instructions that works on data, but usually the object carries the data or an abstraction of the data within the scope of the object code.) It seems appropriate to me that beginning CS students should be concerned with controlling instructions against different data to learn the effective rules and processes. I would favor assembly and some imperative languages such as Pascal, FORTRAN or C to demonstrate the underlying principles, and then probably a functional programming language like Haskell for advanced concepts. While I wouldn't bother to teach a Pascal or FORTRAN class as an introduction to programming, I would certainly teach them as a requirement to a numerical methods class.

      --
      "The mind works quicker than you think!"
    7. Re:Interesting move by bradley13 · · Score: 2

      Sure your classes have methods. But good OO design says that your classes correspond to groups of real-world objects: bank accounts, people, widgets, whatever. Why? Because that is the data that needs to be processed. The methods are tied to the classes, meaning that their very definitions depend on the data modelling you have done.

      Working this way is suitable when you are dealing with complex data and comparatively simple algorithms; get the data model right, and your problem is half solved. Moreover, basing the data model on the real world is natural and intuitive, and mostly yields good results. This is the OO world - and it works well for many (even most) real-world problems.

      The other situation is where you have complex algorithms, but simple data. Signal processing, control software, scientific programming, etc.. Take a radar as an example: the data is just a continuous stream of numbers coming in off the radar dish; but the algorithms that extract meaning from those numbers are very sophisticated. Using an OO language for problems like this is like trying to loosen a screw using a wrench - maybe you can make it work, but it's basically a really bad fit for the problem.

      --
      Enjoy life! This is not a dress rehearsal.
    8. Re:Interesting move by betterunixthanunix · · Score: 1

      See: Church-Turing thesis.

      --
      Palm trees and 8
    9. Re:Interesting move by Brian+Feldman · · Score: 1

      The other situation is where you have complex algorithms, but simple data. Signal processing, control software, scientific programming, etc.. Take a radar as an example: the data is just a continuous stream of numbers coming in off the radar dish; but the algorithms that extract meaning from those numbers are very sophisticated. Using an OO language for problems like this is like trying to loosen a screw using a wrench - maybe you can make it work, but it's basically a really bad fit for the problem.

      I currently work for an aerospace company doing (satellite) ground systems. Object Oriented Programming is nothing but a boon for implementing every facet of this kind of software. Legacy C software not using objects for pure DATA alone causes tons of problems, because you really don't need to care about the implementation details except C forces you to. If I don't want to create a number of new object types for a software project, I don't. In fact, if you are talking C++ specifically, having access to the STL mostly eliminates having to write your own fundamental data structures for any type of data, so I spend even less time and space on boilerplate and more on implementing specific algorithms that work with my data types.

      --
      Brian Fundakowski Feldman
    10. Re:Interesting move by spedrosa · · Score: 1

      They are teaching functional programming. Therefore, they can work on practical applications. Try Haskell, Clojure, Chicken Scheme, for instance.

      OO is overrated. It is still nice to bring it in when you need it ((use coops) under Chicken) and then forget it completely where it is not.

    11. Re:Interesting move by digitig · · Score: 4, Insightful

      Sure your classes have methods. But good OO design says that your classes correspond to groups of real-world objects: bank accounts, people, widgets, whatever. Why? Because that is the data that needs to be processed.

      That seems to be a fundamental misunderstanding of OO. The focus on real-world objects is because they have self-contained properties and behaviour. "Because that is the data that needs to be processed" is no more (and no less the case) than Because that is the behaviour that needs to be produced.

      The methods are tied to the classes, meaning that their very definitions depend on the data modelling you have done.

      Or (and just as valid), the members are tied to the classes, meaning that their very definitions depend on the use cases (ie, actions) you have identified.

      Working this way is suitable when you are dealing with complex data and comparatively simple algorithms; get the data model right, and your problem is half solved.

      You do realise that data model != object model, don't you?

      The other situation is where you have complex algorithms, but simple data. Signal processing, control software, scientific programming, etc.. Take a radar as an example: the data is just a continuous stream of numbers coming in off the radar dish; but the algorithms that extract meaning from those numbers are very sophisticated. Using an OO language for problems like this is like trying to loosen a screw using a wrench - maybe you can make it work, but it's basically a really bad fit for the problem.

      Radar data was a bad example. A modern radar processing system takes data from many sources such as primary radar heads, secondary radar heads, ADS-B, ADS-C, WAM, neighbouring radar processing systems and so on. These behave the same in most ways but differently in some, and OO turns out to be an excellent way of dealing with that.

      Yes, in some applications OO doesn't offer you anything significant. They are typically the cases in which you end up effectively with one class because the data and the processing are so simple. But in this context "simple" processing doesn't mean mathematically or computationally simple, it means that you only do one thing with the data (in the case of the radar front-end, for instance, the one thing will be extracting distinct decluttered returns into distinct objects for passing to the next processing stage). OO design still doesn't get in the way, though: if that's the only thing going on in that process you simply end up with a design with only one class having only one significant method (so if your language supports it you might just as well write the lot as a single routine with no class packaging).

      For what it's worth, I have no problem with OO not being taught from the outset on a computer science course. It's a decompositional/compositional approach and is not a lot of use until you understand what you are decomposing and composing.

      --
      Quidnam Latine loqui modo coepi?
    12. Re:Interesting move by ericvids · · Score: 1

      See: Church-Turing thesis.

      Hmm, Wikipedia says:

      In simple terms, it states that "everything computable is computable by a Turing machine."

      and it also says:

      A limitation of Turing Machines is that they do not model the strengths of a particular arrangement well. For instance, modern stored-program computers are actually instances of a more specific form of abstract machine known as the random access stored program machine or RASP machine model ... The RASP's finite-state machine is equipped with the capability for indirect addressing (e.g. the contents of one register can be used as an address to specify another register); thus the RASP's "program" can address any register in the register-sequence. The upshot of this distinction is that there are computational optimizations that can be performed based on the memory indices, which are not possible in a general Turing Machine; thus when Turing Machines are used as the basis for bounding running times, a 'false lower bound' can be proven on certain algorithms' running times (due to the false simplifying assumption of a Turing Machine). An example of this is binary search, an algorithm that can be shown to perform more quickly when using the RASP model of computation rather than the Turing machine model.

      So, hmm... that clearly supports the argument of the GP:

      Functional and logic programming get in the way of some aspects of algorithmic analysis too

      So what's your point again?

      --
      Pet peeve: Profane people propagating perfunctory pedantry.
    13. Re:Interesting move by Anonymous Coward · · Score: 0

      Or at least it looks that way with thermodynamics and time passing and all. In the Electrodynamics equations, I can assure you that it is not imperative.

    14. Re:Interesting move by Anonymous Coward · · Score: 0

      Hardware operations are simple enough so they can be modelled using logic programming, imperative programming and worse OOP are hard to analyse without introducing restrictions on the language syntax. As an example most of the time in Haskell you use whatever technique you like to use to analyse algorithmic descriptions.

    15. Re:Interesting move by ericvids · · Score: 1

      In fact, if you are talking C++ specifically, having access to the STL mostly eliminates having to write your own fundamental data structures for any type of data, so I spend even less time and space on boilerplate and more on implementing specific algorithms that work with my data types.

      I hope you don't mind me pointing this out, but the STL is mostly *not* based on an OOP mindset. Template programming is a different animal from object-oriented programming; it is in fact a counter-methodology to the use of inheritance and virtual methods that pure OOP prescribes (among other things).

      In other words, you have been indirectly advocating the use of a mix of programming methodologies -- "the right tool for the right job", which is exactly the GP's point.

      --
      Pet peeve: Profane people propagating perfunctory pedantry.
    16. Re:Interesting move by khallow · · Score: 4, Interesting

      The other situation is where you have complex algorithms, but simple data. Signal processing, control software, scientific programming, etc.. Take a radar as an example: the data is just a continuous stream of numbers coming in off the radar dish; but the algorithms that extract meaning from those numbers are very sophisticated. Using an OO language for problems like this is like trying to loosen a screw using a wrench - maybe you can make it work, but it's basically a really bad fit for the problem.

      I nodded at first when I read this, then I realized, the complex algorithms are objects in themselves. And the "simple data" usually has structure and meaning to it. I have some experience trying OO approaches to scientific computing. A naive approach can result in some awful problems that add little to the fundamental work.

      My personal experience has been with writing matrix algorithms. The conditions of the matrices were that they were "large" and usually had nice internal structure (for example, a class structure might be rectangular matrix, upper/lower triangular matrives, diagonal matrix, and constant matrices, constant diagonal and the zero matrix). They are "simple" data sets, but a little insight into their structure can result in significant savings in data stored and the cost of common matrix operations (like matrix multiplication).

      For me, I ran into some deep problems when I attempted to operate on multiple matrices with structure. For example, suppose in addition to the list mentioned above, I create a new class type for block diagonal matrices. There were already six matrix classes. So if I want to do matrix multiplication, I have potentially 13 new pairings of classes (left or right multiplication by block diagonal matrix on the six existing classes plus multiplying two block diagonal matrices together).

      For my language choice, C++ (and later Java), I couldn't just implement matrix multiplication as a method. I know there's some stuff with better OO implementation out there, but that's what I was using. So I ended up representing matrix multiplication as its own object, and registering specialized multiplication algorithms in a poset structure. When two matrices need to be multiplied, the matrix multiplication class looks up all the specific algorithms that would work and picks one with the best heuristics.

      Whether the complexity of that overhead is justified, well, eh... never did finish it. All I can say is that what I implemented, allowed me to throw stuff together without thinking too much about the internal structure or taking a huge hit on computation (given what I was doing, PDE difference method modeling and least squares stuff on large piles of data).

      But this example steers my intuition here. You may have several competing complex algorithms. You may end up changing the structure of the simple data you operate with. The places where your scheme can change are places which you can and maybe should objectify. Also you have processes which you can abstract through objects, for example, if you are piping data through a DSP system, then a stream structure with filters applied to the stream in sequence might be a suitable abstraction for what you're doing.

    17. Re:Interesting move by betterunixthanunix · · Score: 1

      The Church-Turing thesis unifies different models of computation; while Wikipedia tells you that this means that any computational process can be implemented with a Turing Machine, it is equally true that any computational process can be expressed using lambda calculus, combinator logic, mu-recursion, and a variety of other theoretical models of computation.

      As for algorithmic analysis...it is not terribly hard to consider in terms of the lambda calculus, although that is less common in algorithms textbooks or CS courses. It is not generally the case that algorithms which are easily understood in terms of Turing machines are harder to analyze in terms of lambda caluclus, nor is it generally the case that algorithms expressed in imperative languages are more efficient or easier to analyze than those expressed in functional languages.

      To describe it as "getting in the way" is a gross misrepresentation of the theory of computation and the theory of algorithms. Functional programming is not inefficient, certainly not in terms of the asymptotic performance of functional code. Functional programming languages have seen quite a bit of use "in the real world," including environments where efficiency (not necessarily raw performance, but efficiency in terms of computational complexity) matters.

      Also, as a side note, the Wikipedia article's assertion about false lower bounds is misleading. There are a variety of different delays associated with memory access, which may be address dependent (e.g. seek times on hard drives if you are using swap, cache misses, etc.). If these costs are polynomial in the amount of memory used by the program (assuming some sort of locality effects), then the algorithm will still be a polynomial time algorithm.

      Frankly, most programmers deal with some level of abstraction between them and the actual machine. In fact, this usually results in faster code than if the programmer were to spend all of his time hand tuning assembly language code; compilers are generally better at producing efficient code than any individual programmer, with a couple exceptions (instructions that are difficult for compilers to take advantage of, for example, but these do not represent the majority of use cases). Some abstraction must be fixed before an algorithm can be analyzed; a Turing machine is a convenient abstraction, but it is not the only such abstraction.

      --
      Palm trees and 8
    18. Re:Interesting move by Anonymous Coward · · Score: 0

      OO is fundamentally data-centric, which gets in the way of algorithmic analysis.

      You could see it as being state-centric as well. A set of classes are an equivalence partition over the program state and often a presentation of the partition of the system state, after all.

    19. Re:Interesting move by xero314 · · Score: 1

      But good OO design says that your classes correspond to groups of real-world objects: bank accounts, people, widgets, whatever. Why? Because that is the data that needs to be processed.

      This is not at all true. I'm not going to argue what is good or not, but I will say that the origins of OOD was not about encapsulating data, but instead behavior. Data is intended to be completely hidden. The problem is that people are defining their objects (I say objects because classes are not required for OOD) to have only a single behavior; Tell me what your value of X is. When the truth is that we should be defining behaviors more complex than that. "Do" instead of "give"

    20. Re:Interesting move by ericvids · · Score: 1

      To describe it as "getting in the way" is a gross misrepresentation of the theory of computation and the theory of algorithms.

      Yes, it does not really get in the way, much in the same way that OO does not really get in the way of algorithm analysis any more than imperative programming does. The real question is whether it is always a good idea to replace one abstraction with another, especially given that the replacement has greater problems with fidelity to the actual machine. More on that after I zoom in on your relevant statement:

      nor is it generally the case that algorithms expressed in imperative languages are more efficient or easier to analyze than those expressed in functional languages.

      It was never a question of whether it is more efficient or easier to analyze its running time. Again, it was a question of fidelity--does the abstraction faithfully model the actual implementation, and does discarding this abstraction in favor of a simpler-to-understand abstraction pose any real benefit to understanding? The problem, as the GGGP is pointing out, is that most systems in actual use are imperative in nature, and along with it comes assumptions that do not hold in functional languages, assumptions that can *hinder* understanding if students are not aware of them.

      Also, as a side note, the Wikipedia article's assertion about false lower bounds is misleading. There are a variety of different delays associated with memory access, which may be address dependent (e.g. seek times on hard drives if you are using swap, cache misses, etc.). If these costs are polynomial in the amount of memory used by the program (assuming some sort of locality effects), then the algorithm will still be a polynomial time algorithm.

      Actually it's not at all misleading--the article was talking about a specific machine model, and the assumption holds true for *that* model. On the other hand, your assumption that there are different delays in memory access (due to seek times and whatnot) *was* misleading--you are now effectively trading the RASP model for a more general one that does not assume constant access time to memory. Of *course* there's going to be a difference in the lower bound running time than in the RASP model, and depending on the actual difference you propose, it may or may not equalize it in memory access performance with that of the Turing machine. But that *still* doesn't mean that this alternate model is completely equivalent to that of the Turing machine--not in terms of running time complexity, because they depend on mechanisms that are *not* common between them. (For that matter, have you ever seen a real system that has *infinite* memory? The Turing machine assumes that.) The Church-Turing thesis, after all, only states that similar machines CAN compute the same decideable problems, not that they can compute them with the *same* running times.

      Some abstraction must be fixed before an algorithm can be analyzed; a Turing machine is a convenient abstraction, but it is not the only such abstraction.

      But is the actual proposed abstraction--functional instead of imperative--an adequate (not just "convenient") abstraction? I agree with the GGGP here -- in terms of algorithm complexity analysis, it is not, just as the Turing machine is not an adequate replacement of the RASP machine in terms of theoretical performance.

      --
      Pet peeve: Profane people propagating perfunctory pedantry.
    21. Re:Interesting move by tgv · · Score: 1

      OO doesn't make modeling easier, it makes building GUIs and similar problems easier. I've built quite a few types of applications, from research to backoffice, and from neural network simulations to administration, and nowhere was OO useful for modeling the data. The interface yes, the rest no. Real world models seldomly show inheritance, and never multiple inheritance or dynamic message passing.

    22. Re:Interesting move by Anonymous Coward · · Score: 0

      The main difficulty is with side effects, but functional programming has the same issues as soon as you try to interact with the external world.

      yes, but you can deal with them in a principled way, for example, with monads.

    23. Re:Interesting move by naasking · · Score: 1

      OO is practical for lots of problems, because it makes modelling real-world data easy.

      Not it doesn't! Why do so many people think this?

    24. Re:Interesting move by Unknown+Lamer · · Score: 1

      I'd argue instead that the machine being imperative is the problem. It's 2011 and we still just have a gigantic array of words that we can move an instruction pointer through... See e.g. Lambda: The Ultimate Opcode for an alternative approach to system design.

      Nothing really prevents us from building an expression reduction machine (with an imperative IO processor, naturally... it is nice to interact with the external environment) nowadays. I'm not sure where the rest of the project went, but there was a project involving Ivan Sutherland at Berkeley that built a purely parallel processor. In FLEET there is no notion of a linear program nor of linearly addressable memory--programs become dependency graphs that are reduced.

      Basically, the machine being a really fancy Turing machine is an accident (in the formal sense), and not at all essential to computation. It happens to work pretty well and certainly will be dominant for a long time, but forever? Probably not, expression reduction machines can be clockless, massively parallel (as in executing thousands of operations simultaneously), &c -- which means smaller dies, lower power usage, ....

      Another thing to think about is that this is for freshman. I'm suspecting that anyone who can get into CMU has a pretty good grasp on Algebra... and probably the differential/integral calculus. Functional programming is a natural extension of the mathematics the students have already learned whereas OO is an entirely different paradigm which presents a barrier to actually learning the essence of computing science.

      That, and CMU is the Land of SML. The mantra there is that OO is a hack--an artificial conglomeration of several orthogonal concepts: modules, protocols, records, polymorphic functions, &c. Under that philosophy OO is just another obsolete intermediate step in the evolution of computer language.

      --

      HAL 7000, fewer features than the HAL 9000, but just as homicidal!
    25. Re:Interesting move by digitig · · Score: 1

      In the case of imperative programming you can deal with them in a principled way too, for example with sequences.

      --
      Quidnam Latine loqui modo coepi?
    26. Re:Interesting move by Brian+Feldman · · Score: 2

      That's a very good point. I have gained a much greater appreciation of C++ over time for how well it supports many different programming methodologies, including even functional.

      --
      Brian Fundakowski Feldman
    27. Re:Interesting move by MichaelSmith · · Score: 1

      Take a radar as an example: the data is just a continuous stream of numbers coming in off the radar dish; but the algorithms that extract meaning from those numbers are very sophisticated. Using an OO language for problems like this is like trying to loosen a screw using a wrench - maybe you can make it work, but it's basically a really bad fit for the problem.

      Funny you should use that example. I work on air traffic control software. A the front end you are exactly right. But downstream from the radar head there is a long chain of processing and the data becomes more abstract as you go along. The problem is how to transition from the flat signal processing model you describe to an OO model further down the chain and not create a bottle neck at the same time.

    28. Re:Interesting move by Warwick+Allison · · Score: 1

      functional programming has the same issues as soon as you try to interact with the external world.

      Why would academics want to do that?

    29. Re:Interesting move by Anonymous Coward · · Score: 0

      You could easily argue that OO is fundamentally methods-centric, or that is fundamentally data and methods centric, which it is by definition.

    30. Re:Interesting move by hazydave · · Score: 1

      Years back anyway, CMU taught one "Introduction to Programming" course for Freshmen, anyone in Engineering or Science took this. The gateway to computer science was a largely theoretical course, with very little actual programming (after I took this, 15-211 back in 1980, they split it into two courses a year or two later). The goal was to teach the foundations of computer science, not lock you into any given methodology.

      --
      -Dave Haynie
    31. Re:Interesting move by lennier · · Score: 1

      OO is practical for lots of problems, because it makes modelling real-world data easy.

      Ahem. Actually, real-world data is exactly where OO doesn't make things easy, because domain objects are not often grouped into neat inheritance classes. If you followed textbook OO design methodology you would be tempted to implement, say, a HR system with employees given classes like 'Line Manager' and 'Executive', and then all Perl breaks loose when someone ever gets a promotion. So you have to fall back on multiple layers of abstraction and before you know it you've implemented a whole separate OO system inside your OO system and neither do quite what you want.

      The more I see OO in practice, the more I think it is largely an illusion of ease rather than ease itself.

      --
      You are not a brain: http://books.google.com/books?id=2oV61CeDx-YC
    32. Re:Interesting move by lennier · · Score: 1

      the hardware is imperative after all

      Tell that to a transistor. It thinks it's a continuously varying function of two variables.

      --
      You are not a brain: http://books.google.com/books?id=2oV61CeDx-YC
    33. Re:Interesting move by lennier · · Score: 1

      good OO design says that your classes correspond to groups of real-world objects: bank accounts, people, widgets, whatever.

      I sure hope not, because if you are building a system where classes correspond directly with domain objects, then you're building a system which is not configurable by its operators when the domain rules change. Which is great if you're the original programmer because it means you get paid millions of dollars to add a new report to the database (I've used OO databases where this was the case). Not so great if you're stuck in middle management and you need to tell the system that suddenly Company X is a bank, not a building society, and should now be considered a member of Class OrganizationBank not Class OrganizationFinancialInstitutionBuildingSociety - and you need to tell the system this without whipping out a Java IDE and recompiling.

      What you actually want to be building in the real world is a system where data corresponds with domain objects, and where non-user-configurable chunks of program code operate on the data. Or, even better, where non-user-configurable chunks of program code operate on user-provided data representing operations which then operate on user-provided data, and you need to be able to cleanly manage the ambiguity and double-meanings associated with the user typing in a chunk of text into a text file and then pointing this at your program and telling it 'here, this is the description of a business transaction, which is both a thing and an event and an instruction to another system and a MIME mail message and just a chunk of text, and record all of those, and log it in another text file, and snapshot so we can back out if it goes wrong, and keep the lawyers and accountants happy at all times'.

      And what you come up with when you've done this might be an 'object-oriented' system or it might not be. It might be implemented in an 'object-oriented' language like Java - partially - but once you've added enough layers of SQL and XML and SOAP and the like, you might end up scratching your head and wondering exactly whether the notion of hierarchically classed 'object' and things being always and only one datatype at once which is set at some mythical 'compile time' in a system which never stops running, actually makes any sense in the real world.

      --
      You are not a brain: http://books.google.com/books?id=2oV61CeDx-YC
    34. Re:Interesting move by lennier · · Score: 1

      the origins of OOD was not about encapsulating data, but instead behavior. Data is intended to be completely hidden.

      This approach is actually exactly what I think is unhelpful about OOP. In the real Internet-connected world of multiple rapidly evolving systems, the need we often find is the exact opposite: we need to exchange standardised forms of data in open, well-documented formats, while leaving any implication of behaviour associated with that data totally unspecified.

      For example, if I send you an HTML file, you and I can both agree on what it represents - a Web page, a DOM tree - but I put no restrictions on what you should do with it. You can display it, you can harvest it for links, you can print it to hardcopy, and how and if you do that is your business, not mine.

      If the Web had been object-oriented rather than data-oriented and had tried to tie behaviour closely to data then it would have been a huge brittle mess of very tightly-coupled classes and would never have gained traction. This is a lesson I think all OOP advocates need to mediate on. There's something important that we've missed.

      --
      You are not a brain: http://books.google.com/books?id=2oV61CeDx-YC
    35. Re:Interesting move by Anonymous Coward · · Score: 0

      a HR system with employees given classes like 'Line Manager' and 'Executive', and then all Perl breaks loose when someone ever gets a promotion

      This is why you have constructors. ;)

    36. Re:Interesting move by Anonymous Coward · · Score: 0

      Reading through some of his stuff, particularly to the link to 'Tips' on Procedural and Relational paradigms, seem more to be handled by Functional programming. Lisp comes to mind a bit (particularly Eval() ), but F# moreso (which could be called OCAML.NET).

      Fun thing is that F# works with a OOP framework. It just works extremely well with a Functional framework.

    37. Re:Interesting move by Anonymous Coward · · Score: 0

      Yeah, exactly... something like, oh I don't know... scheme? Ya! That's it! Let's teach Scheme!

      Someone contact CMU & MIT... we're onto something here...

      Oh, sorry...

    38. Re:Interesting move by Eli+Gottlieb · · Score: 1

      I'm sorry for the loss of your time, but congratulations on writing your own multiple-dispatch system!

    39. Re:Interesting move by Eli+Gottlieb · · Score: 1

      This would be what we in the PL world call "existential types", OOP calls "interfaces", and the rest of the world calls "abstract data types". We can model a stack the following way:

      FORALL a. EXISTS x. record Stack {
              x internals;
              a (*pop)(x insides);
              a (*peek)(x insides);
              void (*push)(x insides,a element);
      }

      It means that after we "package up" an internal representation and its methods, the type system doesn't allow us to uncover anything about the internal representation, including by down-casting. The syntax also makes "give me your value of X" kind of inconvenient to convey, encouraging the use of existential types mostly for real behavior.

  10. OO a tool for craftsmen, not comp sci by shoppa · · Score: 5, Insightful

    Focusing on the basics, and not on the tools of the trade, is very important at something that is not a "trade school", and CMU's computer science department certainly lives above the trade school level. (Just to contrast: when I was a freshman, the "trade school" argument was whether new students should be taught Fortran or Pascal ! Thank heaven I didn't devote my career to being a programmer.)

    It seems to me that CMU's made the very obvious decision that today, OO is a tool for craftsmen, not for freshman computer scientists. And they probably are right. It's important to not confuse the tools of the trade, with the basics of the science, and this is especially true at the freshman level. For a good while (going back decades) OO was enough on the leading edge that its very existence was an academic and research subject but that hardly seems necessary today.

    In the electrical engineering realm, the analogy is deciding that they're gonna teach electronics to freshmen, and not teach them whatever the latest-and-greatest-VLSI-design-software tool is. And that's a fine decision too. I saw a lot of formerly good EE programs in the 80's and 90's become totally dominated and trashed by whatever the latest VLSI toolset was.

    1. Re:OO a tool for craftsmen, not comp sci by salesgeek · · Score: 1

      CMU decided that the future is focusing on parallel. Because of the direction of hardware, I think they are on the right track.

      --
      -- $G
    2. Re:OO a tool for craftsmen, not comp sci by Chemisor · · Score: 1

      Ok, so let's make a computer science degree exclusively about "computer science" as opposed to "computer programming". Then we might as well dispense with the CS degree requirement for the vast majority of programming positions. Then we should realize that the market for "computer scientists", the ones that design pure math algorithms and do scientific studies of computer-related systems, is extremely small and already overfilled. Then everyone will realize that going into "computer science" as opposed to a trade school "computer programming" is a losing proposition. Eventually we'll just have "computer programming" schools, and "computer science" schools will all die. Oh, wait. Couldn't we just rename the existing degree and just teach computer programming?

    3. Re:OO a tool for craftsmen, not comp sci by obarel · · Score: 2

      We teach music *theory*, not how to play an instrument. Nothing to do with us.

      Computers are tools. You program them to get them to do something useful. They're not an abstraction, they're real. Computer science is about the theory behind computers. It's not about some "higher dimension" of thought that is unrelated to programming machines, it's all about what you can achieve by programming those complex machines.

      Otherwise, why study functional or logical programming? That's "dirty" as well, isn't it? Why have a computer lab? Why call it "computer science" when we hate computers and programming so much?

      Some computer scientists wish they were mathematicians - sit in an office, use a pen and a paper, and come up with ideas. That's not what computer science is about - that's what mathematics is about. Computer science is about understanding what can and cannot be done with a computer - it's a tool, and people use it. The actual use of computers is a subject of huge (practical!) amount of research - human interaction, programming languages, computer graphics, artificial vision. If your idea of a computer is an abstraction, why would you ever care about programming languages? They're all equivalent to a Turing machine, and the details are only of interest to "peasants" - the programmers.

      In that case, why worry about parallel computation? It's all just "dirty" details - you have more than one processor or more than one machine - it's just details. Who cares which programming language or paradigm is suitable - maybe "craftsmen" care, but they're peasants - worrying about whether to use a shovel or a hoe. This is so far removed from the work of a true computer scientists, why even worry about such details?

      So universities should not teach "computer science" because it's a contradiction of terms. Computers are machines, tools, and science, well, science is elevated. It's not about experimenting with reality, about the interaction between time, space, cost, humans and machines. It's about mathematics and P=NP.

      Well, it just isn't. It's the same old story: Chemists say to biologists "everything is chemistry". Physicists say to chemists "everything is physics", mathematicians say to physicists "everything is mathematics". But a mathematician who doesn't grow yeast in a lab is not a biologist. And a computer scientist who never writes a program or touches a computer, is not a computer scientists but a mathematician.

    4. Re:OO a tool for craftsmen, not comp sci by IceNinjaNine · · Score: 1

      Ok, so let's make a computer science degree exclusively about "computer science" as opposed to "computer programming".

      At a local university they pride themselves on having a "computer science degree with an emphasis on software engineering," followed up closely by "our courses are taught by computer scientists, NOT engineers." Yikes. Perhaps we need more software engineering programs?

    5. Re:OO a tool for craftsmen, not comp sci by Yvanhoe · · Score: 1

      In an ideal world that would be a good idea, but from a pragmatic point of view, that is a very bad way of looking at things. OO programming is, for good or bad, a very common occurrence in the IT industry. If you just want to work in a lab, that is fine to ignore it, but almost always in the industry, your architectural decisions will have to take into account a few shortcomings of the existing code base. Making a theoretically good architecture but that is unimplementable due to limitations of the tools is maybe a worthwhile attitude in research, but certainly not in the industry.

      --
      The Wise adapts himself to the world. The Fool adapts the world to himself. Therefore, all progress depends on the Fool.
    6. Re:OO a tool for craftsmen, not comp sci by hey! · · Score: 4, Insightful

      Well, I'd agree with you if you this were a class in an O-O language, but it's a class in a major programming *paradigm*. And even theoreticians have to express themselves in code. If the summary is to be believed, the department is taking a stand against O-O programming based on what it sees as the paradigm's shortcomings. Let me tell you, thirty years ago you'd hear the same kinds of arguments in a computer science department about how bad virtual machines were. Virtual machines were an early, failed attempt at getting around the limitations of early compiler technology. C showed you could have a language which was nearly as fast as assembler (faster for most programmers), and easily portable across architectures. There was no reason to study virtual machines, they had no practical application. Well, it probably would have been a good idea to have them in the curriculum somewhere to study on a theoretical basis, because ideas in computer science have a way of re-emerging.

      Computer science as a discipline embraces topics other than the theory of computability and complexity theory, which might as well be taught in the mathematics department. For example there is computer language design, hardware architecture, data communication theory, database theory, AI etc. Some of these could be put into other departments, I suppose, but an understanding of the core intellectual discipline *is* widely applicable to all the topics that commonly fall under the "computer science" rubric.

      I think an empirical case for separating computer science from software engineering might have sounded convincing fifteen years ago, but Google, and the Internet in general, are strong disproofs of this. Google isn't a search company. It's an algorithm company. It's about doing things on a scale so massive it requires serious computer science ability, well above the "tradesman" level of expertise. Which is not to say that what it does is as "pure" as the work an academic interested in computability per se and defining new kinds of complexity classes, but that kind of work, isolated from its applications, is of such narrow interest it hardly justifies the existence of a department separate from the Mathematics department.

      I do see the need for separate concentration areas or departments for computer science per se, software engineering and information science, although having employed a number of people with Masters' degrees in information science I have grave doubts about the academic quality of degree programs in that field. An academic degree should give you the intellectual tools to think about a problem, not necessarily the practical tools to work on it, which can be picked up other ways. The O-O paradigm fits into this framework. The requirement to learn a specific O-O language like C++ or Java is a different matter; somebody with a degree in C.S. should be able to pick any such language up because he should understand the *design* of the language.

      I suspect we're seeing departmental politics here.

      --
      Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
    7. Re:OO a tool for craftsmen, not comp sci by Coppit · · Score: 1

      It seems to me that CMU's made the very obvious decision that today, OO is a tool for craftsmen, not for freshman computer scientists.

      But how many of their CS majors are destined to become computer scientists? The number of PhDs in computer science per year in the US is probably less than 100, and I'm sure CMU's graduating class size is probably around that, if not larger. CS departments have always struggled with whether they are educating engineers or scientists. I bet even schools like Rice that teach mostly functional programming are generating more engineers than scientists. (Hm... I just checked and it looks like their 201 class is OO Java? Has Rice finally caved?)

      Perhaps someone who attended these "science" schools could comment?

      When I was a grad student at UVa, I can say that undergrad CS was firmly in the Engineering School. Students did team projects as soon as possible, were doing mostly C++ or Java, and probably only saw functional programming in their PL class. When I taught at William and Mary (where there is no engineering school), Phil Kearns' systems class was in high demand. In that class students learned languages like *gasp* C, shell scripting, etc.

    8. Re:OO a tool for craftsmen, not comp sci by russotto · · Score: 2

      Virtual machines were an early, failed attempt at getting around the limitations of early compiler technology.

      Say what? Virtual machines were an early, successful attempt at allowing multiple users to use the same machine at the same time for different purposes.

    9. Re:OO a tool for craftsmen, not comp sci by DarkOx · · Score: 1

      I am not sure I agree with you that OO is a tool for craftsmen. OO is a rather abstract concept for manipulation of data. Data is described as sets of symbols and computers are symbolic manipulators. So I think OO as one the more common ways modeling on computers has a pretty solid academic place in Computer Science. After all its not like I can't use an OO design methodology in a language that lakes OO features, I certainly can. That is why I say its a way of thinking rather than a tool.

      Java, C++, Python, Ruby, those are the tools of craftsmen, and anyone who really understands OO in the academic sense should be able to pull the documentation for any of the tools off the shelf study it, and start using it. It might be a waste of time to teach any of those tools in an academic setting, save using some of them to demonstrate concepts.

      There is a lot bitching on Slashdot that programing is not CS, and that is often true depending on what you are programing and what the objectives. People talk about algorithm research and such as being real CS, and that's certainly true. Lots of that can be done theoretically, but its not like being able to do work experimentally isn't useful. Its also untrue that there are no areas of blue sky CS research that can't be experimented with using man of the same tools craftsmen, building business apps happen to use.

      I think not teaching OO to CS students is about like not teaching any chemistry to biology majors. Just because its not the whole of the subject does not mean its not needed to navigate the rest of the landscape.

      --
      Repeal the 17th Amendment TODAY! Also Please Read http://www.gnu.org/philosophy/right-to-read.html
    10. Re:OO a tool for craftsmen, not comp sci by Anonymous Coward · · Score: 0

      Many Universities do have such a major: Software Engineering (sometimes lumped into their Computer Engineering sometimes not).

    11. Re:OO a tool for craftsmen, not comp sci by Anonymous Coward · · Score: 0

      If the summary is to be believed

      You must be new here.

    12. Re:OO a tool for craftsmen, not comp sci by BZ · · Score: 1

      If they all die, then there will be no computer scientists to fill the few positions where they _are_ needed, so there will be demand for some computer science programs.

      Or did you mean that _most_ of them would die? Maybe all but the very best two or three? If so, seems like CMU might have a good chance of staying around as a computer science program. If this were some random state school making the change, your argument would carry more weight.... (I think it would still be somewhat off, but it's _definitely_ off for CMU.)

    13. Re:OO a tool for craftsmen, not comp sci by betterunixthanunix · · Score: 1

      Computer science is about the theory behind computers

      Not to nitpick, but this should really be stated as "the theory behind computation." The theory behind (electronic) computers is what computer and electrical engineers study; everything a computer scientist does applies equally to someone working with a pen and paper (in theory, anyway). It is rather unfortunate that so many CS curricula treat theory as some sort of an afterthought, instead of the primary focus.

      --
      Palm trees and 8
    14. Re:OO a tool for craftsmen, not comp sci by BZ · · Score: 1

      > The number of PhDs in computer science per year
      > in the US is probably less than 100

      http://www.nsf.gov/statistics/infbrief/nsf10308/ says 1786 computer science PhDs awarded in the US in 2008.

      You estimate for the number of CS graduates per year from CMU is about right (the school of computer science is 500-600 undergrads from the numbers I can find, but they have a computation biology major, and a music and technology one, and an a "computer science and arts" one in addition to straight computer science).

      But yes, I would fully expect that a majority of CMU's CS graduates go into engineering (perhaps after doing a masters degree), not pure CS.

    15. Re:OO a tool for craftsmen, not comp sci by Brian+Feldman · · Score: 1

      You're talking about time-sharing systems.

      --
      Brian Fundakowski Feldman
    16. Re:OO a tool for craftsmen, not comp sci by russotto · · Score: 2

      You're talking about time-sharing systems.

      I'm talking about VM/CMS. Yes, it's time sharing. It's also based on virtual machines (hence "VM").

    17. Re:OO a tool for craftsmen, not comp sci by Anonymous Coward · · Score: 0

      It's CMU, not some random school. People who are in CMU's computer science program are much, much more likely to end up doing things towards the computer science side of the spectrum (as opposed to the "code monkey" side of the spectrum) than most.

    18. Re:OO a tool for craftsmen, not comp sci by Needlzor · · Score: 1

      I agree wholeheartly, especially after having seen MSc students in my University battle for hours with tears in their eyes because they couldn't implement the "amazing" system they just designed. Granted my uni is far from being as good as CMU (I wouldn't be surprised if it was actually one of the worst of the country) but I still find this kind of situation quite saddening. Every computer scientist should have some experience with computer programming.

    19. Re:OO a tool for craftsmen, not comp sci by hey! · · Score: 1

      You're talking about virtualization. I'm talking about things like the Java Virtual Machine or Microsoft's CLR, which provide an abstract model of idealized hardware.

      --
      Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
    20. Re:OO a tool for craftsmen, not comp sci by phantomfive · · Score: 1

      You are right. If you read the formal report from CMU, they explain that while Java is a great tool, it was too complicated for beginners, and abstracted out a lot of things they need to learn (like stacks or linked lists or hash tables, see p 13). Object oriented programming is a great organizational tool, but if you are only writing programs 50 or 100 lines long (like beginner programmers), it's sometimes hard to see how adding a class to something simplifies it, because it doesn't simply your hello world program. OOP is a more advanced topic, which is why CMU is moving it to a second year class.

      --
      "First they came for the slanderers and i said nothing."
    21. Re:OO a tool for craftsmen, not comp sci by obarel · · Score: 1

      That's what I don't agree with.

      Computation is one thing: what can be computed, what's the minimum number of operations it takes to compute it, what cannot be computed, etc.

      But this is only one part of computer science. Computer scientist don't all deal with computation - some are experts in computer graphics, some in operating systems, some in programming languages, some in human-computer interfaces, some in databases, some in artificial intelligence.

      The question of "what can be computed" was answered by Turing. Classes of algorithms (in terms of run-time, randomness etc.) is a very important part of computer science. But that's not all there is to it. "Computation" in itself does not need anyone to develop better compilers, and does not explain why some languages are better than others for certain things. But surely compiler theory and programming languages are also part of computer science. "Computation" doesn't tell you what is secure - from a theoretical point of view there's no difference between RSA keys with 512 bits and keys with 4096 bits. But there is a difference. Natural language analysis is part of computer science, even though it could be just a question of "how big is your rules database", which is not a "scientific" question. Still, research takes place in universities about these things, and they are considered part of "computer science".

      Yes, computation is an important part, and you could sit with a pen and a paper and prove a lower-bound on a problem. But I don't think computer science is confined to that. Everything from "what can be computed" down to "how to implement it" is a subject of research. Alas, even object-oriented programming...

    22. Re:OO a tool for craftsmen, not comp sci by naasking · · Score: 1

      It seems to me that CMU's made the very obvious decision that today, OO is a tool for craftsmen, not for freshman computer scientists.

      No, they are making the point that properly grasping OO principles requires understanding some very advanced concepts in computer science, concepts which are not appropriate for freshman.

    23. Re:OO a tool for craftsmen, not comp sci by RocketRabbit · · Score: 1

      "Google isn't a search company. It's an algorithm company."

      It's both, but only in support of selling ads there buddy.

    24. Re:OO a tool for craftsmen, not comp sci by SpaghettiPattern · · Score: 1

      It seems to me that CMU's made the very obvious decision that today, OO is a tool for craftsmen, not for freshman computer scientists.

      When I was studying compilers were the thing and now they aren't any more. Would that mean compiler theory should no longer be taught? And if we agree there is merit in teaching compiler building, what will be done in the lab?

      Same goes for assembly, procedural languages and OO languages. In most OO languages you can program in a procedural way if you really really want to. However, a switch to the OO paradigm will almost certainly allow you to better divide your problems in sub-problems and separately solve these, a bit in a modular fashion. And thus you'll be able to solve whatever you want in a more structured way. Structure is not a bad by-product when science is studied.

      The discussion of modularity and parallelism in OO is indeed a very academic one and should be fought the Dijkstra way with pencil, paper and eraser. But we should realise that most of us simply aren't Dijkstras and that modularity and parallelism lab exercises using OO languages would not irreversibly compromise the soul.

      --

      I hadn't the slightest objection to his spending his time planning massacres for the bourgeoisie... (P.G. Wodehouse)
    25. Re:OO a tool for craftsmen, not comp sci by Anonymous Coward · · Score: 0

      It seems to me you don't understand OO. OO has a rich theoretical basis; it is NOT a technology trend. .NET, Java, and various implementations are technology trends. OO is a modeling methodology--whose results you can apply in non-OO languages if you really want.

      Now if you said some programs have an over-reliance on (.NET|Java|C++|) you may have had a point.

    26. Re:OO a tool for craftsmen, not comp sci by shoppa · · Score: 1

      Yeah, but this is CMU. They are not aiming to turn out code grunts. I don't deny that some will become code grunts but that shouldn't be their purpose.

      Imagine, say, that freshman mechanical engineering students were being given a course on sheet metal fabrication. IMHO that's a very good analogy to teaching freshman CS students about OO programming. Top-flight mechanical engineering academic programs will have a way of introducing the limits of sheet metal fabrication to it's mechanical engineering students in a broader context. Similarly a top flight computer science program will introduce the limits of OO programming to its students in a broader context.

    27. Re:OO a tool for craftsmen, not comp sci by VirtualJWN · · Score: 1

      I disagree, in that OO is for people who are effectively assembly line workers cranking out code and paid by the hour. It is not possible to build truly dynamic, high performance, innovative solutions using OO code. OO is a way to keep the "average programmer" from having to write code (deal with memory mgmt, pointers, etc. Gaining the power of "C" without understanding the language. Really, assembly line OO (C++ C#) versus Innovative "C". No comparison

      --
      "Any sufficiently advanced technology is indistinguishable from magic." - Arthur C. Clarke
    28. Re:OO a tool for craftsmen, not comp sci by starfishsystems · · Score: 1

      Computer science is about understanding what can and cannot be done with a computer

      I have to disagree with you. It's about what can and can't be done with computation. As Dijkstra said, "Computer science is no more about computers than astronomy is about telescopes."

      This isn't merely splitting hairs. You're talking about computers as "machines, tools" which of necessity are particular engineering solutions to the question of how to manipulate bits. No wonder you can't see this area of activity as a science. It's not. But what of that? Your premise was flawed to begin with.

      If instead we take computer science as being about computation - which, by the way, we should note with due respect is how most computer science departments at most universities see themselves - a fundamentally different landscape emerges. The contribution of computer science is similar to other sciences: they provide intellectual tools which we use to better understand the nature of the physical and mathematical and computational universe that exists or could hypothetically exist.

      It's no accident that computer science, as a distinct discipline, grew out of mathematics here on Planet Earth. But it's not hard to imagine, elsewhere in the universe, computer science arriving first on the scene and mathematics eventually branching off as a subdiscipline. Since the universe itself doesn't impose an ordering principle here, it's a matter of perspective as to what you choose as the starting point.

      During its short lifetime as a formal discipline, computer science has taken a very important, and distinctive, place among the sciences. The progress of a large part of scientific research now depends on it. Scientists rely heavily on computational models to explore claims about the physical universe. Though the perspective which gives rise to these models is distinctive enough to be worthy of a separate discipline, the process is essentially no different than using mathematical models. Likewise, from a scientific perspective, the physical realization of these models is irrelevant.

      Here we see another reminder that computer science is not the same as computer engineering. Even in the early history of computer science, Alonzo Church, Kurt GÃdel, Alan Turing, and many others were able to make enormously significant contributions to the field at a time when physical realizations of computation did not yet exist. So, while you're entitled to a personal taxonomy which excludes such individuals from being regarded computer scientists, I think you'll find yourself pretty much on your own.

      --
      Parity: What to do when the weekend comes.
    29. Re:OO a tool for craftsmen, not comp sci by obarel · · Score: 1

      I wasn't trying to exclude computation theory from computer science.
      I was trying to include many other areas that are not seen as part of the science by some.
      Namely, such "earthly" things as object oriented programming.

      I was objecting to the notion that "object oriented languages" are but a tool for craftsmen and therefore have no place in universities.
      If that were the case, then languages such as Scheme or Prolog are also merely instruments, and should not be taught (what can you achieve in Prolog that cannot be achieved in Java, C or assembly, other than convenience?). Why then teach about compilers? They're only tools of the trade. Computer graphics? merely a visual approximation, uninteresting with respect to computation. Databases? Nothing to research here, it's already proven to be boring. Operating systems? insignificant. Parallel algorithms? equivalent to a Turing machine. Cryptography? depends on computational power and hence trivial.

      Of course Church, Godel and Turing were computer scientists (and Turing most definitely programmed a computer and was aware of its physical limitations). I was actually a student of Michael Rabin, who was a student of Alonzo Church, and both are computer scientists without a doubt. But so are many others who research the many diverse areas of "computer science". If anything, the poster I was replying to was excluding the many great minds that came up with "object oriented programming" as mere "tool builders" rather than researchers and pioneers.

    30. Re:OO a tool for craftsmen, not comp sci by Anonymous Coward · · Score: 0

      Your default assumption is that there's not much to being a GOOD OO programmer that someone *really smart* (never mind the people who did't get into CMU) can't quickly pick up. Sorry, but that's just not reality, where reality is defined to be actual code written by actual "really smart" people as defined above.

      It's not *just* learning patterns and anti-patterns, it's understanding what a decent API and how to write one. The code I see from CMU grads and others including MIT can most charitably be called spaghetti code. If it's so easy to write understandable, maintainable code then why aren't they doing it? Even in contexts where OO is the most obviously appropriate approach, what they tend to produce is thousand line methods of streaming code with telegraphic variable names interacting in ad hoc ways. Even they don't know what it's doing or how it's doing it a few months later.

      So please, let's not get the conversation going on a false premise. Doing OO is apparently too hard for even CMU and MIT graduates. That's the tale of the tape.

      Let's also remember that OO programming languages are Turing complete and can be used to program anything programmable. Java and C++ and other OO languages are't just "data languages" like JSON or XML. There was a flavor that this was the case to the original story, so this need to be stated explicitly- whatever CMU wants to replace them with, they're not getting something otherwise unachievable with OO languages.

      OO languages aren't bound by what they can ultimately do, they're bound by how easy they make things to do. If the programming imperatives that govern language choice are shifting that's interesting. Why a school would decide that their will students no longer need to avail themselves - as competent practitioners- of the enormous bounty of libraries written in OO languages is a mystery and smells more than just a little of hubris. It also has the look and feel of a crass advertising stunt. "Please enroll at CMU- we're so far ahead of the pack, we can't even see it behind us any longer".

      Sorry. Programming is not ditch digging. Every so many years another company finds another group of investor-suckers who are taken in by that company's claim they're *just about* to release a revolutionary code-authoring case tool which will let idiots (that would be management) program using only their understanding of the domain. As I remember, a lot f those companies management teams are from schools like CMU. Like the Kurzweilian claims for AI, which is just the latest incarnation of the AI-just-around-the-corner meme, these things never materialize or the company's fail exactly because customers find out they can't do what they promised.

      CMU and MIT were going to bring us hard AI decades ago. HAL-9000 from 2001 was basically a Minsky vision. Minsky is a full blown genius who's made incredible contributions to the entire field of AI ,and contributions which might not have been made except for his individual personality. But he was still wrong.

      It's sounds to me like in attempt to be special and be a trend setter, CMU is betting the farm on other people's inability to continue to bring OO into the future. CMU does't have monopoly on smart people and betting against the collective efforts of smart people is not known to pay big dividends.

  11. A larger problem by wootest · · Score: 4, Insightful

    The big problem with OO courses has always been that there's far more focus on the mechanism (and, lately, on design patterns) than on actually structuring your program to take advantage of objects. The word "polymorphism" isn't as important as getting across the concept that you can coordinate a few things as if they were the same thing, and have them act in different ways. Knowing a bunch of design patterns by name isn't as important as figuring out once and for all that you can structure your program in such a way that you can create interfaces (not necessarily actual interfaces/protocols) between different parts of your program and essentially replace them, or at least rework them entirely without having the whole house of cards collapsing.

    There's no focus on making it click. There's no course that teaches you explicitly just about formulating problems in code, and that makes me sad.

    1. Re:A larger problem by russotto · · Score: 1

      Knowing a bunch of design patterns by name isn't as important as figuring out once and for all that you can structure your program in such a way that you can create interfaces (not necessarily actual interfaces/protocols) between different parts of your program and essentially replace them, or at least rework them entirely without having the whole house of cards collapsing.

      You can teach that to sophomores. Then, you let juniors and seniors find out that abstractions leak and much of this beauty fails to exist in the real world.

    2. Re:A larger problem by Anonymous Coward · · Score: 0

      This sounds like software engineering.

    3. Re:A larger problem by Anonymous Coward · · Score: 0

      There's no focus on making it click. There's no course that teaches you explicitly just about formulating problems in code, and that makes me sad.

      That's true for a lot of things taught in schools and universities (or elsewhere). It is hard to come up with explanations and intuitions that fit every single student. Making it click is the responsibility of a student who wants to know why some things are the way they are. Look at things in context, look at different formulations or the same idea or complex of ideas, look at the theory and the practics, try to explain the things in a way that is true to his or her own ideas and intuitions about the subject, etc. Regarding polymorphism: That's something that is not specific to OO, it's thing from type theory and people who want to understand better the different shades of polymorphism simply have no alternative to studying some type theory. So in essence, I'd say, expose the students to some of the underlying theory and give them the opportunity to connect it with practical applications by teaching them about design and having them design programs/systems and implement some of them.

    4. Re:A larger problem by SpinyNorman · · Score: 1

      Well, programming "in the large" is for the most part beyond the scope of an undergrad course. If you're lucky you may do one final year project of sufficient complexity (e.g. write a toy compiler) that high level design becomes the key issue, but for the most part you're just going to be doing simple assignments.

      Big projects, where you can experiment with design techniques, take time to implement, so there's no escaping the fact that this (high level design) is necessarily something that you're only (hopefully!) going to learn over an extended period of time after you graduate.

    5. Re:A larger problem by Anonymous Coward · · Score: 0

      The big problem with OO courses has always been that there's far more focus on the mechanism (and, lately, on design patterns) than on actually structuring your program to take advantage of objects.

      I concur. I remember my first year module "Object oriented programming with Java" was more "Java" than "Object oriented programming". To make things worse, the first semester focused on basic programming techniques using JavaScript. Needless to say I spent a lot of time showing friends that they weren't even remotely similar. I remember sitting in a full lecture "learning" the size of int vs the size of long. Whilst these can be important for programming in Java, they're almost a complete waste of time if the goal is to teach object-oriented concepts, as the point of OO is to allow abstract away the machine domain to allow one to focus on the problem domain.

      FWIW I stopped attending those lectures since it was an open book exam - when it came down to it, I was able to look up everything I needed during the exam.

    6. Re:A larger problem by Kwesadilo · · Score: 1
      Right now, CMU offers a CS course called Great Theoretical Ideas in Computer Science, which I think fills the gap that you are describing. Its course description from the course catalog:

      This course is about how to use theoretical ideas to formulate and solve problems in computer science. It integrates mathematical material with general problem solving techniques and computer science applications. Examples are drawn from Algorithms, Complexity Theory, Game Theory, Probability Theory, Graph Theory, Automata Theory, Algebra, Cryptography, and Combinatorics. Assignments involve both mathematical proofs and programming.

      To the best of my knowledge, this course is currently taught and will continue to be taught using functional functional programming. I took the Fundamental Data Structures and Algorithms course referenced in the article. It has some of the problem-solving ideas from Great Theoretical Ideas, but it's more about just knowing what algorithms are out there. Up to this point, the course has been taught in Java with heavy focus on object-oriented ideas, but that will now change to functional programming with ML. I appreciate the benefits of the knowledge it provides, but its mathy nature was sufficient to convince me never to take Great Theoretical Ideas. I'm more of a systems guy.

      --
      This space reserved for administrative use.
    7. Re:A larger problem by Kwesadilo · · Score: 1

      Well, the best of my knowledge was wrong. I was combining Great Theoretical Ideas with another course about functional programming. Great Theoretical Ideas is entirely theory and has no programming component. Nevertheless, it perhaps addresses at least some of your concerns about teaching problem solving.

      --
      This space reserved for administrative use.
    8. Re:A larger problem by MikeFM · · Score: 1

      Of course in practice that's often not much of an improvement because the actual useful parts of your program change rapidly and drastically so that all your careful design is so broken that it is impossible to use what you already built without a major rewrite and all your fancy structure ends up making it even slower to adjust. I do think objects and good design can make a lot of sense in libraries and such long-term structures but in the majority of code not really. Real world projects just aren't that stable.

      --
      At what price learning? At what cost wisdom? The price is a man's peace of mind, and the cost is his life.
    9. Re:A larger problem by wootest · · Score: 1

      It sounds like you're saying "things change, so they should never be stable, unless sometimes". Part of life as a programmer is vigilance and refactoring. Yeah, you're gonna mess up and make bad choices every now and then, but I mean things like breaking up the logic and the user interface into two separate layers. It's so simple and it forces you to do choices that will make sense weeks, months and years into the life of your application. Not only that, but it's something that's often ignored entirely in the avalanche of short exercises that plague these sorts of courses.

      Good intentions will turn out bad results. I'm aware that if my suggestion is implemented, there will be teachers who force students to make elaborate sorta educated guesses, and they won't always be stellar. But they're part of the road towards being a programmer. You're going to need to tackle it someday. If you know how to think like a programmer and know the basics, you can read up on the theory later, but it's hard to be stuffed with all this knowledge that you can recite but don't understand and then try to squeeze in some deeper meaning.

    10. Re:A larger problem by wootest · · Score: 1

      Sure, it's a general problem, and I agree with what you say. It takes active participation by both the teacher and the student, but either one can make it easier.

      What I meant by the part about polymorphism is that I've seen (and taken) tests where the important thing was knowing the word for it. There's no encouragement to actually exploit it beyond the so obviously theoretical examples, like the zoo example where you have different animal buttons do different things. How about making a chess game instead? That shows off interfaces/abstract base classes in a practical example - were you to do a game, you'd have to have different classes for different pieces, but you'd have to have some way of binding them all together in a general fashion.

    11. Re:A larger problem by wootest · · Score: 1

      Most courses are long enough that you can do a few small exercises per week to learn very minute concepts, or to build from the very bottom, but you should be able to make two or three longer exercises as well. I think a good way is to keep a well-chosen exercise on the cooker, adapting it to incorporate things as you learn them. If this is done well, and if it goes from messy to cleaned-up near the end without making it frustrating, it could provide reinforcement that one way is clunkier and needs more code than the other way.

    12. Re:A larger problem by wootest · · Score: 1

      People will do as they are first taught unless there's a compelling reason not to. If you first teach them to just code fast and loose and only then to put up structure, they'll do it fast and loose, since structure takes time. It's not obvious to them most of the time that the right sort of structure saves time and spares you from headaches. You don't need to create huge abstractions for that to be true (it's probably likely not to be true, unless they know what they're doing).

    13. Re:A larger problem by Tablizer · · Score: 1

      program in such a way that you can create interfaces (not necessarily actual interfaces/protocols) between different parts of your program and essentially replace them, or at least rework them entirely without having the whole house of cards collapsing.

      Functions can do that also. Functions are interfaces.

      The word "polymorphism" isn't as important as getting across the concept that you can coordinate a few things as if they were the same thing, and have them act in different ways.

      OOP is not the only way to do that. Further, it tends to require (or at least is best tuned for) hierarchical classification of domain nouns.

      However, hierarchies are simply not powerful enough to represent the nitty gritty of actual differences. They are too simplistic to represent real-world variations-on-a-theme. Set-theory is better suited for such in my opinion, and OO does not support set-based "polymorphism" very well (at least I haven't seen it done well yet in OOP).

      In other words, features are modeled and tracked as sets, more or less, not as a position on a hierarchical taxonomy. A combination of procedural and relational seems to "do sets" better in my observation than OOP.

    14. Re:A larger problem by wootest · · Score: 1

      I don't figure I ever mentioned hierarchies. I mentioned interfaces. (Even though I don't like the language itself, I think Go's approach to this, with duck-typed interfaces checked by the compiler and no type hierarchy, gets close. It's missing mixins though.) I agree with most of what you're saying.

    15. Re:A larger problem by Tablizer · · Score: 1

      Techniques such as overloading are arguable not really OOP, or at least not exclusively OOP. One could argue they are a form of predicate dispatching, which is not something OO can claim as its own.

      My point was that OOP "naturally" implements dispatch based on noun hierarchies. Outside of that it is often either borrowing non-OO techniques, or is something that OO doesn't do very conveniently.

      Languages sometimes borrow from the outside to get around the limits and hierarchical tendencies of OO.

  12. Really? by vmfedor · · Score: 2

    Perhaps I'm misunderstanding the post... it sounds to me like OO techniques are only going to be taught in elective courses from now on. If that's the case, I think CMU is missing the fact that the majority of development work in the "real world" is done on already-existing platforms. Parallel/cloud computing and modular design may be the "next big thing", but what happens when the student gets their first job working with an application built with Java or .NET? Maybe in their ivory tower they can say "OO is dead" but in the real world, OO is very real.

    --

    I like my women how I like my sugar.. granulated.

    1. Re:Really? by Fnord666 · · Score: 5, Funny

      Perhaps I'm misunderstanding the post... it sounds to me like OO techniques are only going to be taught in elective courses from now on. If that's the case, I think CMU is missing the fact that the majority of development work in the "real world" is done on already-existing platforms. Parallel/cloud computing and modular design may be the "next big thing", but what happens when the student gets their first job working with an application built with Java or .NET? Maybe in their ivory tower they can say "OO is dead" but in the real world, OO is very real.

      This is a CS program we are talking about. Much like economics, in these disciplines the real world is often considered a special case.

      --
      'The tyrant will always find pretext for his tyranny.' - Aesop's Fables
    2. Re:Really? by maxwell+demon · · Score: 1

      If your goal is to get a programmer job, maybe you should have chosen to study software engineering instead of computer science.

      --
      The Tao of math: The numbers you can count are not the real numbers.
    3. Re:Really? by multipartmixed · · Score: 1

      When I went to school, graphics was an elective.

      I didn't take graphics, so I didn't get a job where I needed to write a ray tracer or whatever.

      See how that works? Not so hard.

      --

      Do daemons dream of electric sleep()?
    4. Re:Really? by CynicTheHedgehog · · Score: 1

      I've been noticing that Java is moving away from OOP. If you use EJB3 persistence (i.e. JPA), JAXB, JSF, WebBeans, or any number of recent technologies you'll find that:

      - Business methods (stateless EJBs/web services, servlets, JSF components, entities, etc.) are stateless and non-thread-safe
      - All data containers must adhere to the Java Bean specification; all mutable properties must either have a public setter method or the entire object must use field access
      - Data objects are encumbered by persistence state, making complex operations on object graphs either costly (eager fetching) or perilous (lazy initialization exceptions, stale object state exceptions, etc.)
      - Most, if not all, user state is managed in the HTTP session or client (in the case of a fat client)

      The result is that business logic exists as a set of stateless functions (that happen to exist in a class) and that the date is a set of functionless state (all fields must be exposed so that the business methods and container can operate on them). So basically you have a set of functions in a class file that receive a set of data (entities or business keys), operate on it, and then return some other data that then is stored as a name/value pair in a session or a field on some Swing control.

      This movement away from OOP has been driven largely by JEE and container-managed services, which are multi-threaded, clustered, and distributed. In order to do that efficiently, the programs have to separate data and logic.

      There have been some attempts to "fix" this such as Seam, but the reality is that these solutions do not scale. They are good for hotel reservation apps, but not a 300 table enterprise OSS system.

      So OOP is going the way of the Dodo, but the writing has been on the wall for some time. Java, .NET, and other technologies in the business of driving large scale enterprise applications are still very much relevant.

    5. Re:Really? by ZankerH · · Score: 1

      This is a university-level Computer Science course, not a programming trade school. They aren't in the business of teaching people to write $5 iGroan apps.

    6. Re:Really? by Anonymous Coward · · Score: 0

      Bullshit. I've been a software engineer for almost twenty years. I have a CS degree. I find that I can usually tell the good programmers from the mediocre ones by who has a CS degree and who has a SwEng one. Not always. The gifted will be good regardless of the schooling, but of those that always needed to learn programming in college, the CS major blow the Eng ones away. Of course, the big problem is the Eng majors *think* they are better. They're lucky if they can rub two if statements together.

    7. Re:Really? by narcc · · Score: 1

      modular design may be the "next big thing"

      In the 1970's

      what happens when the student gets their first job working with an application built with Java or .NET?

      They'll use that fancy education of theirs to apply their knowledge and skills to the prescribed tool.

      Maybe in their ivory tower they can say "OO is dead" but in the real world, OO is very real.

      Sad, isn't it? Don't worry those ivory tower elitists will provide us with better tools and finally break the shackles binding us to this horrid failed paradigm.

    8. Re:Really? by Anonymous Coward · · Score: 0

      This sounds like an oxymoron: "business methods...are stateless and non-thread-safe"

      If a method is stateless, why would it be non-thread-safe?

    9. Re:Really? by CynicTheHedgehog · · Score: 1

      I meant the classes themselves. For example, you're not supposed to use non-static private fields in a stateless session bean, message driven bean, servlets, etc. In the best case the field values will just be lost as the instance is discarded and the request handling thread returns to the pool; in the worst case you will have concurrent access to the same instance of the bean which leads to lost updates and race conditions on those fields. (The spec implies that concurrent access to a stateless bean is possible, but I've never seen a container implement them in this way. Usually a new instance is created for each thread.)

    10. Re:Really? by betterunixthanunix · · Score: 1

      the real world

      People go to vocational schools to be trained for real world jobs. CMU is not a vocational school.

      --
      Palm trees and 8
    11. Re:Really? by Anonymous Coward · · Score: 0

      Are we going back to the days of 1000 line functions that are impossible to debug? I have never once had a problem designing something in an OO fashion. I think OO is rather nice, however I can see that it doesn't solve all problems.

      Also, if you design things correctly why can't OO naturally be parallel?

    12. Re:Really? by tchernobog · · Score: 1

      I do miss your point. Software engineering is mostly about concentrating on a higher level (architecture, design, how pieces fit together, a bit of project management, requirements engineering, reliability models, etc.) than not programming. You want to outsource to code monkeys for that, nowadays. As a master student in software engineering, I barely wrote any code at all up to now (and I don't foresee any of that in the future). I think you are confusing a software engineer for a software developer. They are different jobs and they have a very different salary too.

      --
      42.
    13. Re:Really? by spedrosa · · Score: 1

      Forget the "real world".

      If they can deal with whatever abstractions a difficult CS course is throwing at them, they can learn the boring OO stuff by themselves.

    14. Re:Really? by Brian+Feldman · · Score: 1

      That's really just your lack of experience with object persistence frameworks. Yes, each framework has some boilerplate -- register your specialized type with the system so that it unmarshals into the specific object type you want, rather than just one that contains that JavaBean boilerplate. Then you can go ahead and implement any specialized, non-Bean methods that you like on those objects. Your only limitation is that, yes, you must use the JavaBean style setter-and-getter or direct-member-variable-access paradigms as part of the implementation.

      --
      Brian Fundakowski Feldman
    15. Re:Really? by CynicTheHedgehog · · Score: 1

      My point wasn't that you *can't* implement whatever methods you want, it's that it doesn't do any good. Consider a remote EJB. (Clustered EJBs have to be remote.) The client pulls down an Employee object by calling EmployeeSession.getEmployeById. The client then calls Employee.promote() on their local instance. Does that have the desired effect? No, the client must then call EmployeeSession.updateEmployee and pass in the modified object. What if employee.promote() has to update the employee's manager reference and then update the manager's subordinates collection? What if there are business rules that have to be observed that consider entities that exist outside of the normal scope of the employee and manager? What if there are interactions with other EIS?

      At this point it makes more sense to have an EmployeeSession.fireEmployee() method that takes an employee ID. The implementation then loads the employee by ID (so that it is in the persistence context), performs whatever additional validations and logic are necessary, and then returns the modified Employee object.

      Now consider that this may be a web service method. That being the case, all of the fields on Employee have to be readable and mutable, because XML does not care about data protection. In that scenario you absolutely cannot trust the client to submit a pristine/valid Employee object, so you have to go field by field and do validations *anyway*. In this scenario a EmployeeSession.fireEmployee method makes much more sense, as all the client supplies is a client ID, and there is no ambiguity as to whether the other fields may be updated.

    16. Re:Really? by ADRA · · Score: 1

      "- Business methods (stateless EJBs/web services, servlets, JSF components, entities, etc.) are stateless and non-thread-safe"
      Developers are moving toward Statelessness technologies because it makes concurrency a LOT easier to manage on large systems
      The thread safety of a world is completely within the purview of the developer and always has been in Java. Swing isn't thread safe, We've only seen thread safe capable collections in the standard library for what, 5 years? Plus, EJB still has at its core the database transaction as an absolute thread safety net as long as you elect to use it. If you want to say anything about modern java, it would be that they haven't tackled the fundamental scaling issues in a larger variety of ways. But at least collections (Thanks Doug Lea) has made Java a little better place.

      "- All data containers must adhere to the Java Bean specification; all mutable properties must either have a public setter method or the entire object must use field access"
      I'm missing your point. Maybe if you could elaborate on this, I could see what your problem is with the general Java bean philosophy.

      "- Data objects are encumbered by persistence state, making complex operations on object graphs either costly (eager fetching) or perilous (lazy initialization exceptions, stale object state exceptions, etc.)"
      This has and always will be the case. Without those tools, you're forced to do all these fetches yourself. Sometimes to this day this is absolutely necessary to get the most effective and sometimes the only way to get a good performing query, but by in large ORM means that the rest of the data access-association boiler plate is kept to simple well known paradigms that anyone can pick up and use. This flexibility comes with a caveat in that you can only fetch within a transactional context, and this simple rule isn't that hard to follow once you understand WHY its relevant.

      "- Most, if not all, user state is managed in the HTTP session or client (in the case of a fat client)"
      Sometimes people like to store things in database, and sometimes they like to store them in session data. The advantage of session data is that its really easy to toss away when the user goes away (automatic cleanup). Since any nice clustered AppServers will support replicated session data, it makes sense that this and/or the database would be the logical location to store session specific user data.

      "This movement away from OOP has been driven largely by JEE and container-managed services, which are multi-threaded, clustered, and distributed. In order to do that efficiently, the programs have to separate data and logic."
      I would have to agree heavily on this one. Reliance on frameworks means that there's a very real problem of making anemic data classes with processing logic floating off in framework workflow stubs... Realistically, I have a hard time conceiving better ways to re-marry the data workloads with processing and deep associative processing. I hope some of the 'computer science' head cases in this topic can come up with solutions to real problems... *sigh* I can dream.

      --
      Bye!
    17. Re:Really? by ADRA · · Score: 1

      *correction... Java 1.5 was 2004 so that's 7 years ago that concurrency made it into Java.. damn I'm getting old.

      --
      Bye!
    18. Re:Really? by Anonymous Coward · · Score: 0

      OO does not necessarily preclude 1000 line functions. Also, manipulating OO in order to make it parallel is not a good way of teaching parallelism.

    19. Re:Really? by Anonymous Coward · · Score: 0

      what happens when the student gets their first job working with an application built with Java or .NET?

      They will learn Java or .NET. These things are not that hard. Finishing an undergrad degree in CS means learning four or five very different languages. If you can do that, you can figure out that a pointer to a struct is passed into functions inside those structs, which java and .NET call "objects".

      Maybe in their ivory tower they can say "OO is dead" but in the real world, OO is very real.

      Do you think physics majors should be required to fix cars in class? I know those ivory-tower types think physics is about quantum mechanics and relativity, but in the real world car repare is necessary.

      If you only want to learn practical skills, go to a trade school.

    20. Re:Really? by Brian+Feldman · · Score: 1

      If you don't think that developers do engineering, then you truly do not know what software is, young one.

      --
      Brian Fundakowski Feldman
    21. Re:Really? by Anonymous Coward · · Score: 0

      Amen to that. A computer science degree does absolutely nothing to guarantee that you can actually program. My school split out a separate "software engineering" major shortly after I left, which was definitely a good idea... we had CS majors graduating who couldn't write a proper double-nested for-loop to save their lives.

    22. Re:Really? by benhattman · · Score: 1

      If that's the case, I think CMU is missing the fact that the majority of development work in the "real world" is done on already-existing platforms. Parallel/cloud computing and modular design may be the "next big thing", but what happens when the student gets their first job working with an application built with Java or .NET?

      No, CMU is planning ahead for when the rest of the world moves off of C++/Java/C#. The writing's on the wall for those imperative OO languages. Look around, the market for significant single threaded desktop applications is almost dead. Either the market is saturated with free and licensed software (Office/LibreOffice) or it's a niche product line. Most of the fresh money in the near future will be either "apps" (android, IOS), web based (HTML/Javascript), embedded (often C), or service in the cloud (massively parallel). You can't teach an intro course to mobile apps languages, they're too locked in by a vendor. And you can't teach to the web either if you want your students prepared for 400 level CS courses. So you're either looking at a 40 year old systems language, or you pick something new and hope it pans out as the future language of the cloud.

      After all, if you're program advertises itself as teaching "that language which was hot 10 years ago and is now only really used because of inertia", how many top students will you really attract?

  13. Re:cnn emulates real life for US? babys et al diff by WrongSizeGlass · · Score: 1

    Is it just me or does this sound like someone has been listening to too much Talking Heads?

  14. Important question. by Anonymous Coward · · Score: 0

    Is CMU an anagram for anything?

    1. Re:Important question. by narcc · · Score: 1

      Carnegie Mellon University. It's one of the best schools in the world for CS.

    2. Re:Important question. by Anonymous Coward · · Score: 0

      Um, no? He wanted an anagram, not an acronym.

    3. Re:Important question. by marcello_dl · · Score: 1

      Silly OP is clearly joking, he knows there is one meaningful anagram: `cum`.

      Which means `with` in Latin. Problem, anglocentrists?

      --
      ---- MISSING MISCELLANEOUS DATA SEGMENT --- [sigdash] trolololol
  15. Anti-Modular? by msobkow · · Score: 5, Interesting

    Apparently the meaning of "Modular" has changed since I was in University back in '82. OO used to be the epitome of modularity.

    But I do agree that making it an introductory first-level course does warp the mind of the young programmer. There are a lot of languages that don't enable OO programming at all (e.g. Erlang), which become much more difficult for them to grasp because OO is so engrained in their thinking.

    I can't think of anything specific about OO that makes it poorly suited to parallel programming. There are languages whose nature is parallelism (again, Erlang), but that's usually accomplished by adding parallelism operators and messaging operators to a relatively "traditional" language. I don't see why you couldn't add and implement those constructs in a non-parallel language.

    I also shudder to think how a CS student is going to deal with parallelism using languages that don't make it a natural extension if they're learning to rely on those extensions in their first year.

    I gotta tell you, though, I really object to the use of Java as an introduction language for programming. Java is far from a shining example of any particular style of programming. It's not real OO because it's only single inheritance. It's not designed for parallelism. It doesn't have messaging built in. In short, Java is actually a pretty archaic and restricted language.

    --
    I do not fail; I succeed at finding out what does not work.
    1. Re:Anti-Modular? by MemoryDragon · · Score: 1

      I also shudder to think how a CS student is going to deal with parallelism using languages that don't make it a natural extension if they're learning to rely on those extensions in their first year.

      I dont shudder they should learn why some patterns lend themselves better to parallelism than others instead of learning some high level in the language baked tools.
      For instance if you give a student Erlang or Scala with a dedicated actors model I personally think they will never grasp why this high level construct works as pattern better than lets say a critical region - semaphore based model.
      The students need a deeper understanding than applying a few patterns. The entire segment of parallelism probably should be taught at the same time OO and other things are taught. I would not teach them in an introductory course where the emphasis should be basic algorithms.

    2. Re:Anti-Modular? by Anonymous Coward · · Score: 0
    3. Re:Anti-Modular? by jameson · · Score: 5, Interesting

      Yes, there has been much progress in module systems. The very Bob Harper mentioned there was involved in the design of the SML module system, which is often cited in the CS literature as `the' reference module system. SML achieves a level of isolation that is simply impossible to achieve in a language like Java or Smalltalk. in Java, any object you can still call `hashcode()' and `toString()' etc. on, and it's often possible for someone to subclass one of your internal classes and thereby break your intended module structure.

      In SML, you can confine types through (e.g.) the following signature:

      (* this is imperative code; a typical SML program focuses on functional code, but it's good enough for illustration purposes. *)
      signature STACK =
      sig
          type 'a stack (* 'a is a type parameter, so "'a stack" is what OO-land calls a `generic type' *)
          empty : unit -> 'a stack (* create fresh stack *)
          push : 'a stack -> 'a -> unit (* take a stack of 'a elements, take an element of type 'a, and plug them together *)
          pop : 'a stack -> 'a option (* "'a option" means that the operation may fail *)
      end

      You can then implement this stack in various structures that match this signature, and confine it in such a way that only the operations listed above are available. That is, you can't stringify stacks (there is no such operation listed there, though you can choose to add one), you can't compare them (again, no such operation), you can't `reflect' on them and you can't access their `protected' functionality by subclassing them, unless the stack implementer put a separate view of the structure into place for that particular purpose.

      Why is this good? Client code won't end up using features that you didn't want to expose. Why is it bad? If you forgot to expose something important, someone else will have to re-implement it. But that's your fault, then, not the language's fault.

      SML also allows you to build modules from other modules through something called `functors', but let's leave that for another time.

      Now, SML's modules have issues-- you can't have mutual dependencies between them (which does have advantages, too, though), and the question of how to integrate type classes (something you may know as `C++ concepts') is unresolved. But the concepts behind the module system are clear and powerful. So if you want to teach the concepts underlying modular software design, this is a vastly better choice than most other options out there. (I remember the Modula-3 module system being fairly good, too, but not quite at this level.)

      So, for teaching purposes I'd say Bob Harper is closely connected to the best system out there that has actual working implementations tied to it.

    4. Re:Anti-Modular? by Anonymous Coward · · Score: 0

      You can replace inheritance with encapsulation, so saying "programming language X is/isn't OO" based on whether it supports single inheritance/multiple inheritance/any inheritance at all is silly.
      As for the parallelism/messaging: not everything needs to be baked into the language syntax. There is a good case to be made for keeping a language as simple and restricted as possible. Easy to learn, implement correctly, reason about, ... One of the major downsides of C# is that for every new thing it adds you get new syntax that is inconsistent with previous syntax.
      If you need something extra, just link in a library that does what you want. You'll still get all the benefits, but without all the nightmare syntax.

    5. Re:Anti-Modular? by narcc · · Score: 1

      It's not real OO because it's only single inheritance.

      Meditate on that a while and I think you'll start to understand why CMU called OOP inherently anti-modular.

    6. Re:Anti-Modular? by Anonymous Coward · · Score: 0

      You seem terribly confused about modularity. It's not about being a dick and hiding everything you possibly can from someone, who then has to figure out how to do the one thing you didn't anticipate (in your case, how do I make a mapping of keys to stacks? Why, I create a new "signature" that has a stack and a hashcode! I wonder if anyone will ever need to do that?). It's DEFINITELY not about avoiding protected members (note: what you want is "private", which subclasses cannot get at. I do not understand how this is even vaguely related to modularity).

      Honestly, this reads like the screed of someone who took some CoSci 20 years ago and hasn't used it since. It certainly doesn't answer the question of why OOP is "inherently anti-modular" -- I'm with the grandparent in thinking that's some sorta non-sense from the anti-OO zealot (read "LISP/scheme/haskell zealot") camp.

    7. Re:Anti-Modular? by Anonymous Coward · · Score: 0

      Hear hear. I've recently started tinkering in Java in retirement after a 20 year break from programming.
      I was scandalized a) by the C-like syntax (bloody dangling semi-colons!) and b) by the absence of a Milner type-inference algorithm (!).

      I was very happy programming in SML and Turbo Pascal 25 years ago. For non-GUI programming, it doesn't feel like there's been *any* progress since.

      Is it too much to ask for a language with clean (LL1) syntax and a decent implementation of polymorphism? It's not rocket surgery.

    8. Re:Anti-Modular? by jeti · · Score: 1

      In classic OO-design, objects are often mutable and their statefulness can be non-obvious. This approach _is_ poorly suited for parallel programming. However, using an object-functional approach with immutable objects works very well.

    9. Re:Anti-Modular? by Anonymous Coward · · Score: 0

      Why is this good? Client code won't end up using features that you didn't want to expose. Why is it bad? If you forgot to expose something important, someone else will have to re-implement it. But that's your fault, then, not the language's fault.

      I would like to know how this is any different than a well designed OO class? Could not the exact same thing be said of a well designed and used OO system?

    10. Re:Anti-Modular? by ayvee · · Score: 2

      I can't think of anything specific about OO that makes it poorly suited to parallel programming.

      Search for the "inheritance anomaly". The academic CS community has known about it since the 80s, but no-one's yet found a satisfactory fix.

    11. Re:Anti-Modular? by Anonymous Coward · · Score: 0

      > I can't think of anything specific about OO that makes it poorly suited to parallel programming

      OOP as it is commonly understood involves mutable state which necessarily has to be synchronized among all threads for starters. Even within a single thread it bottlenecks because the lack of referential transparency means you can't reduce a computation involving an object to a single value once and then forget about it. Yes, there are immutable objects, but most languages supporting them still give you a highly restrictive notion of their types that doesn't lend itself to current trends in computing theory (scala is a standout here but there's only so far it can go).

      Interesting real-world programs often involve lots of state, sure. But it should be considered a special case, not the central idea.

    12. Re:Anti-Modular? by Anonymous Coward · · Score: 0

      >> and it's often possible for someone to subclass one of your internal classes and thereby break your intended module structure

      Only if:
      - you did not declare all your ctors as private
      - you do not know about all the uses of the final keyword.
      - your super class does not do any kind of dynamic type checking (I'm lookin at you damn SWT).

      By the way, the same can be said of C++ (except for the final keyword).

    13. Re:Anti-Modular? by Anonymous Coward · · Score: 0

      One of us thinks they know something that they don't actually know. What is it exactly that you say the modular system is doing that OO can't? Or is this thread about something else.

    14. Re:Anti-Modular? by Anonymous Coward · · Score: 0

      I think a critical difference is the willingness to mix objects with procedural code. I have some co-workers who really do seem brain-damaged because all they can think of and all they have ever known are C++ classes. They produce a very complex object model with everything "neatly" encapsulated that requires a lot of buy-in to their thinking mode to work with or write any new code against. They produce a large source tree with scattered dependencies on this object model. This has a few drawbacks. First, it means that these classes are not really replaceable, because the dependencies are everywhere. It becomes OO spaghetti. Which brings me to point two, that to someone unfamiliar to the totally enlightened object model the code is entirely unreadable. Lastly, if you ever want to add any functionality that the "enlightened" original author hadn't ever envisioned, the whole thing falls apart very quickly.

      I have definitely seen this hinder parallel programming -- I want to lock something and I only want to run very few instructions inside that lock, but thanks to the OO spaghetti I don't really know or can't affect what goes inside there. A number of these "enlightened" types also have huge dependence on techniques which creates poor performance in terms of cache-inefficient data-structures (pointers and dynamic dispatch everywhere) and what I can only describe as serious abuse of the heap. In a performance-critical or systems-y problem that can be really bad.

      I guess the way around this, for me at least, is to have the boundaries between components have well-defined, even if not object-oriented then very well close to it, interfaces. If the implementation wishes to depart from OO methodology, great -- the whole point as I understood it is that the implementation can do that and the caller doesn't have to care and if someone does care enough they can rewrite it and it's all replaceable. I just feel like sometimes people's mental approach to programming makes them slaves to objects, at a high cost to anyone who has to work with such a person.

    15. Re:Anti-Modular? by MemoryDragon · · Score: 1

      Mhh this just looks like we get enforced Interface definitions again.. Reminds me strongly on Modulat 2 (And c to some degree which was way more sloppy with.

    16. Re:Anti-Modular? by shutdown+-p+now · · Score: 1

      SML achieves a level of isolation that is simply impossible to achieve in a language like Java or Smalltalk. in Java, any object you can still call `hashcode()' and `toString()' etc. on, and it's often possible for someone to subclass one of your internal classes and thereby break your intended module structure.

      It's trivial to disallow subclassing in Java - just mark your class as "final".

      C++ and C# let you have more granularity by requiring methods to be explicitly marked as overridable by using "virtual" keyword. So there you can fully control how (and whether) a derived class can mess up with your contract and invariants.

      The existence of toString() and hashCode() on Object is a Java quirk, and in no way mandated by OOD. It is shared by some other languages simply because it is often convenient in practice; but a strict OO design would have separate interfaces, such as Stringifiable or Hashable.

      So far as I can tell, SML (and OCaml) modules can be directly mapped to C# generic classes, practically one-to-one - member types become nested classes, and operations become non-virtual methods. Java is the same, except that there you may run into problems stemming from type erasure.

      One thing that cannot be reproduced in C# with classes is passing functors - that is, functions over modules (from OCaml; I don't know enough SML to say if they are there or not) as parameters to other functors. In other words, higher-order polymorphism. In C#, you cannot pass a non-closed generic type as a type parameter to another type, which would otherwise be the analogous construct.

      Of course, C++ templates can do it all, and then also wash your dishes, though their relation to OOD is tenuous ~

    17. Re:Anti-Modular? by Anonymous Coward · · Score: 0

      Java has virtual. It just defaults to virtual and the opposite (no keyword in C#) is "final".

    18. Re:Anti-Modular? by shutdown+-p+now · · Score: 1

      Actually no keyword in C# is not the same as "final". With "final", you cannot have a method with the same signature in derived class at all. In C#, you can, you just won't get virtual dispatch for it (i.e. you can't write "override"). Even C# method-level "sealed" is not quite the same - it lets you close down the override that you have inherited, but derived class can still shadow it.

      Still, a very good point, as for the purpose of GP's argument ("it's often possible for someone to subclass one of your internal classes and thereby break your intended module structure") Java's method-level "final" is just as good - only requiring more discipline to consistently use it.

    19. Re:Anti-Modular? by Tablizer · · Score: 1

      I personally think that trying to be "modular" is over-rated. The problem is that real-world problems are inherently interlinked such that future changes have a good chance of breaking any lines you draw in the sand.

      Modules are artificial boundaries put in place to deal with complexity by the engineers and do not necessarily reflect long-term divisions in the domain (business) itself. Thus, engineers use modules to keep their sanity, not to directly better fit the problem at hand. They are a necessary evil, but not necessarily a final goal.

      At C2 I've kicked around the idea of "virtual modularity" where a module is whatever grouping you want to see at a given moment. Rather than use file systems, code would be stored in a database such that you can bring together whatever facets you want to see for a given issue.

      All security-related routines (or blocks) could be brought together, for example, or every SQL-related routine, or every routine having to do with Report 7, or every GUI-related routine, etc. Grouping would no longer be dictated by hierarchical files and file systems. As far as variable scope, that may need a rethink also.

    20. Re:Anti-Modular? by starfishsystems · · Score: 1

      It's interesting to recall that object-oriented programming originated in discrete-event simulation, which is all about parallelism.

      --
      Parity: What to do when the weekend comes.
    21. Re:Anti-Modular? by Anonymous Coward · · Score: 0

      Ummm, What is your point? SML has never and will never be used in "the wild". So it's just another waste of time, at least until someone can find a way to make some practical use of it. Stop trying to massage your ego and do something worthwhile.

  16. So much for getting a real job... by Anonymous Coward · · Score: 1

    ...because all Fortune 500 companies have critical infrastructure written in some object-oriented language, most probably Java or .NET.

    Now, I get "anti-parallel" what with manual synchronization, but Fork-Join (Java), Grand Central Dispatch (Objective-C) and whatever the C#/.NET equivalent is are supposed to go a long way towards solving these problems. Also, what's a real-world alternative used by large corporations? Clojure and Scala are by no means ready for enterprise use.

    Oh yeah, and how is OOP "anti-modular"? What programming paradigms are "pro-modular"? C certainly isn't, nor are most functional languages.

    This prof needs to get off his high horse and realize that his job is to prepare his students for the real world.

    1. Re:So much for getting a real job... by MemoryDragon · · Score: 1

      Clojure is the typical unreadable lisp hackjob. Scala however is pretty enterprise ready if you ask me, it is just on step up from a complexity point of view, you need some time to grasp all the additional stuff. All which stands between scala and the enterprise is their refactor full force mentality which means the apis are not entirely stable yet.
      Btw. someone mentioned OOP will go away in favor of functional programming. This is a wet dream of the functional guys, not even parallelism will do that instead most languages if not yet will evolve into multi paradigm languages. Actors and messages for instance are an elegant high level pattern of doing parallelism, is it anti oo, no. It just comes down to make your data structures immutable if you want to run parallel or run into semaphore hell.
      So where is the need here to go fully functional? And auto parallelism which has been proposed by the functional programming guys still is a wet dream.
      I think while Scala might not be the future, it shows clearly where things are heading. After all functional programming languages have their own set of problems like not allowing proper program structuring unless you introduce modular and/or OO concepts.

    2. Re:So much for getting a real job... by Anonymous Coward · · Score: 0

      > his job is to prepare his students for the real world.

      But it isn't. His job is to teach them Computer Science, not to train them in whatever tools de jour happen to be used in the industry. It's the industry's job to train them in tools, the university's job is to teach them fundamentals and science, i.e. the "right way", not the practical way.

    3. Re:So much for getting a real job... by narcc · · Score: 1

      Oh yeah, and how is OOP "anti-modular"?

      Why don't slashdoters find this obvious?

      What programming paradigms are "pro-modular"? C certainly isn't, nor are most functional languages.

      C lends itself to modular programming better than many modern OO languages.

      This prof needs to get off his high horse and realize that his job is to prepare his students for the real world.

      College isn't trade school. It's not the professors job to "prepare his students for the real world" -- it's his job to educate them. They're adults, not children.

    4. Re:So much for getting a real job... by Dails · · Score: 1

      This post is perhaps the least substantial I've ever seen. What you do THREE TIMES is take someone else's opinion, quote it, and then just go "No, that's wrong." No argument, no evidence, no wit, no though, nothing. Good work, you've convinced yourself and that's it.

    5. Re:So much for getting a real job... by TheLink · · Score: 1

      What's modular programming?

      If you're talking about using other people's code/modules/libs, I've found it fairly easy to use CPAN :).

      --
    6. Re:So much for getting a real job... by JonySuede · · Score: 1

      your talking about CMU, not a vulgar trade school , this prof job is first and foremost research, his second jobs is to teach computer sciences to student not to prepare them for the real world

      --
      Jehovah be praised, Oracle was not selected
    7. Re:So much for getting a real job... by guybrush3pwood · · Score: 1

      All which stands between scala and the enterprise is their refactor full force mentality which means the apis are not entirely stable yet.

      So, you think that's a minor issue, easy to fix... We should all code ahead and just wait for the fixes before going productive with our mission-critical systems, right? Good luck getting past SQA with that.

      --
      Perhaps I'm trolling, perhaps I'm not.
    8. Re:So much for getting a real job... by MemoryDragon · · Score: 1

      Actually it is an issue but this will resolve itself soon. If you need stable apis simply stay on the pure java side, you still can use actors closures etc... but you wont get immutable data structures for instance. The language itself is stable in a sense that the constructs there do not change new ones get added. The libraries are mostly stable but sometimes some apis are still prone to refactoring.
      The performance definitely is there as well as the scalability and stability of the language itself.
      I really would not count out scala from that perspective.

    9. Re:So much for getting a real job... by Eli+Gottlieb · · Score: 1

      OK, just noting, but Scala is really, really heavily functional. Type inference, parametric polymorphism, existential types (aka Scala wildcards), heavy usage of immutability, algebraic data types (aka case classes), pattern matching... these are all the characteristic features of the functional paradigm, and they all see heavy usage in Scala. I certainly appreciate and enjoy the OOP parts, of course, but I wanted to point out that Scala is much more a functional/object-oriented hybrid than you've given it credit for.

      Sorry, language geek who loves me some Scala.

  17. Re:so the wheels are coming of the OO band wagon t by maxwell+demon · · Score: 1

    However I wonder on the reasoning: OOP is anti-modular? How that?

    --
    The Tao of math: The numbers you can count are not the real numbers.
  18. real math; taking one (1) life =crime vs. humanity by Anonymous Coward · · Score: 0

    give US a minute here. this can't be right? isn't there justdenyable homicide? that's the old time religion? god's will? too many of us (by about 5 billion)? still foggy? in these complex times, it can be disgustingly enlightening to return to the teachings of the georgia stone trustdead freemason 'math'?

  19. What? by mr100percent · · Score: 0, Troll

    Seriously? It's a little early for April Fools.

    How will students learn the proper techniques to program for major OSes and platforms like Macs, iPhones (Objective-C), Android devices (Java), Microsoft's C#, Python, Perl, C++, and the dozens of OOP languages?

    1. Re:What? by Anonymous Coward · · Score: 3, Insightful

      The point of a university Computer Science course is not to train students in iPhone development.

    2. Re:What? by osu-neko · · Score: 3, Insightful

      Perhaps by not quitting after their freshman year, and learning some OOP?

      --
      "Convictions are more dangerous enemies of truth than lies."
    3. Re:What? by multipartmixed · · Score: 2

      Geez, I don't know.

      Most kids go to school for four years. Maybe they'll learn OOP in one of the other three?

      --

      Do daemons dream of electric sleep()?
    4. Re:What? by Thundersnatch · · Score: 1

      No, but CS departments are not supposed to be ignoring the real world either. The fact that almost my entire CS degree in the early 1990s was taught via C and Scheme provided me with a good theoretical foundation, which has indeed made me adaptable and served me well over the course of time. But such a focus can made finding that first job quite painful; I was somewhat lucky. When you don't have $LANGUAGE_OF_THE_DAY on your resume, it gets circular-filed before interview, even when you come from a top-15 undergraduate school. It makes me cringe, but I actually find myself doing this circular-filing myself, as my small company cannot absorb the pain and expense of training up a newly minted CS student on the toolchains, languages, and libraries that are actually in use in the business world.

    5. Re:What? by Anonymous Coward · · Score: 0

      If I were you I'd worry about being able to read a 5 line news summary instead of worrying about these poor students who are not taught how to program in perl. They will do just fine. You might not. So again: "removing the required study of O-O from the Freshman curriculum", and the mandatory http://en.wikipedia.org/wiki/Freshman

      But maybe you live in an alternate dimension where software companies do hire students who dropped off after their first year to do serious sofware development.

    6. Re:What? by Anonymous Coward · · Score: 0

      > When you don't have $LANGUAGE_OF_THE_DAY on your resume

      Then don't get into science in the first place, but some engineering course.

      > my small company cannot absorb the pain and expense of training up newly minted CS

      Then it shouldnt look for CS students in the first place, but for engineers. You want them to build stuff, not to do computer science.

      You're not saying that universities should tailor their courses to the requirements of small small companies because they are unable to bring up the expense themselves, are you?

      > that are actually in use in the business world.

      A scientist, if you really care about the real meaning of that word, should not care at all of what non-scientific businesses use. A university course focused on science is _not_ a job training. It's point is not to make you fit for working in the industry, but to make you capable of advancing the particular science. Getting boring, messy stuff done, translating customers' requrements into code is a completely different world, completely unrelated to any kind of science. It just happens at the moment that many CS students might end up in the industry. This in no way implies that independent universities should tailor their courses to the needs of the industry.

    7. Re:What? by Svartalf · · Score: 4, Interesting

      Ah, but in the same vein... CS classes aren't supposed to train them for the "real world" their first semesters. SERIOUSLY. Do keep in mind that CS is really a branch of theoretical mathematics (I should know...I studied CS and made the leap to Software Engineering...) and in order to grasp the actual study, you need more than just being trained for the "real world" (If you're wondering why I'm putting that in quotes, there's a substantive (dare I say a small majority...) of development work that just simply can't use Java or "pure" C++ and there's a nearly as large subset of programming that cause more problems than they're worth because it requires REAL skill doing the task in Java or "pure" C++ and many, many of the train wrecks are caused by someone using the wrong tool because they don't understand how the tool actually works- they were trained for the "real world" by their college in a CS or Software Engineering degree and they were ill prepared to make the right decisions.). Quite simply, you teach fundamentals first, then you branch off into functional and OO programming after the fact so they understand all the tradeoffs and actually can be theoretical mathemeticians or software engineers at their discretion.

      --
      I am not merely a "consumer" or a "taxpayer". I am a Citizen of the State of Texas
    8. Re:What? by Anonymous Coward · · Score: 0

      OOP is a pretty different philosophy for programming, why learn it one way then relearn it in another?

    9. Re:What? by vmfedor · · Score: 1

      Maybe if you had read the article, you would have seen this: " 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." It doesn't sound to me like CMU is interested in making OOP a mandatory area of study. It also doesn't sound to me like it's going to be taught at the junior or senior level either, based on the tone of that statement.

      --

      I like my women how I like my sugar.. granulated.

    10. Re:What? by multipartmixed · · Score: 1

      Are you actually suggesting that CS majors should only learn one way to write computer programs? Where did you go to school, Java U.?

      --

      Do daemons dream of electric sleep()?
    11. Re:What? by Gorobei · · Score: 1

      The fact that almost my entire CS degree in the early 1990s was taught via C and Scheme provided me with a good theoretical foundation, which has indeed made me adaptable and served me well over the course of time. But such a focus can made finding that first job quite painful; I was somewhat lucky. When you don't have $LANGUAGE_OF_THE_DAY on your resume, it gets circular-filed before interview...

      Weird. I circular file J2EE, XML frameworks, etc. For a fresh-out-of-school candidate, C + Scheme goes to the top of the good pile: one language that proves you known how a computer works, and one that deals in elegant abstractions.

      Then again, the interviewee had better actually have something to say about those languages. "Oh, I just used it in a course" does not count.

    12. Re:What? by Anonymous Coward · · Score: 0

      Why is that relevant? People who want to become software developers can take the software developer electives. This is a computer science program.

    13. Re:What? by tyrione · · Score: 1

      Seriously? It's a little early for April Fools.

      How will students learn the proper techniques to program for major OSes and platforms like Macs, iPhones (Objective-C), Android devices (Java), Microsoft's C#, Python, Perl, C++, and the dozens of OOP languages?

      After graduating in Mechanical Engineering I went into CS for a second degree. We learned C from day one in the mid-90s. Then we learned C++ and of course applied C or were offered to apply Fortran to Numerical Analysis and to see the varying differences. Unfortunately, we had no Objective-C. Had to learn that at NeXT. I agree that learning Java, C#, C++ are all bad decisions as part of one's first year in CS. Brian Cox was a wise man for chosing Object-ve-C as an OO version of C, not a better C with OO ala C++. With the emergence of C99 and soon C1x Apple has positioned themselves well with OpenCL and Objective-C with LLVM/Clang. At any rate, there is plenty of time for a CS major to learn OO. Applying theoretical mathematics with computation is far more valuable than becoming completely confused by a professor who doesn't know OOA/D, and a waste of money. They are better off learning that on their own.

  20. OOP in freshman year by janoc · · Score: 5, Interesting
    From the position of someone who used to teach basic programming courses to freshmen, I can only applaud the decision.

    Many kids coming to colleges these days do not have any programming experience or a very shaky one at best. Picking up concepts like classes, inheritance, the entire idea behind OO modelling is difficult if you are lacking basics such as how memory is managed, what is a pointer, how to make your program modular properly, etc. From the course description they are going to use a subset of C, I think that is a good starting basis for transitioning to something else (C/C++/C#/Java/... ) later on.

    What is worse, many of these introductory courses were given in Java - producing students who were completely lost when the black box of the Java runtime and libraries was taken away - e.g. when having to transition to C/C++. We are talking engineering students here who could be expected to work on some embedded systems later on or perhaps do some high performance work. Even things like Java and C# still need C/C++ skills for interfacing the runtime with external environment.

    I think it is a good move, indeed.

    1. Re:OOP in freshman year by DCheesi · · Score: 4, Interesting

      I agree that OO in the 101 course is a little much. You should really be focusing on simple programming techniques that a non-major might encounter when, say, writing a batch script or macro. I'm not sure about the second semester courses, though, since those are more for potential majors. Certainly at some point a CS major needs to be exposed to OO, but I don't think it needs to come first.

      As for understanding the infrastructure, I do think C/C++ get you closer, but in my experience it doesn't really click until you take some kind of computer architecture course or similar. For instance, I didn't *really* understand pointers until I understood how values and addresses are stored in memory.

    2. Re:OOP in freshman year by Anonymous Coward · · Score: 0

      From the position of someone who initially learned to program by participating in game creation in a top level OO-environment, I frown at the decision.
      Many kids coming to colleges these days do not have any programming experience or a very shaky one at best. Picking up concepts like memory managing, pointers, modularity, etc is frustrating as you don't have a good picture of the whole before you start delving into the nasty internals.

      To properly teach something, first you give a good idea of the whole, then you delve into details. That way you can see the usefulness of learning the 'boring bits' as you already know that they are important to the whole. This is something you can not grasp if you don't have proper view of the whole.

      It is a backwards move, indeed, and does not come as a surprise as CS-teachers are in the very bottom when it comes to being good educators.

    3. Re:OOP in freshman year by Anonymous Coward · · Score: 0

      I used to teach C++ and Java as intro courses, too. And it's true, you get a lot of inexperienced kids who don't know what pointers are, how memory works, etc. So you *teach* them. Show them how objects and simple variables behave differently. Explain how memory is allocated and why. Use your projects and examples to illustrate the way the high-level language interfaces with the system. That's the whole point of a programming course. You're using the language to introduce concepts, not showing them "how to write code," or you're doing it wrong.

    4. Re:OOP in freshman year by stefski66 · · Score: 3, Interesting

      What is worse, many of these introductory courses were given in Java - producing students who were completely lost when the black box of the Java runtime and libraries was taken away - e.g. when having to transition to C/C++.

      What is worse, many of these introductory courses were given in C/C++ - producing students who were completely lost when the black box of the C/C++ runtime and libraries was taken away (stl, libstdc++, libc, stdlib/malloc) - e.g. when having to transition to Assembly.

      What is worse, many of these introductory courses were given in Assembly - producing students who were completely lost when the black box of the Assembly runtime and libraries was taken away (OS virtual mem) - e.g. when having to transition to an OS-less embedded machine.

      What is worse, many of these introductory courses were given in Assembly on powerful CPU - producing students who were completely lost when the black box of the runtime support was taken away (CPU mem protecion, FPU) - e.g. when having to transition to a simpler CPU.

      Point is: whatever the language, it always come with support that you don't want to cope with in 95% of the case. Garbage collection (a la java) is one of these. Mem Protection, FPU, virtual memory (remember handles in MacOS before X ?) etc. I don't want to re-implement them, thanks.

    5. Re:OOP in freshman year by Sardak · · Score: 1

      I couldn't agree more. I recall my freshman year in a similar situation of sorts. They had gone the Java route as well, though I had never cared much for the language. I followed the traditional assembly, C, C++ path many years prior to attending.

      The class was incredibly easy for myself, but I couldn't help but notice how much the other students struggled to grasp the most basic aspects. As far as I could tell, these kids had no clue how a computer actually worked. Memory layouts, binary math, logical operations, all of these were completely foreign to them.

      One interesting in-class problem in particular stands out in my memory. We were posed the problem of taking a numerical grade in as input and printing out the correct letter grade. My solution involved a simple integer division and a switch block. Even the professor seemed a bit mystified. It was a sad day for me.

      I kind of felt bad for them, but at the same time, the professor slowed the class down to accommodate them, leaving me to get virtually nothing out of the class except learning a couple of minor differences between java and C++ syntax.

    6. Re:OOP in freshman year by bill_mcgonigle · · Score: 1

      Many kids coming to colleges these days do not have any programming experience or a very shaky one at best.

      This is quite a unique and interesting problem for computer science and engineering.

      Imagine coming to College and planning to major in English but having never written any papers. Or Mathematics and having only a background in basic arithmetic. Biology, chemistry, physics, etc.

      Perhaps this illustrates a failing of the secondary education level, or a need for a pre-freshman year for certain remedial (even if brilliant) students.

      Don't get me wrong, there's a place for teaching basic programing to majors from other fields where they need that sort of instruction, but to have a kid show up and enroll for a major with no experience at all really limits what can be accomplished in the major. This isn't 1968 - somebody showing up for a CS major ought to have already spent some time hacking up some python or ruby (etc.) in his spare time (and therefore probably already gets OOP).

      --
      My God, it's Full of Source!
      OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
    7. Re:OOP in freshman year by Antisyzygy · · Score: 1

      I didn't *really* understand pointers until I understood how values and addresses are stored in memory

      This was taught to me in my C programming class. I had a hard ass teacher though who gave difficult programming assignments.

      --
      That brings me to an interesting point, / . is just "the ramblings of socially-inept, technology-literate news-mongers".
    8. Re:OOP in freshman year by Locutus · · Score: 1

      why would you be teaching OOP techniques in a 101 level class? Just because Java was used does not REQUIRE you to teach all the features of the language related to OO. There are lots of things which go on at the method level (control, parameter passing, members/variables, etc ) which apply outside of OOP and are still required as basic knowledge. What's nice about the JVM is that it's still free, supports most all platforms, including embedded, and supports many languages. Using it means schools can provide liveCDs with an OS on it along with a completely configured environment for learning the course material. That one liveCD could be used with other languages on the JVM. But if the desire is to teach a particular platforms software and want their students tied to that platform and the tools for that platform by all means spread the FUD like Java being a poor choice for the entry level program class.

      From what I've seen, people who are pushing Functional Programming seem to be very tight with Microsoft in one way or another. Microsoft is spending lots of money pushing FP and as we've seen in the past, I would not doubt funding or perks from Microsoft are behind these latest motivations. I've seen a presentation which states that Microsoft likes FP because it can cheaply and easily leverage their development platform and runtime( MS Visual Studio and MS.NET ). maybe here: cufp.galois.com/2008/slides/SymeDon.pdf I remember in the early 90s when C++ cross platform frameworks were all the buzz and Microsoft legally and illegally attacked these vendors while creating their own incompatible and non-standard implementation they called Visual C++. Even back then, they wanted to keep procedural development methods close to the surface of their platform development tools. MFC was a shallow structure with Win32 very close to the surface and from what I read, COM and DCOM were also RPC based when others were doing deep abstractions and CORBA based distributed object systems. Microsoft seems to always go 180 out from the open market and their solutions always have ties to the Windows platform at the core of the solution.

      LoB

      --
      "Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
    9. Re:OOP in freshman year by Mitreya · · Score: 1
      What is worse, many of these introductory courses were given in Java - producing students who were completely lost when the black box of the Java runtime and libraries was taken away - e.g. when having to transition to C/C++

      I respectfully disagree. Based on my personal experience in undergrad - this is a good thing. Starting from Java lets you learn a programming language without simultaneously dealing with pointers and memory management. Once some programming skills are in place, transitioning to C/C++ and learning explicit memory management is actually easier.

    10. Re:OOP in freshman year by bobaferret · · Score: 1

      I couldn't agree with this more. Sure I'd had a number of classes with lots of C code in them require pointers and all of that fun stuff; but it wasn't until I had a computer architecture course where we had to model a basic computer with nothing but logic gates where everything clicked into place. Busses, Pointers, CPUs, Memory etc. Even how assembly to binary fit in the grand scheme of things. It all just clicked one day.

    11. Re:OOP in freshman year by Anonymous Coward · · Score: 0

      Yes, but someone who knows C/C++ will understand far more (same with assembly).

    12. Re:OOP in freshman year by ZombieBraintrust · · Score: 1

      This is a good point. Asking for a portfolio of work is not unheard of in other disciplines.

    13. Re:OOP in freshman year by euroq · · Score: 1

      Did you go to Georgia Tech by chance?

      --
      Just because the U.S. is a republic does not mean it is not a democracy. Democracy/republic are not mutually exclusive.
    14. Re:OOP in freshman year by MadKeithV · · Score: 1

      Point is: whatever the language, it always come with support that you don't want to cope with in 95% of the case. Garbage collection (a la java) is one of these. Mem Protection, FPU, virtual memory (remember handles in MacOS before X ?) etc. I don't want to re-implement them, thanks.

      Not knowing why all these support features are a good thing most of the time, but a bad thing some of the time, makes you a far worse programmer. The cry of the fresh-out-of-college Java programmers here at this C++ shop is "I shouldn't have to do memory management!". I take them on a tour of some custom allocators that sped up certain heavy core algorithms by an order of magnitude to show them that sometimes you do have to do memory management. Then I show them shared_ptr and scoped_ptr to show them that even hardcore C++-developers have admitted that most of the time you don't want to.

      But maybe I'm an anomaly - I enjoyed working with 64Kb windows into a several MB memory space back in the day - and I also enjoyed the day that flat memory addressing got rid of that requirement. These are all just problems to solve, and like you say, once I have learned about them and solved them once, I'm not going to solve them again. But I think everyone should tackle at least a subset of some of these low-level problems at least once in their career to appreciate how low-level things can get at times.

  21. Please enlighten me... by rasmusneckelmann · · Score: 1

    Can someone name me some actual real world, large software projects based on functional programming? (Projects led by university professors don't count.) Dismissing OO completely because it is "anti-modular and anti-parallel by its very nature" seems kinda strange to me. I write parallel and modular OO software all the time... Maybe it's just me misunderstanding something.

    1. Re:Please enlighten me... by lennier1 · · Score: 1

      So, because last month a car manufacturer sold more cars with an automatic transmission we no longer need to teach people to drive with a stick shift?

    2. Re:Please enlighten me... by multipartmixed · · Score: 1

      > Can someone name me some actual real world, large
      > software projects based on functional programming?

      Ericsson's stuff scales to billions-of-cell phones and is written in Erlang.

      --

      Do daemons dream of electric sleep()?
    3. Re:Please enlighten me... by unwesen · · Score: 1

      It's anti-parallel because it invites you to do this:

      struct foo {
          int a;
          int b;
      };
      foo asdf[200];

      Instead of:

      struct asdf {
          int a[200];
          int b[200];
      };

      The data layout in the first case does not exactly lend itself to efficiently processing all a in parallel to all b.

      As with most programming paradigms, if you understand their limitations, you can work around them. But they do suggest certain ways of structuring code that may not be good for all applications.

    4. Re:Please enlighten me... by Eponymous+Coward · · Score: 1

      Well, much of the cell telephone infrastructure runs on Haskell. That's probably the most famous example.

      In the end, it doesn't really matter. If you are teaching computer science, you pick the tools that are the best for that job. If the university has done a good job, when you graduate you will be able to use whatever tools are required for the job at hand.

    5. Re:Please enlighten me... by Shinobi · · Score: 2

      Major parts of the worlds telecom networks, for example the software in any of Ericssons equipment made in the last 15 years is written in Erlang. Nokia also uses a fair chunk of Erlang IIRC.

      Software upgrades for some equipment used by the Swedish Defense Force, to accomodate the Network-Centric Warfare model used functional programming to.

      I've used Erlang myself for semi-embedded networks that need to work in parallell.

    6. Re:Please enlighten me... by Anonymous Coward · · Score: 0

      One well known and widely used operating system is written in a functional programming language: Emacs. The language is of course LISP.

    7. Re:Please enlighten me... by Anonymous Coward · · Score: 0

      You're an idiot.

    8. Re:Please enlighten me... by unwesen · · Score: 1

      That's quite a statement. May I respond by saying that, apparently, you will never write efficient parallel code?

    9. Re:Please enlighten me... by itsdapead · · Score: 1

      Can someone name me some actual real world, large software projects based on functional programming?

      That's not the point - functional programming is more relevant to the theory of computing, formal analysis of algorithms, Turing, Lambda calculus and all that jazz. If I did a Computer Science degree, that's what I'd expect to be taught (and have to expend brain cells to understand) - you can pick up Java or Objective C from a book.

      --
      In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
    10. Re:Please enlighten me... by Svartalf · · Score: 2

      How about the Ericcson AXD301 ATM switching system, with over a million lines of Erlang?

      Or...how about RabbitMQ?

      Or...how about Facebook's Chat backend?

      There's quite a bit more than you think and the three I referred to were using Erlang- there's loads more with some of the other functional languages.

      --
      I am not merely a "consumer" or a "taxpayer". I am a Citizen of the State of Texas
    11. Re:Please enlighten me... by icebraining · · Score: 1

      Well, first that's not OOP.

      Second, I don't see how that's not a problem in any other language. For example, in an Haskell tutorial on haskell.org, they show you the type:

      type AssocList a b = [(a,b)]

      Which is basically the same as the first struct.

    12. Re:Please enlighten me... by v1 · · Score: 1

      I can see where anti-parallel may be arguable, (for event-driven OO languages for example) but anti-modular? I guess I'll have to rename all my modules after unicorns and other stuff that doesn't really exist?

      The scary thing about this sort of decision is the people who are making it should know better. Or they don't belong in the position. Was there a hostile takeover led by a bunch of PHB in suits?

      --
      I work for the Department of Redundancy Department.
    13. Re:Please enlighten me... by Anonymous Coward · · Score: 0

      Thank you for providing a genuine example appropriate to the discussion. I searched the whole damn thread and saw a lot of academics, but no examples. Yes, the example you give is clearly just to illustrate a point (seeing as either implementation works in any of the discussed languages), but the foo struct is more likely to be taught at an introductory level. I have both my bachelors and masters in computer engineering, and I can tell you that those sorts of subtle distinctions didn't become prevalent until my senior year. Granted, as an engineer my curriculum was not programming-centric, but still. The intro courses from freshman/early sophomore year were basically there to teach *all* engineers (mechanical, industrial, etc) the basics of program flow. Pointers were in the follow-up course, and were probably the first topic that really required an "a-ha!" moment to really get it. Assembly came later, when studying processors. I had a lot of fun in that lab, though my prof. for the actual theory portion was retarded. And holy shit I've rambled myself completely off-topic. In short, OOP is not the best choice for an introductory level course, as there is way too much groundwork that needs to be covered first.

    14. Re:Please enlighten me... by Gorobei · · Score: 1

      Can someone name me some actual real world, large software projects based on functional programming? (Projects led by university professors don't count.)

      Dismissing OO completely because it is "anti-modular and anti-parallel by its very nature" seems kinda strange to me. I write parallel and modular OO software all the time... Maybe it's just me misunderstanding something.

      If you consider 10-50MLOC large, then SecDb (Goldman Sachs) and Athena (JPMorgan) fit the bill.

      Neither are anti-OO, they are more functional programming with stateless OO. Oh, and they both measure "parallel" in megawatts.
       

    15. Re:Please enlighten me... by unwesen · · Score: 1

      Well, first that's not OOP.

      No, but reading helps. I did not say "this is OOP" anywhere.

      One of the unintended consequences of OOP is that data tends to be laid out in memory in a similar fashion as I showed, which in turn is less than ideal for efficient parallelization of some tasks. That's all I said.

      Second, I don't see how that's not a problem in any other language. For example, in an Haskell tutorial on haskell.org, they show you the type:

      type AssocList a b = [(a,b)]

      Which is basically the same as the first struct.

      It's a problem that exists with certain approaches to creating parallel software, and has little to do with your programming language of choice in the first instance. Well, some languages don't let you control the layout of data in memory, for better or worse, so your choice does play a role... but it's mostly a question of paradigms than languages.

      The OOP paradigm is problematic for parallel programming because it suggests the inefficient approach; it doesn't require you to write inefficient code, nor does it prevent you from writing efficient code. It's very unlikely that an inexperienced programmer will chose an approach that is in conflict with the paradigm they were taught, though.

    16. Re:Please enlighten me... by garethjrowlands · · Score: 1

      That's true but that's just because association lists are simple; they're rarely the most performant data structure.

      In data parallel Haskell, which is there the difference between the two representations matters, the compiler will use the more efficient representation while letting you write code against the more convenient representation. Not an easy task for the compiler - for example, they had to implement Type Families as part of the project. Haskell's parallel support isn't fully-baked yet but it's leading the way.

    17. Re:Please enlighten me... by icebraining · · Score: 1

      No, but reading helps. I did not say "this is OOP" anywhere.

      One of the unintended consequences of OOP is that data tends to be laid out in memory in a similar fashion as I showed, which in turn is less than ideal for efficient parallelization of some tasks. That's all I said.

      My point is that the struct you showed represents not a drawback of OOP, but an advantage that is lost in a procedural approach like that, which is the separation between the data layout and the code using the data structure, enabling changes to the data layout at any time without affecting existing code.

      It's a problem that exists with certain approaches to creating parallel software, and has little to do with your programming language of choice in the first instance. Well, some languages don't let you control the layout of data in memory, for better or worse, so your choice does play a role... but it's mostly a question of paradigms than languages.

      I gave an example in Haskell exactly because it follows different paradigm, being functional instead of OO.

      The OOP paradigm is problematic for parallel programming because it suggests the inefficient approach; it doesn't require you to write inefficient code, nor does it prevent you from writing efficient code. It's very unlikely that an inexperienced programmer will chose an approach that is in conflict with the paradigm they were taught, though.

      But I don't see how OOP suggests the inefficient approach any more than other paradigms.

    18. Re:Please enlighten me... by icebraining · · Score: 1

      But isn't that the whole point of OOP, with interface polymorphism?
      If I code against a List or Map, I can switch the implementation of the data structure without having change the rest of the code.

    19. Re:Please enlighten me... by unwesen · · Score: 1

      No, but reading helps. I did not say "this is OOP" anywhere.

      One of the unintended consequences of OOP is that data tends to be laid out in memory in a similar fashion as I showed, which in turn is less than ideal for efficient parallelization of some tasks. That's all I said.

      My point is that the struct you showed represents not a drawback of OOP, but an advantage that is lost in a procedural approach like that, which is the separation between the data layout and the code using the data structure, enabling changes to the data layout at any time without affecting existing code.

      We're talking about parallelism here. You might have a point when talking about OOP in general, but when it comes to parallelizing code, this can be a huge drawback to efficiency. That's all I said, that's all I care about for the purposes of this conversation.

      It's a problem that exists with certain approaches to creating parallel software, and has little to do with your programming language of choice in the first instance. Well, some languages don't let you control the layout of data in memory, for better or worse, so your choice does play a role... but it's mostly a question of paradigms than languages.

      I gave an example in Haskell exactly because it follows different paradigm, being functional instead of OO.

      Indeed. Nobody says that other paradigms might not have similar problems. But a purely procedural approach wouldn't necessarily.

      The OOP paradigm is problematic for parallel programming because it suggests the inefficient approach; it doesn't require you to write inefficient code, nor does it prevent you from writing efficient code. It's very unlikely that an inexperienced programmer will chose an approach that is in conflict with the paradigm they were taught, though.

      But I don't see how OOP suggests the inefficient approach any more than other paradigms.

      It suggests that you think of your data in terms of conglomerates of related data items (structures) first, and consider collections (lists, arrays) of such conglomerates second. Many times, parallelization is best achieved by picking these apart into one or more collections of non-conglomerated data. OOP practically forces you to think in terms of conglomerated data, though.

    20. Re:Please enlighten me... by unwesen · · Score: 1

      See, I don't even mind whether assembly or OOP in a high level language gets taught first. Either way, it helps to learn both to master all aspects of programming.

      Personally, I'd prefer to start with assembly, but I've met plenty of people who were sufficiently confused by higher level programming languages that that wouldn't have been useful for them. And to be fair, plenty of programmers will never need to understand assembly, but still earn a decent living and contribute to the state of the art in other ways.

      It really depends what you want to achieve. Get many people ready to earn a living? Might as well start with OOP. Get programmers to as high a level of understanding as possible? Probably start with assembly, then.

    21. Re:Please enlighten me... by unwesen · · Score: 1

      I probably should've posted this straight away, but I would recommend two pieces of reading:
      - http://lwn.net/Articles/250967/ (all parts) gives a good idea of all the sorts of effects that memory layout can have on your program's performance, and what you can do about it (to the degree that you can).
      - http://www.slideshare.net/naughty_dog/multiprocessor-game-loops-lessons-from-uncharted-2-among-thieves specifically speaks about how to improve parallel processing efficiency by (amongst other things) doing what I wrote about above.

      Linking > repeating :D

    22. Re:Please enlighten me... by garethjrowlands · · Score: 1

      It may be the point but it doesn't work particularly well for the scenario we're talking about. Look again at the original example below. Sure you can make a CollectionOfFoos class but it's not the most natural thing. Introducing that class is likely to have a significant impact on your code.

      There's a reason the PS3 programming guides advise against OO.

      class Foo {
              int a;
              int b;
      };
      Foo asdf[200];

      Instead of:

      class Asdf {
              int a[200];
              int b[200];
      };

    23. Re:Please enlighten me... by guybrush3pwood · · Score: 1

      The data layout in the first case does not exactly lend itself to efficiently processing all a in parallel to all b.

      Please explain.

      --
      Perhaps I'm trolling, perhaps I'm not.
    24. Re:Please enlighten me... by unwesen · · Score: 1

      Let's look at a single thing to do first and ignore parallel.

      These days processors are incredibly fast at executing instructions on register values. The bottleneck isn't CPU any longer, it's loading data from main memory into the CPU caches for the most part. That's simplifying things a lot, but let's keep it at that.

      With the example I've given, you've got two ints per struct, and a reasonably large number of these structs. The 200 I've given was just an example. You've also got a problem that involves only one of those ints, say, finding the highest in your set. Because you're loading both ints into the cache, but only need half of them, you'll be forced to perform twice as many loads than if you had two arrays of ints.

      Now add a second problem; say, calculate the sum of the other ints. The crucial part is that one of these problems may take longer than the other to execute. That means, that at the point where one piece of code is done with the contents of a cache line, it'll try and replace it with the next chunk of data. The first problem, however, still needs the first chunk of data, so will cause this to load into cache the next time it executes. Instead of having "just" twice as many loads as you need, you might end up having hundreds.

      This is not an unlikely scenario. The CPU caches will get filled with data from main memory as it's requested, i.e. when the first int is accessed for solving the first problem. When the CPU switches to processing the second problem, the data is already in cache and not loaded into a separate cache page. Unless the problems are solved at *exactly* the same speed, i.e. both problems will cause the next page of data at the same time, you *will* run into this issue.

      Keep the two data sets in two separate arrays, and you'll use two cache lines. But they can be flushed and re-filled independently from each other, leading to fewer loads.

      This sort of problem doesn't occur for every type of parallelization, mind you. If you try to parallelize by offloading two pieces of work to two different machines, it's not an issue. If you've got a single problem to solve that covers both ints, you don't have that problem - you can still paralellize, and parallelize pretty well, by running two hardware threads that each process half of the data set. And so on.

      The point is that by getting too used to thinking in terms of arrays of structs instead of several separate arrays, you pretty much prevent yourself from solving certain parallelization problems efficiently. It's not that this *must* be bad, it's that it *can* be bad. But if you think in terms of arrays of structs, you're unlikely to even know.

    25. Re:Please enlighten me... by guybrush3pwood · · Score: 1

      Nothing, absolutely nothing in this:

      struct asdf {

      int a[200];

      int b[200];

      };

      is telling the compiler "i'm going to use these two arrays in different cores, so be so kind to generate assembler code to handle this efficiently". So, it's a compiler problem, not an OOP problem. Two different levels of abstraction.

      On the other hand, I have a problem with this statement in the context of the current discussion:

      The bottleneck isn't CPU any longer, it's loading data from main memory into the CPU caches for the most part

      Who cares? A worse bottleneck is reading from a RDBMS. The processor's cache is orders of magnitude apart if you think in terms of levels of abstraction.

      --
      Perhaps I'm trolling, perhaps I'm not.
    26. Re:Please enlighten me... by unwesen · · Score: 1

      Nothing, absolutely nothing in this:

      struct asdf {

      int a[200];

      int b[200];

      };

      is telling the compiler "i'm going to use these two arrays in different cores, so be so kind to generate assembler code to handle this efficiently".

      Nothing to do with assembler code, everything to do with data layout in memory, how the data is loaded into cache lines, and whether or not multiple hardware threads accessing the same cache line will be causing lots of cache invalidation or not.

      So, it's a compiler problem, not an OOP problem. Two different levels of abstraction.

      No, it's not a compiler problem. The C/C++ standards mandate certain things that make this unavoidable; structs must be contiguous bits in memory, and adjacent array elements must be adjacent in memory. The rest follows from there (and an understanding of cache architectures).

      On the other hand, I have a problem with this statement in the context of the current discussion:

      The bottleneck isn't CPU any longer, it's loading data from main memory into the CPU caches for the most part

      Who cares? A worse bottleneck is reading from a RDBMS. The processor's cache is orders of magnitude apart if you think in terms of levels of abstraction.

      Entirely dependent on your problem. If reading from RDBMS is your problem, then this discussion is of little or no worth to you. Just because you can't use information doesn't make it wrong, though. There are plenty of people in the world to whom this type of optimization matters.

      The CS courses are presumably supposed to impart knowledge about what types of problems exist with parallelization. The same underlying problem, for example, also exists for distributing work to multiple CPUs, or to multiple machines. MapReduce, for example, is pretty much the same principle applied at a much higher level of abstraction - and probable about the level of abstraction that matters to you if you see RDBMS as the major bottlenecks in your experience.

    27. Re:Please enlighten me... by guybrush3pwood · · Score: 1

      You still haven't explained how your example justifies that OOP is anti-parallel. And C/C++ is not the entire scope of OOP. To summarize:

      1. You said what a given hardware might do if you ran a very particular code on a certain program structure.
      2. I said that hardware did that because the compiler translated the code into assembler code which is interpreted by the hardware in such a way; so changing the compiler changes the hardware behaviour (that's the whole point of programming, isn't it?).
      3. None of this has anything to do with OOP being or not anti-parallel

      I think you're trying to impress all of us with your supposed in-depth knowledge about processors' architecture. I'm still waiting to be impressed.

      --
      Perhaps I'm trolling, perhaps I'm not.
    28. Re:Please enlighten me... by unwesen · · Score: 1

      I think you're trying to impress all of us with your supposed in-depth knowledge about processors' architecture. I'm still waiting to be impressed.

      And I considered for a moment to actually try and clear any misconceptions expressed in your latest comment, and then realized that you're not actually interested. You're just a troll.

    29. Re:Please enlighten me... by guybrush3pwood · · Score: 1

      A troll? Come on, no need to be so sensitive.

      I came to a conclusion after reading your three rather lengthy posts. All of them, in my opinion, missed the point, despite the possibility that you might be expressing some quite correct concepts. Thus, I concluded you were anxious to share your knowledge, even if misplaced.

      Perhaps my last remark was not the most polite one. My sincere apologies if I offended you.

      --
      Perhaps I'm trolling, perhaps I'm not.
    30. Re:Please enlighten me... by unwesen · · Score: 1

      Apologies accepted, and my apologies to you. In my experience, trolls wouldn't reply to to this sort of bait, I must have been wrong.

      I don't know what sort of point I was supposed to have missed, really, given that I started this sub-thread with an example; if anything - and yes, I'm nitpicking now - everyone else in this sub-thread is missing my point, pretty much by definition.

      So let's get back to the point I was trying to make: efficient techniques for parallel programming are all about how you subdivide your data. This is completely language-independent. For a totally high-level approach to subdividing data (mostly) efficiently, look to MapReduce.

      What you would do with MapReduce in a simple case on a single multi-core machine would be to divide your data set into N segments, where N is the number of threads you want to run in parallel. Take MapReduce to the level of networked machines, and the concept remains the same, except that you've got M machines to each process a chunk of the overall data (and maybe in addition, on each machine, you further subdivide the data into N segments).

      The problem with talking about MapReduce in this context is that at this high level of abstraction, you might as well use OOP, too. It's a good example for illustrating the data partitioning problems that exist around writing parallel code, but not a good example for how OOP might stand in the way of efficient parallel execution.

      I figured the best example would be one that takes the subdivision problem to the lowest level, which invariably means breaking down the problem to how efficiently a CPU's cache protocol handles data, based on how it's subdivided in memory. Using C++-ish code as an example made sense, as C++ is a language where you *can* influence the data layout, and where you *can* lay out data in a fashion that's typical to OOP.

      As far as I am concerned, OOP is inherently great at a number of things, and at first glance none of them impact parallelism in any way. All of these things - encapsulation, access control, inheritance, etc. - have a side-effect, though, because the very concept requires you to lump data together that's conceptually related, whether or not it's used together (You might feel like rephrasing that as "the very concept IS to lump data together", but that would ignore some OOP features). In that sense, OOP is inherently about preferring some data layout in memory over another, whether you think about it in that way or not.

      The downside of this data layout is that it makes it harder to split one set of relevant data off from another, that is, it makes *efficient* subdivision more difficult. Whether or not that's the case of course depends on the problem you're trying to solve; the assumption must be that you want to solve a problem involving one subset of your objects' data members in parallel to another problem involving a disjoint subset of data members.

      You're arguing that whether or not data is, in fact, laid out in memory in a "bad" way is dependent on the language or compiler. To the degree where we're speaking about C or C++, that's just not the case - but of course clever enough compilers for other OOP languages might exist. This is something I doubt, though I would love to be proven wrong, with code to read. The reason I doubt it is primarily because it's pretty damn hard without marking your data as "please parallelize", which none of the programming languages I know/use provide a (portable, standardized) mechanism for. Never mind whether they're OOP. Someone mentioned Haskell here; I don't know the language well enough to know whether or not such a mechanism exists.

      Does this explain things better?

    31. Re:Please enlighten me... by slim · · Score: 1

      LISP is not a pure functional language, and it seems that a lot of real LISP code uses the non-functional aspects.

  22. Comment removed by account_deleted · · Score: 5, Funny

    Comment removed based on user account deletion

  23. Re:so the wheels are coming of the OO band wagon t by oliverthered · · Score: 2

    I've found the same problem with SQL and prolog (of that was object prolog, scrub that)

    --
    thank God the internet isn't a human right.
  24. This is just about as dumb... by unwesen · · Score: 1

    ... as people claiming OO is the only way forward out of the mire of procedural programming.

    Tools, jobs, you know the drill *sigh*

    1. Re:This is just about as dumb... by osu-neko · · Score: 1

      Perhaps one could consider the possibility that OOP isn't the right tool for the job of teaching freshman students basic, introductory computer science concepts.

      Honestly, it's a bit shocking to me to hear that any colleges these days try to teach OOP before anything else. Wrong tool for the job, indeed!

      --
      "Convictions are more dangerous enemies of truth than lies."
    2. Re:This is just about as dumb... by Svartalf · · Score: 1

      I would have to concur. OOP is the wrong thing to teach initial concepts with. The move to OOP was done because the schools forgot that they're supposed to teach things like CS, not do like a technical school and teach them a trade (Claims of OOP being in the "real world" and therefore you need to teach them at the beginning is falling into that trap of thinking about how to teach the subject...).

      --
      I am not merely a "consumer" or a "taxpayer". I am a Citizen of the State of Texas
    3. Re:This is just about as dumb... by MadKeithV · · Score: 1

      Your last line is totally on, and yet you seem to miss the point of CMU's move (at least as I perceive it). OOD/OOP is no silver bullet. Nothing is. It's high time that teaching institutions stop creating this perception that OOD/OOP supersedes functional programming or structured programming. OOD/OOP is just another tool in the toolbox, and a pragmatic developer should know all of the tools.
      It's also true that the landscape has changed quite significantly in the past 5 years or so, with the rise of multi-core. Some tools that were cutting-edge before are now not quite so perfectly suited to common tasks. It's not that different from when OOP started to become "in vogue", and the C-developers were saying "we've been doing this for years with function pointers" or something along those lines.

      "This too, shall pass"

    4. Re:This is just about as dumb... by unwesen · · Score: 1

      Look elsewhere in the comments, there's a longer thread where I've commented :)

      I'm neither opposed nor in favour of dropping OOP, personally. As far as I am concerned, a good CS graduate must know OOP. A good software engineer must know OOP. But whether or not they *start* with OOP is an entirely different question... because to be good, they also must know a lot of other stuff, which will include other programming paradigms.

      What's dumb to me is to drop OOP completely. The principles of OOP can be taught to someone who understands programming in a matter of a few lessons. They won't come out of that being *good* at OOD/OOP, but they'll understand what it is. You can build on that in a sophomore course, much like CMU suggests.

      Besides, the "being good" part happens after formal education anyway...

  25. It's about time! by Kufat · · Score: 1

    Thank goodness a university has finally decided to teach a curriculum based on what its professors like, instead of adhering to silly concerns about what might be useful in the real world. Students can rest assured that they'll get a first class CS education, and--sorry, what was that? Jobs? You want to get a job? What the fuck do you think this is, DeVry?

    Now go finish your LISP homework!

    1. Re:It's about time! by MemoryDragon · · Score: 1

      Speaking of, I recently read the message of someone who was prayising lisp as the perfect choice of being able to express algorithsm. Speaking of boneheaded that is. This guy probably never worked with languages like pascal which really give strong emphasis on clean syntax for expressing algorithms instead he has been drowning his brain constantly in parentheses.

    2. Re:It's about time! by Anonymous Coward · · Score: 0

      Speaking of what?

      Silly troll, there are no parentheses. What, by the way, is prayising? Something sweet put on messages to a deity? And, seriously, Pascal?

      Until you've expressed Knuth's algorithms in Lisp, you haven't seen true beauty. Enjoy your ignorance.

    3. Re:It's about time! by Anonymous Coward · · Score: 0

      Actually, LISP is a good language to express algorithms.

      It is an implementation of Lambda Calculus, which is a branch of mathematics used to analyze algorithms.

    4. Re:It's about time! by whovian · · Score: 1

      Thank goodness a university has finally decided to teach a curriculum based on what its professors like, instead of adhering to silly concerns about what might be useful in the real world. Students can rest assured that they'll get a first class CS education, and--sorry, what was that? Jobs? You want to get a job? What the fuck do you think this is, DeVry?

      Now go finish your LISP homework!

      IANACS (computer scientist) but wanted to comment on your jobs training comment. The language that's being tossed around in my little corner of my university has to do with "training the next generation of workers." That's always bothered me a bit because it suggests we may be starting to pick up one of the community colleges' role. Perhaps it's based on realities of current and future funding, as our state seems to be planning to link part of its higher educational funding to performance outcomes. Anyway, CMU's stance seemed bold, but it is consistent with their being an academic institution.

      --
      To-do List: Receive telemarketing call during a tornado warning. Check.
    5. Re:It's about time! by Anonymous Coward · · Score: 0

      If you want to get a job programming, go to DeVry, then move to India. If you want to have a career, learn about Computer Science (you know, the hard stuff: algorithm design, computer architecture, et cetera) and get a job managing a gas station. Hint: that was both sarcastic and true, because there are few programming jobs for code monkey wannabes and even fewer career slots for designers.

    6. Re:It's about time! by Anonymous Coward · · Score: 0

      Having gone through a CS curriculum back in the early 90s at CMU, I can attest that the focus there was never on programming *in* a language, but rather using languages as tools to explore CS. We would routinely switch languages between classes, and even in a single class. As a result I learned to program in C (a typical procedural language,) ML (a purely functional language), an OO version of Lisp (an interesting combination of functional and OO), some Assembly, and probably a bunch of minor ones I'm forgetting now.

      In the "real" world, programming languages change, but the concepts tend to stay pretty similar. So my first job that happened to use C++, I just learned it on the way (a lot like C with some OO thrown in of course). Templates were a lot like ML's strong typing... Java then was much like C++... XLST, well a functional language at its core... and so forth.

      Whatever tool they want freshman to learn on is almost irrelevant to whatever language you think is "useful in the real world"... There are tons of other classes along the way to give experience in that (such as the classes where we were modifying the RT-Mach kernel)...

    7. Re:It's about time! by macaddict · · Score: 1

      Thank goodness a university has finally decided to teach a curriculum based on what its professors like, instead of adhering to silly concerns about what might be useful in the real world. Students can rest assured that they'll get a first class CS education, and--sorry, what was that? Jobs? You want to get a job? What the fuck do you think this is, DeVry?

      I know, right? Those arrogant fools, denying CMU students the chance to ever learn OOP! They should at least offer a sophomore-level course in object-oriented design methodology!

      And also a course for reading comprehension skills.

    8. Re:It's about time! by Anonymous Coward · · Score: 0

      Huh? He's right. A Lisp program essentially is the parse tree of your program. If you can't express it there, you can't express it at all (should be obvious since other languages first translate to that very parse tree). Also, just having the parse tree in front of your eyes is better than first having to translate something else to it inside your head.

    9. Re:It's about time! by Anonymous Coward · · Score: 0

      15 years ago people would be saying the same thing about OO. Actually, people still do say that about OO.
      Dog fido = Dog.new();
      fido.bark();
      What does programming have to do with stuff like this? What kinds of real-world problems does this solve (unless you're writing a game involving pets)?

    10. Re:It's about time! by mbkennel · · Score: 1

      "Actually, LISP is a good language to express algorithms."

      Yes, if you're a compiler and not an instance of homo sapiens.

      When humans write cognitively dense material describing algorithms to other humans (journal articles), does it look remotely like LISP?

      No.

      The nature of languages which humans find to be easier to understand is not arbitrary---it is influenced by neurobiology. The modes of expression which humans naturally use between one another are more likely to be idomatic (nearly axiomatically so) than ones which aren't.

    11. Re:It's about time! by badkarmadayaccount · · Score: 1

      Algorithms are beyond syntax, lisp has less syntax than pascal, and is much more flexible in expressing complicated ideas than Pascal.

      --
      I know tobacco is bad for you, so I smoke weed with crack.
  26. They are right by aaaaaaargh! · · Score: 1

    The decision is sound, OOP mostly leads to bloated software, mind-bending and partly just plain stupid object-oriented constructions, and strongly encourages mutation. In a sense it's even based on the idea of mutating objects. Because of the dramatic increase in concurrent programming in the future strictly functional programming will be much more important than OOP. I understand that OO enthusiasts will not like to hear this, and of course OOP also has its good sides, but it is highly overrated. A good module system + immutable structures is much more important than classes and objects. If you use only immutable structures many operations with these structures can be parallelized massively without a single change to the code.

  27. This is a gOOd thing. by v(*_*)vvvv · · Score: 2

    Programming is about utilizing paradigms. Not being stuck in one. OO is just another layer on top of anything else. It is a set of rules that one can follow in any language. Some languages have it built in for convenience, but it is also an inconvenience for implementations where it is not so optimal.

    There was definitely a moment when OO seemed to be some new paradigm in programming, but no, it is merely a tool, and CMU put it in its rightful place.

    1. Re:This is a gOOd thing. by benjamindees · · Score: 1

      That's my view. OO encompasses a bunch of useful concepts. It's important to learn. But it's overused in places where it shouldn't be. Freshmen should probably start with something more basic and not be subjected to a bunch of needless stupidity like constructors and overloading and inheritance until later.

      --
      "I assumed blithely that there were no elves out there in the darkness"
  28. Thank you for doing that by Anonymous Coward · · Score: 0

    This is a most welcomed initiative I would think.
    First to address some comments, OO programming is not removed, but just shifted to the sophomore level. As a CS professor myself I get to appreciate the diversity of all students, and the different backgrounds they come from. In first year most of them have never programmed anything (of course there are also
    occasional geeks, which can actually make the job interesting by asking more advanced questions) but for someone who had little experience in programming, starting
    straight with OO is an abomination. First teach what a variable is, what a function is. What are side effects, recursion (very important). What are the basic data structures (stacks, queues, heaps, maps, and their implementation both persistant with trees, AVL and so on or mutable based on arrays, hash tables etc...).
    Even more important talk about data-types, proper prototyping of functions, use a statically strongly typed language which enforces a strict typing discipline (and no you can't add strings and integers and no you can treat an integer as a boolean, not when you are just starting to program).
    Then teach modular design, encapsulation, interfaces, modules, compilation unit. Teach the compilation process, linking process and basically how a program 'runs'.
    Then ONLY you should teach about OO design (which is really not that bad and of course should be taught). OO relies on more complex concepts -- at least if you teach it properly -- (Classes, objects, methods, message passing, dynamic dispatch, overloading inheritance). It's just an heresy to teach what a 'method' is to students who barely know what a function is (both at the mathematical and programming language level).
    And believe me once you know the basic concepts function, types, modules and so on, understanding OOP and actually using it efficiently when it's the best tool is much much easier.

  29. Re:so the wheels are coming of the OO band wagon t by Doc+Ruby · · Score: 1

    No, you have terrible reading and logic skills, because what I summarized is exactly what the post to which I replied actually means.

    --

    --
    make install -not war

  30. freemason kids traumatized by native teachings by Anonymous Coward · · Score: 0

    we're not the only (chosen) ones? the natives must have made some mathematical errors? let's see, wasn't that problem taken care of before? & before that. let's check the georgia stone, all the answers are there? not to fret then, the #s never lie?

    the GSM get their tiny (ie; selfish, stingy, eugenatic, fake math) .5
    billion remaining population, & the money/weapons/vaccine/deception/fake
    'weather' alchemist/genetically altered nazi mutant goon exchangers, get
    us? yikes

    the 'fog' is lifting? more chariots will be needed?

    with real math, even being remotely involved in lifetaking (paying for, supplying endless ordinance) is also a crime against ALL of the world.

    ALL (uninfactdead) MOMMYS......

    the georgia stone remains uneditable? gad zooks. are there no chisels?

    previous math discardead; 1+1 extrapolated (Score:mynutswon; no such thing as one too many here)

    deepends on how you interpret it. georgia stone freemason 'math'; the
    variables & totals are objective oriented; oranges: 1+1= not enough,
    somebody's gotta die. people; 1+1=2, until you get to .5 billion, then
    1+1=2 too many, or, unless, & this is what always happens, they breed
    uncontrolled, naturally (like monkeys), then, 1+1=could easily result in
    millions of non-approved, hoardsplitting spawn. see the dilemma? can
    'math', or man'kind' stand even one more League of Smelly Infants being
    born?

    there are alternative equations being proffered. the deities (god, allah,
    yahweh, buddha, & all their supporting castes) state in their manuals that
    we needn't trouble ourselves with thinning the population, or being so
    afraid as to need to hoard stuff/steal everything. chosen people? chosen
    for what? to live instead of us? in the case of life, more is always
    better. unassailable perfect math. see you at the play-dates, georgia
    stone editing(s) etc... babys rule.

    exploding babys; corepirate nazis to be caged (Score:mynutswon; hanging is too good for them?)

    there are plans to put them, (the genetically, surgically & chemically
    altered coreprate nazi mutant fear/death mongerers (aka47; eugenatics,
    weapons peddlers, kings/minions, adrians, freemasons etc...)) on display
    in glass cages, around the world, so that we can remember not to forget...
    again, what can happen, based on greed/fear/ego stoking deception.

    viewing/feeding will be rationed based on how many more of the creators'
    innocents are damaged, or have to be brought home (& they DO have another
    one) prematurely.

  31. Victory for Tablizer? by Compaqt · · Score: 2

    Longtime Slashdot readers know and either love or hate user "Tablizer" .

    He has a website detailing his objections to object-oriented programming, while arguing for "table-oriented programming". It has been a fruitful source of flamewars over the years.

    So, is this a vindication for Tablizer? Tablizer, what say you?

    --
    I'm not a lawyer, but I play one on the Internet. Blog
    1. Re:Victory for Tablizer? by togofspookware · · Score: 1

      Hmm, I've often thought that while OO is good for encapsulating low-level operations, relational database tables and SQL were a much more natural way to model and query data. I just started reading, but his table-oriented-programming page hints at this problem under 'No Ceilings'. I'm not yet sold on his idea of Control Tables, but then I haven't read that part, yet. Maybe he's onto something.

      --
      Duct tape, XML, democracy: Not doing the job? Use more.
    2. Re:Victory for Tablizer? by narcc · · Score: 1

      While I'm not sold on TOP, Tablizer has a lot of interesting things to say. I very much enjoy his contributions to c2.com

      I'd say he's vindicated here.

    3. Re:Victory for Tablizer? by Anonymous Coward · · Score: 0

      No, not really. He's arguing that OOP poorly wraps relational database entities. That may be true, but a lot of the grunt work involved in doing that is often taken away from the programmer by the library developer. It's not something we really think about a whole lot.

    4. Re:Victory for Tablizer? by cratermoon · · Score: 1

      Bryce Jacobs (aka Tablizer/TopMind) would only be vindicated here if he ever demonstrated knowledge of the domains over which CMU's rejection of OOP applies: parallelism and synchronization. All his experience and arguments rest on a model of programming (if I can deign to grace his ramblings with the word 'model') that has grown, ossified, rotted, and fossilized out of the 1980s-era dBase & FoxPro systems.

      Given that, and Jacobs' consistent refusal to familiarize himself with even the basic CS 101 concepts of programming, on the grounds that such ideas are just dogmatic opinions, any discussion of the research around inheritance, subclassing, objects, and parallel programming would be so far out of his league that it's insulting to the researchers and practitioners doing the work to even suggest that Jacobs deserves the slightest mention in association with CMU's decision.

      "He who knows not and knows not that he knows not is a fool"

    5. Re:Victory for Tablizer? by Anonymous Coward · · Score: 0

      What the fuck nigga, a geocities page?

      And without /longnumber/NameOfSomeCityInTheWorld/ in the URL?

    6. Re:Victory for Tablizer? by Anonymous Coward · · Score: 0

      Is the Tablizer the usenet Topmind?

    7. Re:Victory for Tablizer? by Anonymous Coward · · Score: 0

      After skimming that website, it's painfully obvious that the guy has never worked with a large team, or in a production environment. Anybody who's touched Spring or done any real unit testing knows why "multiple implementations" are useful, but the guy just writes this part of OO off as "I've never seen a need for it, and no manager would sign off on it". What a load of nonsense.

    8. Re:Victory for Tablizer? by Anonymous Coward · · Score: 0

      I've been casually reading /. since 2003, which must not be longtime; never heard of him.

      I made it about a page down his table-oriented overview and saw this.

      For example, most languages have special math-handling syntax for dealing with mathematical equations. Example:
      a = (b * c) + e + f
      Now, if your only choice was to use API's, then you would have to use syntax like:
      a = plus(plus(times(b,c),e),f) // silly example

      He clearly carries the same misapprehension of the distinction between operators and functions as your typical O-O proponent. To wit, that it's an arbitrary distinction made to make a certain "important" set of functions syntactically "simple", while somehow it's not worthwhile to add this "simplicity" to the general case. (If you like infix notation so much, go ahead and marry it, uh, I mean, go ahead and make all function calls infix. At least you'll have a coherent syntax.)

      This is wrong -- operators represent primitive CPU operations (opcodes, perhaps with a few implicit opcodes to move operands and data around) to be inserted in the current function body, while functions represent a function call to a different segment of code. Naturally, this distinction has no place in a high-level language; not only is the mixing of syntaxes senseless and confusing if you don't care about the implementation details, but the implication that "+" necessarily reflects an ADD opcode without the overhead of a function call is flat-out wrong.

      Once again, Lisp has it right, but those who won't learn from it make the same mistakes over and over again.

      So I quit reading. Any paradigm born out of that operators-are-convenience misconception is bound to be as broken as C++-style OOP.

    9. Re:Victory for Tablizer? by Tablizer · · Score: 1

      I've generally agreed that OOP may be better at systems programming than applications programming. Every tool has its place. It's just that the OO zealots claimed that OO was good for everything.

      The trend is fortunately toward multi-paradigm programming, and OOP is merely one of many tools. However, there's still no agreement on when to use what tool/paradigm. That's where the new flamewars are.

      -Tablizer

    10. Re:Victory for Tablizer? by Tablizer · · Score: 1

      It's on Geocities because I started it a long time ago when Geocities was in its prime, and moving it would make me lose google ranking.

    11. Re:Victory for Tablizer? by Tablizer · · Score: 1

      I'm not sure what you mean by "multiple implementations". And I'm not sure where the "sign off" quote comes from either.

      As far as large teams, most of the pro-OO authors never claimed that OOP was only for "large teams". They rarely limited the scope of their claims with regard to team size.

      And if you have an explicit coded example of OOP making life easier for "large teams", please present it. Evidence is good for science and open analysis.

      All I ask is, show the evidence.

      -Tablizer

    12. Re:Victory for Tablizer? by Tablizer · · Score: 1

      I am an empiricist. I ask that you show it being better, not merely claim it, or use only theoretical elegance as your primary justification.

      Show the code, show where the code is better, how it's better, and why it's better in a practical and economical sense. Is that asking too much? My detractors won't do it for some reason.

      Theoretical elegance is nice, all else being equal, but by itself cannot be relied on to compare the value (utility) of tools. You sound a hell of a lot like one of my long-time detractors who keeps pushing for theoretical elegance of your grand "God Type" system above all else but unable to articulate that elegance in terms of practical and economic benefits, like somebody hell-bent on manufacturing Klein Bottles because it's intellectually cool, not because it makes drinking beer any easier.

      -Tablizer

    13. Re:Victory for Tablizer? by LordArgon · · Score: 1

      Holy crap. I just spent an hour on that site and I still can't accurately summarize what this guy wants. There's such an amazing amount of text that he probably would have better results if he had just spent that time actually building his perfect system.

      All I know is I saw a lot of pages that were updated 5-10 years ago complaining about things that either aren't serious problems I've encountered or are addressed by a good ORM package. I'm totally open to hearing that OOP is broken, but I want to see specific use-cases where it breaks down and specific ways your system is better (so I can decide if any of that is relevant to me). That shouldn't take more than, say, 5 pages, should it? I can't even count the pages on that site...

    14. Re:Victory for Tablizer? by LordArgon · · Score: 1

      Interesting. This lends some perspective to his site, which reads like a shrine to his hatred of everybody who won't get off his lawn.

    15. Re:Victory for Tablizer? by Tablizer · · Score: 1

      I've toned down over the years (most days). And please, sir, kindly avoid stepping on my carefully-trimmed grass if possible. I'd appreciate it. Thanks.

      -Tablizer

    16. Re:Victory for Tablizer? by Compaqt · · Score: 1

      Whether misguided or prescient, the site is classic Worldwide Web, classic Geocities: no ads, no sidebars, no fancy layouts, different background color for each page, cheesy pictures, even the screenshots of FoxPro contribute to the 80s/90s style mood. Of course, we were all about those kinds of personal ~ pages in the day.

      Here's one definite gem:

      In 1997 we saw an ad for a "programmer with 3 years of ASP experience." ASP was only out for one year!

      --
      I'm not a lawyer, but I play one on the Internet. Blog
    17. Re:Victory for Tablizer? by LordArgon · · Score: 1

      Kudos to you, sir. I apologize for the low blow.

  32. Re:so the wheels are coming of the OO band wagon t by osu-neko · · Score: 1

    No, you have terrible reading and logic skills, because what I summarized is exactly what the post to which I replied actually means.

    Hmm. Nope, not even close. Looks like the pot calling the kettle black here... except the kettle isn't black in this case, just the pot. In any case, your logic and reading comprehension skills are sorely lacking...

    --
    "Convictions are more dangerous enemies of truth than lies."
  33. Law of Demeter the problem? by Latent+Heat · · Score: 2
    Maybe the anti-parallism is not in OOP as such but in programming style such as this Law of Demeter business.

    Demeter, they tell me, was some manner of software project and the Law of Demeter is a style of OOP programming that is supposed to have come out of the experience on that project. In the strict sense, you are supposed to never invoke methods on objects embedded inside other object. Instead, the containing object is supposed to have a method that in turn invokes the method on the embedded object.

    This manner of strict enforcement of encapsulation has the effect that most of your methods are mainly invocations of other methods. This may have the effect that any typical method invocation results in a long chain of method invocations.

    This is kind of like I ask Phil for the monthly report and Phil tells me "you gotta get that from Sally." So I shoot Sally an e-mail and she gives me the monthly report? No, that is bad in some sense because if my contact is Phil I am not supposed to know about Sally. So I e-mail Phil with the request, who e-mails Sue, who e-mails Tom, who in turn e-mails Jason, who finally e-mails Sally. And when Sally generates the monthly report, she passes it back through that chain. So am I correct in thinking that OOP leads to such high levels of indirection, and programming styles such as Law of Demeter make this worse?

    This style of programming probably helps coarse-grained parallelism of breaking programs up into elements that can run on separate threads or even processes. It helps by the rigorous enforcement of encapsulation. But this high level of indirection may break fine-grained parallelism -- every memory access chases long sequences of references.

  34. Re:so the wheels are coming of the OO band wagon t by Anonymous Coward · · Score: 0

    I do not know if OOP is anti-modular per se, but almost every implementation I have seen had serious problems from a modularity point of view.

    Worst is of course C++ where OOP means you no longer have any encapsulation at compile time, but you need to almost recompile everything most of the time some private fields change.

    But even with more complex module systems not relying on header files, OOP means your interfaces are likely to contain object hierachies even where the object hierachy is realistically mostly a implementation detail (or at least should be). Thus you either need interfaces changing more often or the code no longer having a suiteable interface, which usually is visible by having glue code on at least one, often even both sides of the module's interface.

  35. Re:so the wheels are coming of the OO band wagon t by Anonymous Coward · · Score: 0

    When you write proper OOP, you have a whole building set up, with methods, classes, and stuff. That's not a three-liner, and that's not easy to modularize and reuse.
    It's about the same as with anti-parallel. It was (and is) a nice paradigm on a high level or a high layer. You inherit stuff, you call methods. You try to be complete. If you cut down problems into single simple pieces of Lego, you don't need all of that. You write a small utility that does a complete mediation on the date entered. It doesn't need OO.
    On a very high level, or a user interface, it is much more intuitive: You create a file, and you can duplicate it, manipulate it, print it. Left mouse button - right mouse button.

  36. Mutating objects is simply programming style by Latent+Heat · · Score: 1
    That you base your software program on mutating objects is a programming style. You could just as easily base your program on immutable objects, creating such objects as needed and then discarding them.

    The style of mutating objects comes about when you don't have good garbage collection. You want to avoid creating immutable objects that you have to discard as this stresses the garbage collector.

    But they tell me there has been considerable progress in garbage collection, both in theory as to how it could be done and in practice in later versions of Java. The Java people are now encouraging the use of immutable objects because they claim their garbage collector is efficient enough to handle this style of programming, even thrives on creating objects with short lifetimes.

    1. Re:Mutating objects is simply programming style by garethjrowlands · · Score: 1

      It is *not* just as easy in Java to base your program on immutable objects. It is *possible* to program using immutable objects, especially for classes you wrote yourself but it's certainly not *just as easy*. GP is correct when he says that Java et al encourage mutable programming. Here are some examples:

      1. Variable in Java are mutable by default. You can add "final" but that's not the line of least resistance.
      2. All existing libraries use mutable objects. Good luck doing *any* Java without relying on *lots* of existing libraries.
      3. All collections/data structures are mutable. Maybe you can find some immutable collections/data structures for Java but it's not exactly mainstream. And you won't be able to iterate over them since Iterator is inherently mutable.
      4. Immutability interacts badly with inheritance. In your constructor, you call super and then you mutate.
      5. Most of the advanced techniques for dealing with immutable structures really need to work with functions, which aren't a first class concept in Java (they're normally buried inside objects - to manipulate them you're normally looking at reflection or AOP).

      It *is* possible to reduce your use of mutable objects compared with typical Java usage and it's a good idea to do so - by all means put "final" everywhere you can. But mutating objects isn't just a particular style in Java, it's pretty much mandatory.

      And it's much the same in any OO language. On the JVM, if you want immutability you'd typically be looking at something more like Scala (its FP subset) or Clojure.

    2. Re:Mutating objects is simply programming style by slim · · Score: 1

      A nice thing about Java is that you can design APIs with immutable objects when you want to, but have the option of not doing so at other times.

      They got things right when they designed the String API (Strings are immutable), and they got it wrong when they designed the Date/Calendar APIs. (tip: use Joda-Time for immutable Java dates done right).

      The problem with using a language for teaching is, if it gives you the flexibility to do things the wrong way, then learners will do it the wrong way, and maybe never learn a different way. It's a tricky balance between giving them enough rope to hang themselves, or not enough to learn.

    3. Re:Mutating objects is simply programming style by garethjrowlands · · Score: 1

      Sure both immutable and mutable are *possible* in Java but mutable is far more common.

      * Is "final" the default for variables? No, they're immutable by default.
      * Are collections mutable or immutable? Mutable.
      * Can your IDE generate get/set methods for you? I bet it can.

      The String class is in the minority and it's a built-in.

      Language matters. You're much more likely to see immutable structures in Scala, say, where anything declared 'val' is immutable than in Java.

      I didn't know about Joda-Time by the way. It looks good.

  37. Good strategy. by davidbrit2 · · Score: 2

    I guess they want to build a nice moat to go with their ivory tower.

    1. Re:Good strategy. by Anonymous Coward · · Score: 0

      You really don't know what a CS major is all about, do you?

    2. Re:Good strategy. by davidbrit2 · · Score: 1

      Yes I do. I have one. Writing off OO completely for first year students seems rather unhelpful, in my opinion.

    3. Re:Good strategy. by slim · · Score: 1

      FWIW, I did my CS degree in 1994, and we didn't do OO until the second year. It was presented alongside FP in "programming language concepts and paradigms", and was half of a single term module.

      It was a looong time after that, that I finally grokked OO to the extent that I would choose it for real work. But Groovy or Java is my natural choice now.

    4. Re:Good strategy. by Anonymous Coward · · Score: 0

      I guess they want to build a nice moat to go with their ivory tower.

      Maybe they are just interested in reducing coupling and improving cohesion...

  38. Re:so the wheels are coming of the OO band wagon t by Doc+Ruby · · Score: 0

    No. The article says CMU is eliminating OOP training, saying it's bad. You agree, saying "it doesn't suit every type of programming problem". You therefore are saying that since OOP isn't good for everything, there should be no OOP. Ignoring the alternative of teaching some OOP, but not exclusively OOP. In other words, "No OOP" == "Not some OOP".

    Yours is the fallacy of the excluded middle. Look it up. And don't ask me for any programming jobs. Or any that require logic. Or recognizing your own limitations, even when they're shoved in your face. Because then you engage in the denial projection that makes fallacists like you so annoying.

    Goodbye.

    --

    --
    make install -not war

  39. Re:so the wheels are coming of the OO band wagon t by Anonymous Coward · · Score: 0

    It's just Doc Ruby being himself. It gets even worse; he's also a Space Nutter. Not only can't he read, he also believes there are fantasy-levels of energy and technology out there. He actually thinks we'll make aerogel in space to insulate windows...

  40. Right for the wrong reasons by MoNsTeR · · Score: 2

    OOP should absolutely not be taught at the freshman level, because it gets in the way of understanding more basic concepts like, oh I dunno, variables, branching, looping, subroutines, I/O, etc. Their claim that OOP is "anti-modular" is of course absurd. "Anti-parallel" is probably arguable, but how that's relevant at an undergraduate level of instruction is highly questionable.

    At any rate the real problem is that colleges offer degrees in "computer science" but not "software engineering". How many of these students will finish their degrees without ever having committed to source control? Without coding to a 3rd-party API? Connecting to a database? Performing maintenance programming? Working in an honest-to-god team?

    1. Re:Right for the wrong reasons by narcc · · Score: 1

      Their claim that OOP is "anti-modular" is of course absurd.

      Not in the slightest. Don't confuse objects with OOP.

    2. Re:Right for the wrong reasons by Anonymous Coward · · Score: 0

      That's what Information Systems at CMU is for (http://www.cmu.edu/information-systems/)

    3. Re:Right for the wrong reasons by Anonymous Coward · · Score: 0

      Parallelism is of extreme importance in writing code that works well in modern environments, and yes, OOP often gets in the way of that goal. As far as modularity, you obviously need to brush up on what is being talked about here.

    4. Re:Right for the wrong reasons by aaaaaaargh! · · Score: 1

      At any rate the real problem is that colleges offer degrees in "computer science" but not "software engineering".

      I agree that both disciplines should be taught and many people studying CS should rather learn software engineering. (Although, to be honest, what people call "software engineering" is mostly just programming and not engineering at all, but that's another issue.)

      But that's not the fault of CS and there are plenty of reasons not to have much OOP in a CS introduction and instead having more functional programming theory (syntax & semantics, computability, etc.) and discrete math rather than trivialities about (mostly outdated) object systems.

    5. Re:Right for the wrong reasons by Anonymous Coward · · Score: 0

      I go to a major university. My brother is a chem major and taking an introductory course in python and one of their assignments is to go out and find an API and use it. I think I worked in more than my fair share of honest to God teams. And, finally, I think version control is being pushed harder these days (although, in fairness to your argument, I graduated having barely understood CVS).

    6. Re:Right for the wrong reasons by Anonymous Coward · · Score: 0

      This is a problem only if you consider colleges to be trade schools. It's a comparatively recent development in this country to consider college that way.

    7. Re:Right for the wrong reasons by Rockoon · · Score: 1

      I call heavy-OOP usage "object spaghetti" .. a nest of objects with hard to follow references to other objects. Answering simple questions such as "Does Foo() cause Bar() to be invoked?" becomes non-trivial.

      OOP is good for the frameworks that complex applications leverage, but not so good otherwise. OOP for the sake of OOP is dumb.

      --
      "His name was James Damore."
    8. Re:Right for the wrong reasons by naasking · · Score: 1

      Their claim that OOP is "anti-modular" is of course absurd.

      No it's not. You're biased because you're used to the cognitive load associated with reasoning about open recursion, higher order programming, runtime type checking, covariance/contravariance and so on.

    9. Re:Right for the wrong reasons by narcc · · Score: 1

      I call heavy-OOP usage "object spaghetti" .. a nest of objects with hard to follow references to other objects. Answering simple questions such as "Does Foo() cause Bar() to be invoked?" becomes non-trivial.

      Well said. I couldn't agree more.

    10. Re:Right for the wrong reasons by Anonymous Coward · · Score: 0

      How many of these students will finish their degrees without ever having committed to source control?

      +1, completed a degree without seeing this in the regular course. Degree content is not close enough to real life to be practical.

    11. Re:Right for the wrong reasons by sabt-pestnu · · Score: 1

      There's a world of difference between working on "exercise code" and working on a "working app".

      The sort of thing you're talking about is probably easier to find today, what with Sourceforge and other community projects, if you want a "research project" sort of task. Or perhaps an internship.

      But the amount of instructor time that sort of thing requires per project also makes it unsuitable as an "exercise".

  41. Re:so the wheels are coming of the OO band wagon t by maxwell+demon · · Score: 1

    When you write proper OOP, you have a whole building set up, with methods, classes, and stuff.

    So you say it's only "proper" OOP if you build a complete framework? Well, then maybe my idea of OOP isn't exactly proper ... maybe I've gotten too little OOP evangelization :-)

    --
    The Tao of math: The numbers you can count are not the real numbers.
  42. Scheme by nameer · · Score: 1

    My CS101 class (many moons ago) was taught in Scheme. I thought it was fantastic. Since I didn't come from a high achieving high school, I had no formal software training beyond what I hacked on my home C64 w/ Comal. I was nervous that I was going to have to compete with a bunch of C/C++/Pascal trained gurus. Scheme was the great leveler. Nobody had a clue with the language, and the professor could focus on CS, and the programmers had no advantage in the class (i.e. couldn't coast).

    Bring back CS101 as Lisp/Scheme/Logo (not the turtle part, the actual language). Make their brains hurt.

    --
    "Uh... yeah, Brain, but where are we going to find rubber pants our size?" --Pinky
    1. Re:Scheme by Svartalf · · Score: 1

      Heh... That would depend on the person in question. Scheme didn't throw me for a loop- and I certainly fit the description you gave there. >:-D

      Perhaps it's just me, I took to being able to do Lisp, Ada, PL/1, Forth, C/C++, Java, Python, Icon, Erlang, etc. equally well. Each has a way to look at the computer and a way to ask it to go do something. Some excel at a task given it (Though you may have initial difficulty getting to full speed with some tools...Erlang and other functional languages...heh...they take some getting used to...) others will let you do it, but are poor solutions.

      --
      I am not merely a "consumer" or a "taxpayer". I am a Citizen of the State of Texas
  43. Not a crash in a carload! by Anonymous Coward · · Score: 0

    As long as a program doesn't crash or dump core (re: Standard ML), its output must be correct.

  44. Re:so the wheels are coming of the OO band wagon t by maxwell+demon · · Score: 1

    Well, C++ isn't really an argument because here the main problem is the archaic header file model, which just doesn't fit modern programming methods.

    And the hierarchy problem you mention is in part due to bad design (needlessly deep object hierarchies), in part due to an insufficient adaption of OOP to static typing (dynamically typed languages don't have that problem; AFAIK OOP was originally implemented with dynamical typing), esp. that you are forced to declare all supported interfaces at class declaration time (and yes, I don't know a statically typed language that doesn't have that problem; nevertheless it's not a fundamantal problem of OOP, as dynamically typed languages show, and IMHO even solvable for statically typed languages), and in part the classic interface mismatch problem which is completely independent from OOP (if you have to use two interfaces together which don't really match, you have to write an adapter; it doesn't matter if the mismatch is in object interfaces, in library APIs, or whereever; for example, if a sorting library expects a less-than function, but the library providing what you want to sort provides a three-way compare, then you must adapt the interfaces by writing the less-than function the sorting library needs using the three-way compare the data type library provides, no objects involved here).

    --
    The Tao of math: The numbers you can count are not the real numbers.
  45. As usual it depends on what "O-O" means by alispguru · · Score: 1

    The Java/C++ model of O-O pretty much forces side effects and object mutation on you.

    Other models of O-O exist. CMU is using "O-O" as shorthand for "pedestrian, non-academic coding".

    Which has some degree of truth, but is also academic snobbery.

    If they wanted to advance the conversation without flamebait, they could have labeled their stuff as "modern O-O" or "O-O without mutation" so they could not look like they were throwing out the useful aspects of O-O.

    --

    To a Lisp hacker, XML is S-expressions in drag.
    1. Re:As usual it depends on what "O-O" means by Svartalf · · Score: 1

      So, will "modern" OO teach them a quicksort or any other base algorithmic concepts ANY better? No? Might I suggest a bit of restraint on your remarks?

      You're being no better than you're accusing of the professors- that of being a bit of a snob.

      --
      I am not merely a "consumer" or a "taxpayer". I am a Citizen of the State of Texas
    2. Re:As usual it depends on what "O-O" means by t2t10 · · Score: 1

      The Java/C++ model of O-O pretty much forces side effects and object mutation on you.

      No, they don't. You can merrily code away using very little state or mutation: don't provide mutators, use binding instead of assignment, etc. Same, actually, as in Scheme or even SML (which also has mutation). Experienced programmers will do just that.

  46. Re:so the wheels are coming of the OO band wagon t by icebraining · · Score: 1

    Object-oriented programming is eliminated entirely from the introductory 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.'"

  47. OO has its place by McTickles · · Score: 0

    in developing office style applications, not high performance ones.

    Also it doesn't have its place, indeed, when starting to learn programming; kids need to learn to think "close the metal" to understand why things go wrong, otherwise they will be forever relying on the documentation of some blackbox OO API and understand almost nothing.

    When they grow up and understand the "zen of programming/computer science" then yes by all means use OO/Java/C#/C++ whatever to save you time and not reinvent the wheel.

    After all you don't learn to drive before you basically understand how an engine works do you? right? ... sigh...

    1. Re:OO has its place by Anonymous Coward · · Score: 0

      The problem with OO isn't that APIs will make programmers forget basic concepts. There are complex APIs in procedural and functional languages too. The problem is that it teaches what is sometimes the wrong way to model things. Not everything can be expressed using the concept of class (unless you're a Marxist). The other problem is using Java like it was the only OO language (worth learning) instead of teaching purer OO languages like Ruby or Smalltalk. For example, the use of "static" methods is just a hack to get around the lack of independent functions. All methods require a receiver (a "self" or "this") to act on. Using "Math" or "String" as a receiver is just wrong. It should be 5.sqrt() using OO concepts, instead of Math.sqrt(5). That's illogical and means that an object (class because it's static) called "Math" takes the number 5 and does something to itself using 5 to create a square root. The proper OO way would be for the object "5" to find its own square root. But ints aren't objects in the Java world and Java thinks functions and methods are the same thing (they're not). A method is something an object does. A function is an independent thing (but may be an object itself) that takes a series of arguments and returns a value. Saying manager.fire(Jim) and fire(Jim) are accurate, but Java wants you to replace the second one with something like Employee.fire(Jim), which makes no sense because it would mean that Jim is firing himself!

      To simplify things: fido.bark() and spot.bark() are two different methods (even if they have the same result), but bark(fido) and bark(spot) are one function (even if they have different results).

  48. Re:so the wheels are coming of the OO band wagon t by russotto · · Score: 1

    esp. that you are forced to declare all supported interfaces at class declaration time (and yes, I don't know a statically typed language that doesn't have that problem

    Go, Objective C.

  49. CMU cites "The Inheritance Anonaly" by davecb · · Score: 1

    The prof cites Meseguer's Solving the inheritance anomaly in concurrent object-oriented programming as an example of the problems of trying to mix OO with other concerns, in this case concurrency.

    If the tool doesn't work, pick a better one!

    --dave (who uses O-O happily for non-parallel tasks) c-b

    --
    davecb@spamcop.net
  50. Come back to reality.. by segfault_0 · · Score: 2

    Of course you don't want to teach algorithm development on a high level language that already has all of the algorithms (that these teachers are capable of teaching) built in. What would be the point of that? And I think when they said anti-parallel and anti-modular, they meant in the attitudes it instills in students.

    --- start off topic rant ----

    For the record, these degree programs provide you with skills tuned for different jobs. The CompSci folks are algorithm based - down in the details making things fast and efficient. The SoftEng folks are architecture/technology based - up at the top making things that WORK and that people can actually use; you know - products. They are COOPERATIVE jobs with a very large overlap.

    Any CompSci should be grateful to have talented SoftEng helping them provide a cogent, fast, and polished view of their algorithmic efforts; your work means nothing if it never gets in the hands of the users or if it's spoiled by a bad implementation.

    Any SoftEng should be pleased to have hard working CompSci making fast algorithms to help them to create their next product. You couldn't make these fancy architectures of you didn't have well thought out underpinnings backing you up.

    I see some piss-poor attitudes on this thread and some of you snobs and dorks are in for a rude awakening.

    --

    I was crazy back when being crazy really meant something. (Charles Manson)
  51. Re:so the wheels are coming of the OO band wagon t by Anonymous Coward · · Score: 0

    What the hell? How does that follow?

  52. Finally! by Gogogoch · · Score: 1

    OO is fine in theory but, oh dear, what a mess in reality. I would love to know how much OO has negatively impacted software development over the year. Find a disastrous project and I'm sure there will be a whole load of OO there boggling the mind. The problem is that the object design at the start of the project typically has no bearing on the model after some years, and the cost of redesign and refactoring over and over is terrible. And don't get me going on design-patterns! Lets take OO and move it beyond the whit of man, or at least 90% of developers.

    OO is fine for small-scale objects, like UI widgets. Or very large container objects. But in between, oh my god.

    Now I know this will be flame bait for a lot of slashdotters, but only because you have been brainwashed into thinking OO is good. Like how physicians thought blood letting was essential to balance the humours 200 years ago, but now viewed as a relic from the dark ages.

    No, the answer is not assembly code either (even though I still have my 6502 hex codes by heart).

    1. Re:Finally! by ChucktheMan · · Score: 1

      I hate OO, but only because I inherited a huge broken OO app. Somewhere down in the dozens of layers of objects there is a broken method. This problem has confounded at least four previous fix campaigns. The economic downturn has made some excellent people available, so this attempt may bear fruit, but if we fix this code it will be in spite of OO, not because of it. This is not to say that a functional solution would a priori be any easier, but for us OO is an impediment, because we have to spend a lot of time thinking about the OO problems, and not the domain problems.

    2. Re:Finally! by Anonymous Coward · · Score: 0

      Wait, what the fuck?

      " Find a disastrous project and I'm sure there will be a whole load of OO there boggling the mind. "

      But is OO the cause, or was it other factors?

      "Now I know this will be flame bait for a lot of slashdotters, but only because you have been brainwashed into thinking OO is good."

      Or maybe because this is a lot of presumption, and guesswork?

    3. Re:Finally! by Gogogoch · · Score: 1

      They are all huge broken OO designs! At least, that is my experience.

      The original architect considers the domain - usually poorly since he/she is only human - and says "lets have an OO structure that looks like this". And with the first enhancement request the OO design breaks because the designer thought the world worked in a different way and enshrined that thinking in to the OOD.

      OO almost always turns out to be an impediment. I once inherited a project that had been a poster-child for OOD, where the architect had innovated with "design patterns". OMG. Compared with similar projects of similar complexity, this particular project ended up costing about 100% more, or $20M, and was of course massively late.

      I like your comment about "thinking about OO problems". Could we say OOD is software engineering for software engineering's sake? Oh, and for the worthies who sell books and CASE tools?

      You are not alone!

    4. Re:Finally! by ChucktheMan · · Score: 1

      Thanks. I was expecting to be bitten by trolls for this.

  53. In 1963 my first was LISP by j0el · · Score: 1

    First language I learned was LISP. Second was assembler for an old Univac machine. Then SPS and Autocoder for the IBM 1401. Then BAL for the 360 and finally FORTRAN. After college and the military I got into C (in 1972). C and LISP served me well until I got onto a project using SMALLTALK. SMALLTALK was really fun, but I think it was the nice IDE rather than the language that made it fun. By the mid 90's OO was all the rage and as the education factories started turning out Visual C++ experts it looked liked C++ would be the language forever except those Visual C experts could not create a class library to save their lives. They basically used it as a procedural language but there was great confusion as many people believed if it was written in C++ it was OO by definition. OO was what the cloud is today. A clearly defined environment, with all of 12 people really getting it, and thousands thinking they do.

    My thinking is that LISP was a great language to start off with for many reasons. These days I really like Python for general stuff, and I have not been close to a programming project in years so have no idea what is best, but would look at the tools first.

    By the way, assembler and machine language doesn't help. The theory is that if you understand the machine internals and architecture your code will perform better. Not true. Understanding the machine does not prevent you from designing a web app that requires 50 DNS lookups, 150 database calls, and 150K of javascript for the first page. If you like to drive a stick, you should learn assembler, you will like it. If you want a car with all sorts of gadgets and fly by wire, you do will find assembler very boring.

    So I think CMU is on the right track. But there is one last thing I have noticed over my many years in the industry. Whichever language you learn first will likely be the one you favor forever.

    1. Re:In 1963 my first was LISP by multipartmixed · · Score: 1

      > But there is one last thing I have noticed over my many years in the industry.
      > Whichever language you learn first will likely be the one you favor forever.

      You must not know many of us who grew up hacking BASIC on 8-bit microcomputers.

      --

      Do daemons dream of electric sleep()?
    2. Re:In 1963 my first was LISP by stanlyb · · Score: 1

      It is funny that you mentioned the nowadays cars, because all the ECU are programmed on if not assembler, then PURE C, with a lot of restriction, like for example: Rule zzz: DO NOT USE DEFINE. So, again, can you imagine what could be if you car software is written on C++? (i could, believe me you don't wanna to drive such a car).

  54. Differentiation by Anonymous Coward · · Score: 0

    This is more about having a curriculum that stands out in the crowd than solving a real-world problem. Now that Hyderbad Tech, ITT, and University of Phoenix are all teaching Java they need to show they are somehow above the noise.This is the marketing department influencing curriculum.

  55. It doesn't really matter what classes they take by Tony+Isaac · · Score: 1

    When hiring programmers, I have long believed that the best programmers completed their college degree because they need that to be considered for employment by most corporations. These excellent programmers come to college already knowing nearly everything they need to know about programming, what they get in school is mostly theory. They are just going to school to check off a box on their resume.

    In fact, in considering a candidate for a programming job, I consider a master's degree in CS a strike against the candidate, and a PhD TWO strikes against the candidate. CS students who are good at real world programming usually can't wait to finish their degree so they can get out there and get a real job; students who are good at theory are the ones who get the advanced degrees.

    1. Re:It doesn't really matter what classes they take by Anonymous Coward · · Score: 0

      Hey everybody, Tony Isaac didn't graduate from college!

  56. Re:so the wheels are coming of the OO band wagon t by Haeleth · · Score: 1

    Objective-C doesn't count -- it does not solve the problem for static types, it just falls back on dynamic typing. A better example is OCaml, which actually does solve the problem while remaining completely statically typed.

  57. Teach 'em all assembler by Progman3K · · Score: 1

    and let god sort 'em out

    --
    I don't know the meaning of the word 'don't' - J
    1. Re:Teach 'em all assembler by theskipper · · Score: 1

      Good one. Snorg, Thinkgeek, etc. need to put that on a t-shirt.

  58. Agreed by Anonymous Coward · · Score: 0

    I actually being my one-on-one programming crunches with reality and what problem was solved, then evolve to analog electronics, then digital electronics, then explain the reuse of digital components by creating an engine (microprocessor). I explain the branching to FPGAs from here. Then I move to assembly, then C, since C is basically assembly using a pattern for calling and variables. Then show how objects can be represented in C and pointers to methods can do method abstraction and OOP can be done in C, then C++ showing how much easier it is for OOP and name-spacing. This is where i am currently. next going to progress into C#

  59. woohoo! by Anonymous Coward · · Score: 0

    I always thought OO was unnecessary most of the time and everyone was just forced to do it because "it's what you're supposed to do" even if it makes it more complicated. I thought we were supposed to keep complexity to a minimum?

    Both Microsift and OO on the decline in the 2010s? This decade is gonna be awesome!

  60. Not sure whether you're being sarcastic or not, by Anonymous Coward · · Score: 0

    Whoosh!

  61. The point of CS by Dails · · Score: 1

    There are people who argue that CS isn't about programs, that CS is as much about programs as astronomy is about telescopes. Those people will tell you that practical application of CS is an entirely different subject.

    Those people are wrong.

    There's a reason that in the 30s before we had computers that CS was studied by about 20 people; there was no point. Ditto number theory. Nowadays we ahve computers and public key cryptography and both subjects are important now, with many many students. We study CS to make better programs, to make better computers, to use computers more effectively. You can fairly make the comparison that a computer programmer is to a computer scientist as a car mechanic is to an automotive engineer, but I got news for you; the first mechanics were engineers. Like Bruce Lee said, "knowing is not enough. We must also apply."

    If you don't believe CS should prepare you for a career with computer or that college isn't there to prepare you to be an effective worker, you need a serious shift in perspective or people will very quickly stop caring about your opinion.

    1. Re:The point of CS by Anonymous Coward · · Score: 0

      CS is as much about programs as astronomy is about telescopes

      The quotation is "Computer Science is no more about computers than astronomy is about telescopes" and Dijkstra said it.

  62. Right but Wrong by Anonymous Coward · · Score: 0

    It should never have been first year stuff. It never was in my university as far as I remember. Anti-modular and anti-parallel? everything is. You got the wrong reasons, which is not surprising taking into account you already screwed up before by teaching OOP to freshmen...

  63. A good first step by gargeug · · Score: 1

    I was wondering when this was going to happen. The future of hardware is obviously towards parallel processors, in which the burden of further exploiting code parallelism is placed explicitly on the programmer, and not on the hardware or compiler. It makes sense that up and coming programmers should be seeded with this mindset above all others, and this is exactly what CMU is doing. Other universities should take note, and we should applaud CMU for taking that first step towards the new world.

    1. Re:A good first step by PPH · · Score: 1

      Do you mean to say you CS folks have given up on developing languages and tools for parallel processing? Call me when you've taken us back to programming with plugboards.

      --
      Have gnu, will travel.
  64. Re:so the wheels are coming of the OO band wagon t by Anonymous Coward · · Score: 0

    This thread is comedy gold, especially the part where instead of re-reading the article to see if he missed something (given the accusations about his reading comprehension), Doc Ruby pompously accuses others of being in denial. LOL.

    And don't ask me for any programming jobs. Or any that require logic.

    Don't worry, Doc. After your display here, I doubt anyone would want a job from you. Most people prefer their bosses to be able to read and understand simple articles, admit when they misread something, and not try defend their misinformation by accusing other people of "denial".

    Or recognizing your own limitations, even when they're shoved in your face. Because then you engage in the denial projection that makes fallacists like you so annoying.

    Comedy. Gold.

  65. I have an idea by roman_mir · · Score: 1

    I got this idea, I know it's crazy, but don't dismiss it right out.

    How about they start teaching people "thought oriented programming"? You know, thinking about the problem first, coming up with solutions to questions, ideas, figuring out the best tools for the jobs and then using that to do the work?

    any traction?

    1. Re:I have an idea by SpinyNorman · · Score: 1

      Well, I you need to familarize yourself with the available tools before you're in a position to choose which tool is best for the job.

      These single focusfunctional/imperative/O-O programming classes are teaching tools (techniques), not tool selection.

    2. Re:I have an idea by roman_mir · · Score: 2

      These single focusfunctional/imperative/O-O programming classes are teaching tools (techniques), not tool selection.

      - that's where it all goes wrong. Teaching people in colleges about specific tools rather than about helping them to adequately approach a problem and to come up with a solution that is generic enough mathematically, so that it could be expressed in any language. The tools they will learn on the job.

      Of-course if that's a technical school, then there is more merit in that sort of an approach, still I'd rather have somebody who can think his way out of a box than somebody who has a hammer.

  66. Actually Python is functional and imperative as we by Anonymous Coward · · Score: 0

    Actually Python is functional and imperative as well...

    OO is in my opionion the uglier part of Python ( __blah__)

    OTOH look at this:

    primes = ( i for i in range(2,100) if not any( not i%j for j in range(2,i) ) )

  67. Re:so the wheels are coming of the OO band wagon t by Anonymous Coward · · Score: 1

    It of course depends on the kind of OOP you use. Things like Haskell's classes (which from other point of view are not really classes, but rather interfaces) is a thing that can make module interfaces better. But many "OO languages" do without interfaces at all and only have inheritance.

    Even without modules there is a problem there: Consider for example an ordered list. An ordered list stored objects, which it needs to compare.
    So without interfaces you need some base class with a comparison function. With inheritance you cannot express that this comparision function only compares with other objects of the same type you use as base of everything in your list, but you must be able to compare it to everything else which is a specialisation of the comparison class (which is of course impossible, so you will have functions that check types at runtime and throw runtime-exceptions even though compiling totally fine).

    Now things get worse without polymorphism (which a majority of "OO languages" also miss). Then you cannot have an class just for comparing, as your real world objects would already need to be inherited from some other class to be usefull, or you already have your first layer of glue code. So you need some base base class that already has a possible comparison (many things will not be able to compare, but as you must formaly be able to compare with anything else comparable with anything, 'not comparable with this' must already be a possible outcome, so everything being comparable needs to be a 'valid' result anway). So you have a base base object class with all those things anything might later get. And if you need anything additionally, you need another base class.

    Now in this case consider an reuseable module. If you have no interfaces and no polymorphism, it needs to have the same base base class you use, or you cannot use it without extra glue. With polymorphism you need an extra class in your inheritance for every other module you
    want to use.
    So if you have some object that some module exports, that module needs to have ancestors depending on the what other module you internally use. So you might need to make the other module, though only being an internal implementation detail, be part of your interface as you cannot describe your object without it. (If you need to describe all the interfaces something supports here, interfaces do not help either).

    That is the main reason in practice OOP is anti-modular: implementation details are leaked, as they get global properties. For every such problem there might be a language that has some form of OOP that does not have that problem (I love Haskell's object orientation for example), but in mainstream languages OOP just means: sorry, no modularisation for you.

  68. Re:so the wheels are coming of the OO band wagon t by khallow · · Score: 1
    And I see we have the "space nutter" troll again. You might have missed it, but the human race does have "fantasy-levels" of energy and technology.

    He actually thinks we'll make aerogel in space to insulate windows...

    One wonders why you would think that is hard, much less part of the "fantasy-levels" of technology. I guess having a remarkably stilted understanding of technology is a prerequisite for your belief system.

  69. I must be an idiot by Velex · · Score: 1

    I must be an idiot.

    How is thing_do_stuff(the_thing, params) better than the_thing.do_stuff(params)? Why can't I call do_stuff on my things[] in a parallel manner?

    I guess this is why I need to get my ass back to college to study for a career that doesn't involve hand-waving mumbo jumbo clouds and widget_factory_factory_factories. I just can't take the buzzword bullshit anymore.

    --
    Join the Slashcott! Stay away entirely Feb 10 thru Feb 17! Close all tabs to prevent autorefresh!
    1. Re:I must be an idiot by Shados · · Score: 1

      OOP and language constructs that allow it are 2 things.

      There's nothing wrong with using objects, methods, inheritance (ok, there's a lot wrong with this one...), polymorphism, etc, to make your code clean, to wrap logic, to make modules, and so on.

      There's a whole lot wrong with the OOP concept and methodologies. Modeling business entities as classes, encapsulating behavior in those entities, and so on. It quickly makes your applications unmaintainable, no one understands it, its almost inevitably slow by design, and the software architects from the Ivory Tower keep calling shots that make it worse and worse.

      You don't need a course dedicated on showing you how to use the language constructs. You'd only need a course dedicated to OOP if you were to teach the whole theory and how to model stuff with the language constructs. End result: you can just drop it. CMU still gives you the choice of an elective if you really want to learn what NOT to do.

    2. Re:I must be an idiot by t2t10 · · Score: 1

      There's a whole lot wrong with the OOP concept and methodologies. Modeling business entities as classes, encapsulating behavior in those entities, and so on.

      Well, yeah, that's wrong. But just because you abstracted your problem badly doesn't mean that the abstraction mechanism itself is bad.

      In most cases, there are natural abstractions in business apps: "server", "database", "dictionary", "list of results", "window", etc. These abstractions have little to do with the ontology or objects that are being modeled, but they have everything to do with how the application works. And those abstractions are good ones.

    3. Re:I must be an idiot by Shados · · Score: 1

      Agreed. Like i said...the OOP constructs are good, and you can use them the same way you use functions or control blocks, without falling in the whole OOP ivory tower. You don't need a professor to spend a semester to help you do that.

      The constructs are good. The methodology is bad. No point going further than that. From the sound of it, you agree with me, I'm just expressing myself poorly.

    4. Re:I must be an idiot by shutdown+-p+now · · Score: 1

      inheritance (ok, there's a lot wrong with this one...),

      '

      Nothing wrong with contract inheritance. Plenty wrong with implementation inheritance, and then mixing the two into one language construct is downright criminal.

    5. Re:I must be an idiot by SoftwareArtist · · Score: 1

      Your objections aren't really problems with OOP, just with the misuse of it.

      OOP is a tool. Like any tool, it's useful for some things and not useful for others. Inheritance, polymorphism, etc. is a very, very good way to model lots of relationships that occur in lots of real programs. Any competent software engineer absolutely needs a good understanding of OOP, and needs to be comfortable using it.

      But that doesn't mean it's the right tool for every purpose. There are also lots of relationship that are not modeled well in this way, and you shouldn't use it for those. But too many people learn that OOP is the "right" way to architect their code, and that you should use it for everything you do. And that, as you say, leads to messy, unmaintainable programs.

      --
      "I'm too busy to research this and form an educated opinion, but I do have time to tell everyone my uninformed opinion."
    6. Re:I must be an idiot by t2t10 · · Score: 1

      I don't think the methodology is necessarily bad: concepts like hierarchies, is-a relationships, abstract interfaces, encapsulation, patterns, binding, classes, inheritance, etc. are useful and they are something that beginning developers need a couple of semesters to learn and understand. There's nothing "ivory tower" about them, it's just software craftsmanship and terminology, but even craftsmanship needs to be taught, and it needs to be taught in college as part of a CS curriculum.

      What's bad is the mistake of identifying objects in your system with objects in the real world; that is often the wrong approach. But just because many people (and professors) make that mistake doesn't invalidate the rest of object oriented design or methodology.

      Also, you have to compare this to the alternatives. There is even less coherent methodology or design in functional programming. Most real-world functional programs that I have seen are incomprehensible spaghetti code. Look at the code for darcs or unison, two useful real-world tools written in functional languages, with lots of comments and documentation: the code itself still looks like crap, with lists and tuples of uncertain meaning used and passed around all over the place.

    7. Re:I must be an idiot by garethjrowlands · · Score: 1

      Well if it was obvious they wouldn't have to teach it on their Computer Science course. :-)

      The problem with the_thing.do_stuff is that it's imperative programming and may have side effects that make parallel execution unsafe. The thing_do_stuff form has the same problem. At CMU, they teach techniques that don't suffer that problem: functional programming.

      As for why OO is worse for parallelism than other imperative programming, well one reason is OO's insistence on encapsulation and distribution of state changes. Encapsulation makes it hard to look at code and see whether it's changing the state of an object. Distribution means there are more places to go look. Command-Query separation is one thing that helps in an OO context.

      As for widget_factory_factory_factories, that sounds like Java Kindom-of-Nouns (http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html) thinking. That's exactly the sort of thing that CMU's FP course doesn't suffer from.

  70. learn to program first, then learn structure by Anonymous Coward · · Score: 0

    Freshman classes should be taught in C with strict typing (i.e. no type casting). This way, people understand about direct memory model, and work on algorithms, like searching, sorting, parsing, traversing networks, etc. The language should be absolutely minimal. Programmers need to understand what a pointer is. Interfaces, inheritance, and polymorphism are things people should learn after they know how to write a program that actually accomplishes something. I interview interns all the time, and I ask them what they're doing:

    Idiot: "we're learning about object oriented programming"

    Competent: "I wrote a program which generates a triangulated irregular mesh from an elevation grid"

  71. What about for other engineering disciplines? by Elviswind · · Score: 0

    I'm guessing this comment / question will not see the light of day due to my lousy rating, but here goes nothing:

    I'm an electrical engineer making a decent living practicing applied electro-magnetics and communication theory. As part of my program at a slightly above average state university in the late '90s, I was required to take a semester of C++. I also took a second semester as an elective, but mostly coasted through as it was my final semester and had crammed in 13 other credits in required courses to finish.

    Now, I certainly don't make a living writing software for public sale, but I do occasionally want / need to automate hardware and software tasks. My software development "language" choice was generally dictated by what was at hand, or with what I wanted to interface, or what had already been done. I've used TCL, LabVIEW, VB, Scheme, LUA, among others. I'm not an expert in any of them and I certainly am not an efficient programmer. I haven't had the need to use C++, or any similar language, but I do feel as though the C++ course that I was "forced" to take was beneficial. Specifically, I learned about programming syntax, how to read and debug code, and what arguments and built-in functions you should expect from any other language. More generally, I think I learned how to learn a new language which has been indispensable.

    Is C++ the best language for learning what I did? It seems to have done okay for me, but I probably learned and forgot a lot of OO stuff that isn't very useful for what I do (quickly bang out some software to automate the task at hand) and maybe C would have been more applicable. Thoughts?

  72. Anti modular? by SpinyNorman · · Score: 1

    Not sure where that notion comes from, and I've been programming professionally for 30 years...

    One of the earliest languages to encourage modular programming was Modula-2 (a successor to Pascal, popular in the early 80's), which defined a module as a collection of types, data and functions with a public definition similar to a C/C++ include file (bt withing a namespace), and a private implemention. Most C (not C++) programmers arrive at a similar style with a related collection (aka module) of types, functions etc defined by a header file with the corresponding implementation in a seperate .c file.

    C++'s classes (or C#, or Java - all very similar) at the most basic level formalize this type of modular programming by collecting related types, functions etc together and separating the public interface (definition) from the private implementation. This is what modularization is all about - divide and conquor complexity by grouping of related functions together and seperating interface from the more complex implementation.

    Of course O-O languages and design go beyond mere modularization, but still that's at their core, and to say that O-O design is anti-modular is ridiculous.

    The objection of O-O programming being "anti-parallel" may have a sligght graiin of truth to it to the extent that parallel programming is still a very fluid field and imposing any other methodology does impose some structure that might not be helpful. However, modularization and O-O classes are not inherently anti-parallel by any means... classes that encapsulate and hide the implementation of parallelism from the user are a very powerful technique.

    1. Re:Anti modular? by Intron · · Score: 1

      I suspect he means that O-O is anti-modular because it splits a program into many methods which are typically spread across many files. Although this is a valuable tool when you are doing top-down design on a large problem in the real world, it gets in the way of learning the principles of CS where you want to separately teach about program flow and data structures.

      --
      Intron: the portion of DNA which expresses nothing useful.
    2. Re:Anti modular? by aaaaaaargh! · · Score: 1

      I think what they mean by anti-modular is that OO, particularly in languages with bad module systems like e.g. C++, sometimes encourages the abuse of object encapsulation for modularization. Class hierarchies are supposed to reflect a natural ontology, whereas modules are supposed to organize the source code into independent libraries. Sometimes these coincide, but most of the time they don't. So no, I fully disagree. While it sounds a bit harsh to say that OO is anti-modular, there is some truth to it and the claim is certainly not ridiculous.

      OO languages are definitely also anti-parallel, because object systems are based on mutation. At least in all OO languages I'm aware of (plenty) objects are mutable structures. Mutation and concurrency really don't fare well.

    3. Re:Anti modular? by bzipitidoo · · Score: 1

      One goal of OOP was to increase modularity. It didn't entirely succeed, and can make things worse. Classes themselves are fine. It's the relationships between classes that lead to trouble. The classic OOP thinking is that, when there is a relationship between 2 classes, these are how they can be related: "has a", "is a", and "knows a", which is composition, inheritance, and what amounts to a catch all for neither of the others. Particularly, I find inheritance dangerous.

      Inheritance needlessly forces a hierarchy on a set of classes. Great, if a hierarchy is a good representation, but often it is not. As one example of why inheritance is trouble, there's been an ongoing argument about multiple inheritance. Is multiple inheritance necessary? Is it a kludge? Multiple inheritance is the symbolic link of OOP. It's a nasty hack to patch up the shortcomings of trying to impose a hierarchy, same as links are in file systems. "is a" is not an accurate representation of the actual relationship, inheritance maybe ought to be described with "exemplifies a" or "typifies a", something that shows this is not a relationship between peers.

      OOP also seemed an attempt to make bad programmers better, by imposing discipline, as Structured Programming did. OOP failed miserably there, providing entirely new ways for a bad designer to bog down in a mess.

      Finally, many so called OOP languages, such as C++, do a terrible job of realizing OOP. Programmers shouldn't have to mess with templates at all. The language ought to handle that. Operator overloading is another controversial piece of OOP.

      OOP was supposed to be modular, sure. But in some ways it made modularity harder to achieve. Relationships between "modules" aren't as simple as they could be. Talk of it being anti-modular is not at all ridiculous.

      --
      Intellectual Property is a monopolistic, selfish, and defective concept. It is "tyranny over the mind of man"
    4. Re:Anti modular? by t2t10 · · Score: 1

      Class hierarchies are supposed to reflect a natural ontology, whereas modules are supposed to organize the source code into independent libraries

      There is no reason why one mechanism can't be used for both purposes. There is no rule that says you need a separate language construct for each separate concept; if there were, Java, C++, and other languages would be even more complicated than they are.

      OO languages are definitely also anti-parallel, because object systems are based on mutation. At least in all OO languages I'm aware of (plenty) objects are mutable structures. Mutation and concurrency really don't fare well.

      Yeah, that's the party line, but it's bullshit. Most parallel code in the world is written in imperative languages. People have no trouble doing that.

      What you can't do easily is transform sequential imperative code into parallel code. But you know what? Despite decades of trying, people haven't been able to do that in any practically useful way for functional programming languages either.

    5. Re:Anti modular? by SpinyNorman · · Score: 1

      Inheritance is just a tool, and needs to be used appropriately. It's a classic beginners mistake in C++ to think that classes should mostly inherit from each other - presumably because of some notion of that being the right C++/O-O way of designing things. Overuse of multiple inheritance (rarely useful) is even worse.

      In reality most classes need not and should not inherit from each other - don't just create a hierarchy because you can or because you think you should. Inheritence should only be used when there's a real need - e.g. for polymorphism (baseclass with virtual methods), or to subclass a callback class to add context.

      Most of the time (outside of textbook examples) you're not designing hierarchies but rather stand-alone classes.

      The only real (and rare) use for multiple inheritance that comes to mind is polymorphism where you need a class to be able to variously be treated as more than one base class. If you using M-I just to inherit functionality you're probably better off just using composition.

      C++ template programming has nothing to do with O-O - they are orthogonal techniques. Template programming is better referred to as generic programming - writing type-generic code that still provides type-safety (e.g. the C++ STL).

    6. Re:Anti modular? by Derekloffin · · Score: 1

      Yeah, I'm not really sure where they get that myself, especially having dealt with a true anti-modular language myself (it is literally impossible to have two bits of code not know about each other under certain circumstance and work right). Perhaps in practice a lot of programmer break from modularity when using OOP, but that doesn't make OO anti-modular, just not rigorously modular. Most powerful languages, regardless of their intent, assume that you know what you're doing and let you break their fundamental design paradigms to get job done.

    7. Re:Anti modular? by nluv4hs · · Score: 1

      Remember that famous Alan Holub piece from 2003? Why extends is evil
      Improve your code by replacing concrete base classes with interfaces
      By Allen Holub, JavaWorld.com, 08/01/03

    8. Re:Anti modular? by MichaelSmith · · Score: 1

      Also pocket calculators are no use when teaching arithmetic to young school children.

  73. Please remain calm by Anonymous Coward · · Score: 0

    As someone at CMU in CS, I can definitively say this doesn't mean we will never teach Java or C++. Lots of courses will still use these languages and OO-concepts. We are simply changing the focus of the introductory sequence of classes (100 and 200 level), which students complete by the end of their sophomore year.

    1. Re:Please remain calm by Dcnjoe60 · · Score: 1

      As a chemistry major back in the 70s, we had to take chemistry and other hard science (as opposed to soft science) classes in the first two years, so that by the time we were upper classman, we were in a position to take the hard hard science classes. Many people drop out of chemistry (usually pre-med) because the work was too difficult. Those that had an aptitude for it and persevered, became chemists.

      It is interesting, that in a program that claims to turn out Computer Scientists, CMU would not be doing something similar.

  74. Really tells you how clueless CMU is... by Anonymous Coward · · Score: 0

    Then you are a fool to go to go to CMU. Because they clearly don't know what they are talking about. All modular and parallel programming is implemented in an OO manner. If you don't have OO skills good luck finding a job. Is this a joke? April Fools is next week...

    1. Re:Really tells you how clueless CMU is... by PPH · · Score: 1

      I'd have to agree. Even if one chooses to implement using a procedural language, OO analysis is extremely useful in understanding who does what to the data, when and how.

      Isn't CMU the home of SEI? The authors of the Capability Maturity Model? Back when I was with Boeing, our information systems (IS) people insisted that all* in-house s/w projects be developed using the CMM. Their (Boeing's) interpretation of the CMM turned out to be total garbage. But to top it off, when we (engineering) suggested that the actual authors of the CMM (that would be SEI) be brought in as consultants to help manage a CMM pilot program, the IS manager responded with, "SEI just developed the model. They don't actually have any experience doing software development".

      * 'All' included engineering managed projects, but they allowed certain exemptions from the policy. Namely s/w project developed by Boeing IS.

      --
      Have gnu, will travel.
  75. Re:so the wheels are coming of the OO band wagon t by hedwards · · Score: 1

    That was what I was wondering. Properly designed OOP should result in modular code that can readily be taken into a new program or modified. Sure, you don't have to program your Java using the objects and OO aspects of the language, but you could also write in C without the use of libraries or various defines as well, doesn't mean that it's fair to say that it's anti-modular though.

  76. Re:so the wheels are coming of the OO band wagon t by Travelsonic · · Score: 1

    "not easy to modularize and reuse?" What exactly do you mean by this? So far in my studies, I've been learning about making my classes as generic as possible just for the explicit possibility of finding use for it in another project, later on. 0_o

    --
    If you believe in privacy, and believe you have "nothing to hide" at the same time, you're a goddammed idiot
  77. Antiobjects by the+agent+man · · Score: 1

    A case made on when NOT to use objects and how to deal with a high degree of parallelism: http://www.cs.colorado.edu/~ralex/papers/PDF/OOPSLA06antiobjects.pdf

  78. First math and now OO... by Dcnjoe60 · · Score: 2

    A few weeks ago, there was a lot of discussion about how many universities are wanting to drop the math requirements from their CS degrees. Now we have dropping OO, too. I seem to recall that CS stands for Computer Science. Should not somebody with a Computer Science degree be able to handle things like OO and math? I could see dropping these requirements if the degree were something like Computer Technician or Computer programming (although even that last one, would indicate that a graduate would be verse in multiple programming paradigms).

    Is all of this a continued dumbing down of college so that the masses can get a degree? If so, it appears more and more technical jobs will go offshore as the next generation of true computer scientists won't receive their training in this country.

    On the other hand, if the goal is to pay a university a $100K to teach you how to do web pages and the like, then go for it. But, if the US wants to return to being a technology leader, then they need to focus on more than just the currently hot marketing skills and focus instead on the whole big picture.

    1. Re:First math and now OO... by bobaferret · · Score: 1

      Back in the day, and I'll assume now as well, CMU has a hell of a reputation as Comp-Sci school. Heavy on the theory. And Most definitely on par with MIT, UCB, and UIUC. Admittedly I came out of UIUC knowing how to build a web page. Of course this was because my room mate was busy porting Mosaic to c++/windows NT for the NCSA. Point being I think it's a safe bet that CMU's Comp-Sci dept. isn't focused on dumbing down their program.

    2. Re:First math and now OO... by marcel · · Score: 0

      Looking back at my CS University degree, I think the most valuable courses I had were those in computer structures (ie. what's an IRQ, DMA etc.), programming language design, CPU design, realtime systems, mathematical logic and some other courses. I did do an OO course and it was immediately clear that OO is just a thin layer on an existing language design, so dropping that and teaching the underlying structures would be a good thing (as universities should teach about abstract concepts, if you want hands on tutorials go to some college). As to dropping math: it depends, there's good math (coding theorie to explain checkums and chiphers for example) and non-appropriate math (differential equations, while useful, are not really needed to explain concepts related to CS). On the other hand, giving more abstract concepts to think about is not bad perse, but should be added if we have nothing useful to say. So dropping OO and replacing that with, say, differential equations, would make sense imho.

    3. Re:First math and now OO... by vanye · · Score: 1

      I am so glad I didn't get a CS degree - and in fact most of the people I hire do not have CS degrees. My BSc in Mechanical Engineering is far more useful to me as a VP of a software company than any CS degree. Engineering taught me how to think, how to design from a blank piece of paper, how to manage projects, how to work with people. I taught myself to write code.

      I want t hire people who can develop real world products not be the product of some well paid Dean's education experiment.

      Anyone considering a software job should think long and hard about a CS degree. It wont teach you anything that you'll need in the real world. Do a real science subject or a real engineering subject, not CS.

    4. Re:First math and now OO... by Dcnjoe60 · · Score: 1

      I am so glad I didn't get a CS degree - and in fact most of the people I hire do not have CS degrees. My BSc in Mechanical Engineering is far more useful to me as a VP of a software company than any CS degree. Engineering taught me how to think, how to design from a blank piece of paper, how to manage projects, how to work with people. I taught myself to write code.

      I want t hire people who can develop real world products not be the product of some well paid Dean's education experiment.

      Anyone considering a software job should think long and hard about a CS degree. It wont teach you anything that you'll need in the real world. Do a real science subject or a real engineering subject, not CS.

      I actually agree with you. For most programming jobs, one is better served with a degree in the field you want to be in and then add programming courses as electives. Computer Science degree graduates used to be the ones who applied theory to real life by, for instance, developing relational databases for others to program. Like physics, computer science used to be looked at as an applied mathematics field. It used to be viewed as a profession. Today, it has been turned into a trade school degree to get a job.

    5. Re:First math and now OO... by Dcnjoe60 · · Score: 1

      Back in the day, and I'll assume now as well, CMU has a hell of a reputation as Comp-Sci school. Heavy on the theory. And Most definitely on par with MIT, UCB, and UIUC. Admittedly I came out of UIUC knowing how to build a web page. Of course this was because my room mate was busy porting Mosaic to c++/windows NT for the NCSA. Point being I think it's a safe bet that CMU's Comp-Sci dept. isn't focused on dumbing down their program.

      Interestingly enough, MIT, UCB and UIUC still teach object oriented programming to freshman and sophomores. I wonder what CMU knows that the rest don't, or vice-versa.

    6. Re:First math and now OO... by Tablizer · · Score: 1

      A few weeks ago, there was a lot of discussion about how many universities are wanting to drop the math requirements from their CS degrees. Now we have dropping OO, too....Is all of this a continued dumbing down of college so that the masses can get a degree?

      It's not so much "dumbing down" but the fact that the world is getting more complex and there are more subjects to learn, both practical and theoretical. Something has to give because only so much fits into 4 years.

      For example, you used to just have batch processes, and then interactive computing came along, then relational databases, then GUI's, then web, then cloud computing and parallelism got practical due to technology, etc. Yet one still has to know how to do batch, interactive, relational, GUI, and web while learning the new stuff also.

    7. Re:First math and now OO... by Dcnjoe60 · · Score: 1

      A few weeks ago, there was a lot of discussion about how many universities are wanting to drop the math requirements from their CS degrees. Now we have dropping OO, too....Is all of this a continued dumbing down of college so that the masses can get a degree?

      It's not so much "dumbing down" but the fact that the world is getting more complex and there are more subjects to learn, both practical and theoretical. Something has to give because only so much fits into 4 years.

      For example, you used to just have batch processes, and then interactive computing came along, then relational databases, then GUI's, then web, then cloud computing and parallelism got practical due to technology, etc. Yet one still has to know how to do batch, interactive, relational, GUI, and web while learning the new stuff also.

      Then a better solution, if there is too much to learn in 4 years, is to change CS into a 5 year program. That's what they've done with accounting and a number of other majors. Instead of dropping things, they added what was considered necessary for a complete package.

    8. Re:First math and now OO... by Tablizer · · Score: 1

      Or, specialize a bit. Different schools could focus on certain aspects of the field rather than try to cram in everything.

    9. Re:First math and now OO... by Arterion · · Score: 1

      At my school, we have Computer Science and Computer Information Systems. One is in the College of Math and Sciences, the other is in the School of Business. With the CompSci degree, you basically end up with a math minor built in. I think CIS only requires College Algebra. One of focused on business application, the other is focused on the academic study of computer science.

      It's really different markets. If you wanna do system programming, write drivers, software that does non-trivial computations, write libraries, etc., you need Computer Science. If you only need to implement a front-end for it all, basically using what's in libraries and implementing business logic, then you can get away with CIS, and know enough about "business" to make it fit in. Sure, there might be ugly hacks sometimes...

      It's like Engineer vs Technician. Car Analogy: You hire a mechanic to fix your car, and it does it efficiently, and he knows that business. Sure, the engineers that designed it probably could do it, but it's not going to be a pretty picture.

      --
      "That which does not kill us makes us stranger." -Trevor Goodchild
    10. Re:First math and now OO... by Eli+Gottlieb · · Score: 1

      You did notice that this is Carnegie Mellon University, the best school for Computer Science in the United States, right? CMU has not dropped their math requirements, and they've dropped OO because they want to teach structured programming first, followed by functional, followed optionally by OO.

  79. Academics by Major+Variola+(ret) · · Score: 0

    Ha ha ha, CMU frosh! You will now see academic wannabe-mathematician types in your first year! Wee! I had Scheme and CLU and Multics. Guess what: every Ivory Tower CS prof is going to inflict their bias and history on you. You will have to learn useful skills outside. Only occasionally will you recall utility from the classes, and the utility will have been developed by 'commercial' languages because they actually need it, its not just more Wordsmithing. Remember: Academics get paid for wordsmithing and grant-grabbing, sometimes teaching; not building things. Study and contemplate, but keep it in perspective. Just look at the abstract crap in the CMU screed.

  80. Perverted modules by hendrikboom · · Score: 1

    Object types aren't particularly antimodular. They're not particularly promodular either, any more than functions are.

    That's one of the things I like about Modula 3. It has modules. It has object types. And they have nothing to do with each other.

    What gets to be antimodular about object types is the idea that they are the only kind of module. Some languages enforce this, meaning that everything that has different natural modular structure has to be perverted to fit into the object type formalism.

    -- hendrik

  81. Re:so the wheels are coming of the OO band wagon t by stanlyb · · Score: 1

    Try to use some more complicated template, make some unconscious mistake, and then try to find out at runtime WTF the error message means!!!!!

  82. ha by nomadic · · Score: 1, Redundant

    That's why Carnegie Mellon's computer science program has such a poor reputation in the field.

  83. OOP and Software Engineering by Anonymous Coward · · Score: 0

    My view is that OOP is a better response to Structured Analysis and Design (you
    remember Yordon/DeMarco?) than it is to general programming. You know those big projects where some Manager who does not understand that english is not a very good language for explaining what the EXACT requirements are. He does not understand programming at all. He is very insecure about what those "programmer geeks" are doing. Demands a big and mostly incomprehensible SRS (System Requirements Specification) because that is what a Structured programming project
    needs. Can be convinced that a UML document does indeed reflect what he has
    said he wants and the programmers can be convinced that they understand what
    the UML diagrams mean.
      Ignoring the problem that the manager seldom understands what it is he needs,
    this helps, but does not resolve, some of the issues around the interface between
    the customer and the developers.
        It does not come close to resolving all of the problems with a software project.

  84. Science vs Engineering by jasnw · · Score: 1

    When I was an undergrad (when dinosaur ranching was still on the aggie curriculum) there was a fledgling computer science program in Liberal Arts and a strong program in Engineering. I still think there is a distinction between Computer Science and Software Engineering, similar to a distinction between Physics and Electrical Engineering. Both cover a lot of similar ground, but in a different manner and with very different focus. They also produce very different products (graduates). In a real Computer Science undergraduate curriculum, OOP should be covered as one paradigm for implementing theoretical thingies like command and data structures. One of MANY such ways. In a Software Engineering curriculum, OOP would be one of the tools learned in order to craft software.

    So, I don't get all a-flutter with this particular FA. In fact, it makes a lot of sense in the context of science (theory) vs engineering (practice). Yes, a CS graduate may not be able to code up something in the latest language-du-jour, but I'd hire one of them if I was wanting to build a new OS or a new command/control language. If I want someone who can get down and dirty to build a serious software widget or system, I'd hire an engineer.

  85. Re:so the wheels are coming of the OO band wagon t by edxwelch · · Score: 1

    That's just your opinion. In my opinion OO does suit ever type of programming problem. If you read a bit further they say that the object oriented programming module is replaced by a object oriented design model, so the wheels are not coming off

  86. Design Patterns by Software+Geek · · Score: 1

    The widespread use of "Design Patterns" is useful in explaining why OO should NOT be taught to college freshmen.
    I view design patterns as an alternative methodology to OO methodology. Design patterns allow the productive use of OO languages without the unproductive baggage of OO methodology.
    OO languages were originally created to facilitate the pre-existing ideas of OO programming and OO design.
    Then, when programmers actually had these languages, they evolved a way of using them that is radically different than what was originally intended.
    Clearly, there is enough value in OO that the languages are worth using, and enough difficulties that the methodologies are not worth using.
    I expect that the next generation of tools and methodologies will take what is good from OO, and forget the rest.
    In the mean time, I don't see the value of explaining to college freshmen a set of tools that were meant to be used one way, but in practice should be used a different way. (Actually, I do think that is a valuable lesson. But I think most freshman level courses treat the techniques being taught as unambiguously good.)

    1. Re:Design Patterns by wootest · · Score: 1

      I've heard design patterns referred to as recipes. If that was the case, it'd all be well and good; people can learn 20 recipes and be essentially set for life, without learning to really cook as such. But that's not it entirely.

      Design patterns are more equivalent to a step in a recipe or a cooking technique: Peel something. Dice something. Make a reduction. Whip cream. If you don't know how to assemble them in the right order, or where to add the actual ingredients, you're not going to make it as a programmer.

      Good programming often does include some design patterns; nearly all programs do. But just going through a list of them doesn't teach you to do anything. If you already have an inkling of where to go, maybe learning a particular design pattern can nudge you further in the right direction, or fill in a blank. But they don't put the key in the lock and turn it.

    2. Re:Design Patterns by Software+Geek · · Score: 1

      Good programming often does include some design patterns; nearly all programs do. But just going through a list of them doesn't teach you to do anything.

      Design patterns (or OO for that matter) do not provide any help with actually making a program work. They are solely about organisational concerns. They assist in making large codebases readable, reusable, and maintainable.

      The distinction, at least in my mind, is that OO focuses on 'natural' objects and design patterns focus on 'artificial' objects. Natural objects exist in the business domain of the program. Things like Manager is a subclass of Employee is a subclass of Person. Artificial objects do not exist in the business domain. They exist purely to solve programming problems. Thing like Singleton, Visitor, and Facade.

      In either case, they are specialized tools for solving specific problems.

    3. Re:Design Patterns by wootest · · Score: 1

      In either case, they are specialized tools for solving specific problems.

      Exactly. And if you don't know how to program practically in the first place, they still won't help you. They'll help you out with specific problems (I need to let other parts of the program know about when this happened), but you need to know to think in terms of having those problems (I'm going to have to need different parts of the program, with one part doing this and one part doing that) to start with.

  87. What you're describing sure seems like OOP... by Anonymous Coward · · Score: 0

    In other words, an SML signature is what OOP calls an interface? (Okay, sure, Java forces all objects to support stringification and comparison for equality, but that's not really a fault in OOP.)

    Of course, one has to recognize that extends is evil:

    Someone asked [James Gosling]: "If you could do Java over again, what would you change?" "I'd leave out classes," he replied. After the laughter died down, he explained that the real problem wasn't classes per se, but rather implementation inheritance (the extends relationship). Interface inheritance (the implements relationship) is preferable. You should avoid implementation inheritance whenever possible.

    1. Re:What you're describing sure seems like OOP... by naasking · · Score: 1

      Not at all. For instance, interfaces can't declare type members. Well, they can in Scala, but Scala was designed with ML modules in mind. Every mainstream OO language was not.

  88. magic cool aid by t2t10 · · Score: 1

    These people have been drinking too much magic cool aid. Verification of software has never and will always be an obscure, special-purpose technique; it will never go mainstream, not just because it doesn't actually work, but because few people are capable of doing it. And ML-style functional programming has been around for ages and has never amounted to much either.

    And to say that "object-oriented programming is anti-modular and anti-parallel by its very nature" is idiotic; whether it is modular and parallel depends on the abstractions you implement in it. Of course, you can't automatically parallelize arbitrary messy object-oriented code. But, you know what? You can't even parallelize arbitrary functional code well in the real world (even though theoretically it looks like you ought to be able to).

    If people want to teach functional programming as part of an introductory class, they should go back to the tried-and-true: Scheme and SIPC.

  89. April 1st? by Anonymous Coward · · Score: 0

    Awful close to April 1st

  90. Re:so the wheels are coming of the OO band wagon t by mjwalshe · · Score: 1

    Does PIC device programming fit the OO paradime NO and neither does 90% of technical programming or at the high end does IBM Mainframe assembler work with OO NO.

  91. not true at all by OrangeTide · · Score: 1

    When I interview fresh grads, the ones from CMU consistently score better. I have even commented on this to coworkers quite a while ago. It's not an isolated incident, literally dozens of candidates impressed me with their grasp on embedded, kernel and system programming. Usually I'm disappointed by the people I interview.

    --
    “Common sense is not so common.” — Voltaire
    1. Re:not true at all by nomadic · · Score: 1

      Yeah, I know, it has an MIT/IIT/Stanford-level reputation. I was just trolling, seeing if any outraged CMU posters would say anything.

  92. Re:so the wheels are coming of the OO band wagon t by mjwalshe · · Score: 1

    I am a bad programmer because i don't blindly apply one model to every problem ?

  93. what do the members of the Alice.org project think by Locutus · · Score: 1

    Alice.org is an OO graphical environment for teaching programming and it's a CMU project too.
    If you don't recall, Randy Pausch was the Director of the Alice project.

    LoB

    --
    "Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
  94. PL/1 by istartedi · · Score: 1

    When I was in highschool, a friend asked me if I was interested in taking an extra-curricular course in PL/1 with him. I thought about it, and decided that by the time I got into the workforce it might be dead.

    Four years from now, several of the technologies you mention will probably not be dead; but they may not be hiring newbies either. Four years? Even though tech is a lot more mature now, that's still a long time.

    Academics is at its best when it sticks to the things that don't change. Teach the students stacks, queues, lists, structures, and yes even objects. Teach them in a language-neutral way. When they get out, they'll recognize these things in whatever flavor happens to be popular that year.

    --
    For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
  95. I am confused... by AqD · · Score: 1

    If they are going to teach about abstraction... couldn't it just be extended to implement OO? What's the conflict at all? Besides, people can do OOP with parallel-functional languages such as Erlang too - just in a not-so-conventional way. Nobody says OOP must be implemented in the language level with all the boring words like "class", "inherits" etc...

  96. LOL! People think that OO is TOO HARD for freshmen by Anonymous Coward · · Score: 0

    OO is no more difficult than the calculus that freshmen have to learn - the argument that OO is unusually difficulty\crazy is moot.

    Most of the programming co-ops that CS students will apply to will be OO programming - so the argument that CS students shouldn't learn OO early on, is also moot.

    Finally OO programming is not dead, in fact, OO puts the OO in GOOD.

  97. Hunh... by Anonymous Coward · · Score: 0

    While I agree that OO programming isn't needed and even complicates some things. I have to say that OO programming is something the really needs to be taught early on.
    OO programming is not so much a a method of programming, as it is a way of organizing data. And data organization is the fundamental purpose of Computer Sciences. To remove OO programming or just make it optional, is the equivalent of training a carpenter without ever teaching him to use screws. Sure he can get by with a hammer and nails. But for many projects he will be crippled having to do things the hard way, or use complicated workarounds to accomplish some fairly easy OO tasks.
    Note: I also don't advocate that the reverse be done either. Where you teach only OO programming. (this is what I believe Java attempts to do) This is just as bad if not worse in many ways.

  98. Re:so the wheels are coming of the OO band wagon t by phantomfive · · Score: 1

    Wow, you said that and got modded up. Times are changing. Nearly a decade ago, someone posted this link and tried to defend why OOP was bad. He was mocked soundly, including for the battered Spock image. Unfortunately I couldn't find that story.

    --
    "First they came for the slanderers and i said nothing."
  99. Let the non-OO design paradigms catch on first... by Anonymous Coward · · Score: 0

    I think OO is still quite relevant because of the design methodologies that have grown up around it that help you model real-world problems. Like UP, for example. So when other methods of modeling problem domains come up around certain languages (or alternatively produce certain languages) that catch on and show that can do as well or better in modeling real-world problem domains than current OO languages and the design methodologies that presume an OO paradigm, I'll be on board. Until then, color me skeptical of the OO critics.

  100. This is total bs.. by T-Mckenney · · Score: 1

    If you can't figure out how to unlock the extremely valuable aspects of OOP, then you have no business in the CS field. I've built objects to wrap API's that have solved more problems than using sequential-oriented programs. Every used Model-View-Controller Programming? Talk about Powerful. And is all OOP-based.

    1. Re:This is total bs.. by shutdown+-p+now · · Score: 1

      MVC does not require OOP. Models, views and controllers are architectural layers, and may or may not be represented as objects.

  101. Not so radical by woan · · Score: 1

    Is this really different from the Berkeley Intro to CS (CS61A) being taught around Scheme before getting into Data Structures and OO (CS61B) in the second semester? I think the third course in the series(CS61C) is C and assembly. I think this has been the case since 1989 when I graduated. http://www-inst.eecs.berkeley.edu/~cs61a/sp11/ http://inst.eecs.berkeley.edu/~cs61bl/sp11/ http://www-inst.eecs.berkeley.edu/~cs61c/sp11/ MIT only switched to Python from a similar curriculum upon which the Berkeley one is based a few years ago because of a robotics API and they wanted to standardize the intro course across different majors, I was told.

  102. Re:so the wheels are coming of the OO band wagon t by Anonymous Coward · · Score: 0

    Making everything OO is silly. 50% of programming is simply to simple to benefit from being OO. Another 10% needs to be to optimized for OO. That other 40% is probably the reason we should teach OO. But we shouldn't teach just OO. It's school - you should teach all major programming models.

    What most schools need to do is teach their students how software goes together in the real world. You get all these CS grads that can write little scripts but when faced with putting together something complex they completely fail. Syntax is just syntax. If you grasp the basic concepts you can figure out the syntax but if nobody teaches the concepts your not going to succeed. Highschool is a better place to teach programming concepts anyway. If you don't get them before college your probably not going to get them. I'm sick of schools pushing through CS grads that are totally unsuited to it.

  103. Re:so the wheels are coming of the OO band wagon t by edxwelch · · Score: 1

    Yes it does. OO is a general programing technique. Programmers in certain domains may choose not to use it, but that's a purely culture thing

  104. Re:so the wheels are coming of the OO band wagon t by narcc · · Score: 1

    So far in my studies, I've been learning about making my classes as generic as possible just for the explicit possibility of finding use for it in another project

    It's a myth. Attempts to make as many of your classes as generic as possible will lead you ultimately to the dreaded ill-conceived in-house "framework".

  105. Hmm by Theotherguy_1 · · Score: 1

    I'm very glad I managed to make it through Carnegie Mellon's CS program (graduating in a month!) before this change. All of my introductory courses were taught in Java, though apparently the freshman last year switched to Smalltalk and python, without any focus on object-oriented programming. I'm not sure if it was a good or bad thing to be taught object-oriented programming first. I've been told that I write C++ and Python with a "Java accent," but in my opinion, this just makes my code infinitely more readable and modular than it would be otherwise. At the same time, I've had employers complain that I've abstracted too much of my code with OO to improve readability at the cost of a large amount of performance overhead. However, OO is just such a useful paradigm that can be applied to so many useful things, that I think its a shame that our department is no longer going to focus on it.

  106. Re:so the wheels are coming of the OO band wagon t by shutdown+-p+now · · Score: 1

    There is a lot of middle ground between making everything OO, and throwing it out completely. I think that it is important enough (if only due to sheer prevalence today) to be a required study. Sure, put it alongside Scheme (or Haskell) and Erlang for more breadth.

    And the claim that OO is "both anti-modular and anti-parallel by its very nature" is plain silly. The whole point of OO is modularity, and parallelism is only an issue with non-encapsulated mutable state; but you don't need mutability in OO (see also: Objective Caml).

  107. Another CMU Perspective by JonathanAldrich · · Score: 4, Insightful

    As some readers may have guessed, "anti-modular," "anti-parallel," and "unsuitable for a modern CS curriculum" are one person's opinions, and do not represent the majority view of the CMU faculty. The introductory curriculum was changed away from Java for different reasons: primarily to focus on a language (Python) with simpler syntax and dynamic types, and to supplement with material on C that is closer to the machine. For more details, see a report by the SCS Deans:

    http://reports-archive.adm.cs.cmu.edu/anon/2010/CMU-CS-10-140.pdf

    Whatever you may think about delaying OO--and opinions are mixed at CMU as everywhere--one advantage of the new curriculum is that the sophomore-level course can do OO design more justice than we were ever able to do in the prior intro sequence, since the students already know how to program. Modularity and parallelism are in fact major emphases of that course, which I and other CMU faculty are currently developing.

    1. Re:Another CMU Perspective by Anonymous Coward · · Score: 0

      If I define modular as having reusable components with no compile time dependencies between interfaces, then I would say OO is anti-modular because using interface inheritance requires one to pull in the interface module at compile time and implement it. To really split the concerns one should merely use callbacks through function signatures and partially apply existing functions to fit the signature. This makes only link-time dependencies. In the OO world's attempt to promote use of interfaces to promote reuse, I have found that it actually increases coupling and prevents reuse!

    2. Re:Another CMU Perspective by Anonymous Coward · · Score: 0

      You mean this is really not a major philosophical decision, but a minor practical one?

      Killjoy.

  108. Re:so the wheels are coming of the OO band wagon t by mjwalshe · · Score: 1

    True i wasn't saying it doesn't have its uses but it (OO) is abused in areas where it doesn't really add value and try doing OO on a PIC12F1822 :-)

  109. UIUC, mid-90s, intro to comp sci (CS125) by jackgrass_jr · · Score: 1

    I experienced this in college. Our introduction course at UIUC used Scheme on NextStep workstations. It didn't go well. Many of my classmates were livid. They viewed FP and Scheme as useless. "A recruiter laughed when he saw Scheme on my resume", was one comment I recall from the frequent rants about the subject on the course newsgroup. A few were completely perplexed. The average score on the first major exam was horrific and jarring - and this is in a top-tier CS program. Additionally, unless they chose an AI concentration, this course was the last time these students used FP. My guess is that a number of otherwise talented individuals became, at the very least, disenchanted about Comp Sci or even computing as a career, because of their experience in this class. Was that FP/Scheme learning curve/speed-bump/road-block really necessary? I guess the faculty decided "No" : By 1996(7?) the course was overhauled, and they switched to Java.

  110. Don't we have 15-212 for that? by Anonymous Coward · · Score: 0

    As an alumni, I don't think it's a good idea though. I guess they are trying to replace 15-111 with functional programming. The most important concept for programing I think is the ability to think systematically. The best first step IMO is to learn procedural programming. Yep back to the basic. No designing crap. That's the most natural way to think about programming. This is more for people other than CS major though. Probably worth half a term. Smart ass CS frosh are most likely to skip this course and take 15-2xx anyway.

    The design of OO is covered along with various data structures and algorithm in 15-211. And 15-212 cover functional programming and 15-213 cover system programming stuff. These three course are most likely the pinnacle of programming aspect any CS major (Mathematical aspect is covered in some other courses). Course number may have changed now.

    1. Re:Don't we have 15-212 for that? by bschmer · · Score: 1

      My thoughts exactly. Who cares what they teach in 111, there are other classes that teach difference nuances of programming (15-412 and 15-451 were a couple of my favorites). Now if they announced that they weren't teaching OO to *any* students, I'd have to start scratching my head....

  111. What's W3 Consortium's excuse? by colinrichardday · · Score: 1

    At least the TeX User's Group doesn't take three years to implement a new version

  112. Anti-Modular, AND Anti-Parallel too?? Nope by Anonymous Coward · · Score: 0

    "I can't think of anything specific about OO that makes it poorly suited to parallel programming." - by msobkow (48369) on Saturday March 26, @08:30AM (#35621216) Homepage

    Agreed, 110% - especially in a language that uses multiple threads & has thread-safe components. About the ONLY thing I can think of that "blocks parallelism", is when you have a process or data that doesn't allow for it, ala:

    A = A+B
    B = B+C

    (That's one example, perhaps NOT the "best" one, that shows that much which I speak of... i.e.-> You cannot put A, & B on separate threads, because A has to wait on B completing its result calculation, first, etc.)

    ---

    Again on this note of "modularity"? I agree with you as well, & I truly AM "confused" here myself:

    "Apparently the meaning of "Modular" has changed since I was in University back in '82. OO used to be the epitome of modularity." - by msobkow (48369) on Saturday March 26, @08:30AM (#35621216) Homepage

    Right on, & I went to "U" first time 84-88, & then again 91-92, & lately again 09- this summer to finish (gotta get the coins together ontop of taxes/utils/bills etc.-et al, to finish)...

    Heck - on this note, in fact?

    Well, I always THOUGHT that objects where absolutely useful in modularity... even more than separated utility class units, & especially on relatively "LARGISH" projects!

    (Like you see in "Enterprise Class sized systems", of which to date professionally, I've built almost 30 now in my time professionally in the MIS/IS/IT end of things).

    APK

    P.S.=> I've never claimed to be "the greatest programmer", because I honestly do NOT believe there is such an animal... only harder & more focused + experienced workers with data &/or processes involved more than anything else which might make you 'great'... this? Takes time & experience imo... I can "get the job done" is my "personal estimation" of my self here.

    So, perhaps these profs. & their "grounding in theory" (more than actual practice" professionally) is where this is coming from... pure "theoreticals" (which ARE helpful, I am not going to say they're not - collegiate academia saves you YEARS of work that way in mistakes or trial & error)...

    In fact, I feel it saves you from Edison's "1% inspiration, 99% perspiration" because with a GOOD algorithm & some thought? You cut that "99% perspiration" & frustration, to probably 40% @ most, imo @ least! apk

  113. Re:so the wheels are coming of the OO band wagon t by SETIGuy · · Score: 1

    There's a difference between not starting with object oriented programming and turning out computer science grads that have never been exposed to object oriented programming. The former is just fine. The latter is just stupid.

    I guess it's the difference between whether you're turning out software engineers or whether you're turning out programmers. A programmer might only need to be able to understand a specific language or language family. A software engineer should be have a firm basis in every common language family, be it procedural, functional, object oriented, etc...

  114. Re:so the wheels are coming of the OO band wagon t by Anonymous Coward · · Score: 0

    So far in my studies, I've been learning about making my classes as generic as possible just for the explicit possibility of finding use for it in another project

    Which makes the point of GP. You're trying to solve problems that don't yet exist, and that are not in your specs. That's what I call bloat.
    I'm not talking about creating a library. A library should proactively allow reuse and be as generic as possible.
    Plus, your provisioning of multiple, imagined, potential, uses drags one into creating one-size-fits-all. Imagine everyone does. Crazy. How is that modular?

    Think about print_helloworld. You do a method print.print_helloworld. Fine. What for? Because you also have printleft.print_helloworld printright.print_helloworld and printuppercase.print_helloworld and printlowercase.print_helloworld, or print.lowercase.lefttoright.print_hello_world and so forth?
    Modular would be print_upper (print_righttoleft (print_helloworld)).

  115. Small correction/edit on MY part ("mea culpa") by Anonymous Coward · · Score: 0

    "You cannot put A, & B on separate threads" - by Anonymous Coward on Saturday March 26, @08:07PM (#35625916)

    Aoologies to anyone who reads this, I have not been expressing myself well lately... that should have read "it's not PRACTICAL to do so, in separate threads"

    (No gain results)

    APK

  116. Full circle by cephus440 · · Score: 1

    I like many other programmers that have been around for a while have seen this come full circle again. I remember when Turbo Pascal became more OO and in my teens I spent a summer learning how to develop less procedurely and more OO. At the end of the summer I re-wrote a lot of code and in the end thought that it wasn't worth it. I know a lot of developers who develop procedurely in a OO language. While that frustrates me when I have to work on their code, it does show that OO isn't the only way to get the job done. Similarly is architecture, I code using MVVM like it's a religion. Hardly the fastest and most productive way to get something done, but at least when someone has to work on my code, they know where to find what they're looking for. May God help the poor soul that has to dig through my old FORTRAN code.

  117. Freshman? by c10 · · Score: 1

    Just one student?

  118. Mathematical foundations is not dumbing down by Anonymous Coward · · Score: 0

    First of all, Bob Harper is one of the leading programming language researchers in the world, so let us cut the man some slack. He has been working on programming languages and logic since the 80's, so this isn't some new fad he read about in a magazine and then decided to try out on a whim. People like to slam researchers because they can't do anything practical, which might be true sometimes, but I can assure you that Bob can code. Saying that CMU is dumbing down the program because he wants to teach something closer to the mathematical foundations instead of specific tools or OO is just so wrong that I don't even know where to start.

  119. Think SML, not C by Anonymous Coward · · Score: 0

    Why the language designers of other popular languages have chosen to conflate the module system with the objects themselves is a mystery. Bob Harper knows what a proper module system is, he's one of the designers of Standard ML.

    Can you suggest a method to teach undergraduates so that they can take this large blob of mud and clearly see that there are several orthogonal concepts hidden in there, and there is no inherent reason that you have to bunch it all together, effectively making it impossible to have modular non-objects?

  120. Multiple inheritance by Anonymous Coward · · Score: 0

    You are conflating implementation inheritance (bad) and the type system bits that are necessary for multiple inheritance. At the type system level there are no fundamental problems with multiple inheritance, but it gives you plenty of rope to shoot yourself in the foot with.

    Perhaps programmers can not handle multiple inheritance, and should never ever be given the option to have it. Another wild idea is that perhaps programmers should have other tools than just subtyping and objects in their language, and apply each tool when they have a problem that fits the particular tool.

    Personally I hate it when my carpenter brings out the chainsaw to fix the nails that are coming out of my wall. I'd much prefer that he used a hammer for that particular problem instead.

  121. easier != better for all cases of easy by Desert+Raven · · Score: 1

    And OO is not a complicated extra of programming, it is a simple ideology that makes programming so much easier when you know it.

    I'll admit that OO does make programming easier in the long run. Though to do it right, you MUST spend a fair amount of time planning before throwing down that first line of code.

    However, OO is just not suitable for all programming tasks. I currently work with an app that processes over 70,000 transactions per second. I doubt I could get a tenth of that performance with any OO language. Even in C, I spend quite a bit of time looking for ways to cut down on the number of conditionals, etc, since eliminating just one IF statement in the right place can get me as much as a 5% performance increase.

    I fully agree that one should learn to program well procedurally FiRST, before tackling OO. If you don't have a firm grasp of that basics, you will never reach your full potential/

    1. Re:easier != better for all cases of easy by wisnoskij · · Score: 1

      Well I agree that OO cannot be used for all tasks, but to program procedurally (as well as OO) "well you MUST spend a fair amount of time planning before throwing down that first line of code".

      --
      Troll is not a replacement for I disagree.
  122. OO too easy to do wrong by Tablizer · · Score: 1

    Your experience seems to reflect a general observation I have: "OOP is difficult to get right". Maybe it's grand and wonderful when you do get it right, but how to find "right" could be a long and winding path.

    There are too many ways to do OOP wrong and not enough time-tested guidelines to flag those wrong ways to put one back on track.

    Maybe OOP is the building block, the atom, for some greater new idea or paradigm. But until that second layer comes along to tame the current OO jungle, people will continue to turn gray trying to get current OO to work for real-world problems.

  123. Who cares? by Anonymous Coward · · Score: 0

    Central Michigan University isn't that important anyway.

  124. Re:so the wheels are coming of the OO band wagon t by maxwell+demon · · Score: 1

    Try to use some more complicated template, make some unconscious mistake, and then try to find out at runtime WTF the error message means!!!!!

    First: Templates are not OOP. That doesn't mean you cannot use templates with OOP, but they are as much OOP as C++ ints are OOP (you'll nevertheless use them in OOP in C++). The most template-heavy part of C++, the STL, is exactly the opposite of OOP (while OOP combines data and operations, STL separates them as fas as possible). Indeed, one of the primary authors of the STL, Alexander Stepanov, has publicly expressed his dislike of object orientation.

    Also note that the templates you'll use in conjunction with OOP will typically be extremely simple, and thus not give you those complex error messages. It's when doing generic programming, generative programming or template metaprogramming when you write complicated templates and thus have to deal with those error messages.

    --
    The Tao of math: The numbers you can count are not the real numbers.
  125. Objects-first under heavy fire by Novus · · Score: 1

    The extremest form of emphasis on OOP in teaching CS, objects-first, as seen, for example, in Kölling's Objects First with Java, has been heavily criticised lately in the computer science education community. One recent visible critique was Moti Ben-Ari's Objects Never? Well, Hardly Ever! (PDF, unofficial version to avoid ACM paywall), (paywalled official ACM version).

    Similar things are happening at my own university, where objects-first has been seen as an important preparation for future programming work. The CS course for engineering majors who won't be doing any more programming switched from Java to Python and covering OOP briefly at the end of the course; the CS course for CS majors and others who will be studying more programming is due to do the same this autumn.

  126. one roundhouse rule by epine · · Score: 1

    Holy crap. I just spent an hour on that site and I still can't accurately summarize what this guy wants.

    Holy crap. I just spent ten minutes on that site without detecting a topic sentence that sets up statement of solution to follow statement of problem. The guy is relocating another fence post in every paragraph—without tending any livestock. All auger, no cattle.

    I can do better in an off-the-cuff Slashdot post.

    Thesis: there are many programmers out there who are religious about the ODR (and rightly so) but couldn't give a rat's ass about the OPR (one predicate rule).

    The OPR has roughly the same importance in grappling with concurrency that the ODR has in grappling with consistency. By OPR violations I mean those sloppy loops where a predicate in the main loop control is spelled out again either before or after the loop to clean up a left-over fence post (of the N+1 kind). Often it's just i < MAX or something as simple and one repetition doesn't seem to do much damage. Often it's
    complex_guard && test_expression (consumption_side_effect_expression)
    so it's ugly if more of this is spelled out twice for a second time in a reiterative loop. Often, it's something as simple as i < MAX, but it should have been as ugly as the second case. Honey, contact Charlton Heston on the Ouija board, I'm changing sides.

    My bug production rate went from low to exceptionally low on one reading of one chapter of one of Dijkstra's books: if I can't throw a dart at a page of source code, then mentally construct a correct expression for the number of times that execution point is reached (as a function of suitable variables representing the initial condition) then I'm doing it wrong

    I also believe in single loop entrance, single loop exit, so to achieve this condition, I have to work for a living. There are few viable solutions under these constraints, and none without clarity, sometimes by means of a profusion of well-named boolean variables (that transcend almost to literacy).

    CMU is onto something here. I'd replace everything I know about OOP with one course on how to write a formally provable exception-safe generic container with iterator: OOPS 101.

    If only Dijkstra were alive today, he'd write one acidic chapter of one acidic book on the subject, and I'd be enlightened forever.

    In my toolkit, OOP is good for exactly one thing: eliminating ugly repetition of manifest switch-case statements (ORR: one roundhouse rule), if it can't be resolved at compile time through genericity.

    1. Re:one roundhouse rule by epine · · Score: 1

      Every thousand posts or so, I learn something by reading what I've just written.

      The problem with many manifest switch-case statements is that the code is shunting code streams on object identity rather that algorithmic requirements and object pre-conditions. Never thought about it precisely that way.

      In many problems, the precondition mesh is extremely straightforward, such that if you exhaust everything you're allowed to do, all that remains is to test whether the algorithmic post-condition is satisfied, and you can go home. Sometimes the set of possible operations is potentially unbounded, so you also have to write a predicate to enforce advancing the variant.

      In specialized cases, the order in which possible operations are performed is critical to algorithmic performance. The classic case is qsort() where you can recurse into either the short or long sublist without violating qsort() correctness. If you go the wrong way, your stack growth will resemble an AT&T iPhone bill from your European vacation.

      I think most programmers regard all predicates as created equal. Not even close. Some predicates protect correctness, some exist only to influence the order in which viable operations are sequenced for efficiency in time, and some are subtle like the qsort() example, which serve to remind the working programmer that ivory tower conceptual elegance lives in a world with friction and mass.

      Most imperative programs, even the correct ones, actually over-specify within the set of viable/preferred execution paths. You soon discover this when you try map to the concurrency domain: all your other processes have blocked waiting on a step that didn't need to be the one and only place to begin.

      When you serialize your program code into a directional symbol system (English, Arabic, Chinese have everything in common except the compass point) you're forced to put all statements in defined order: A serializes in front of B, or it doesn't.

      I once read an illuminating paper by Hilary Putnam (or maybe it was just an anthology he edited) where it discusses artifacts of different ways to formalize the integers in set theory: in either of the two formalisms discussed, integers were represented as sets, so you could legally ask whether 3 was a subset of 7. In one formalization x clean formalization.

      This happens all the time writing statement A in front of statement B, when you would be just as happy if B executed first: serialization (of the notation) made me do it.

      Even in non-concurrent programs, I always ask my predicates and statement blocks if they are SER or PAR regimes.

      I've never had much respect for the tributary of formal CS which is strongly monotheist: prominence of theoretic virtue, ignoring death by underperformance in the real world.

      What they don't teach you in school:

      One particularly interesting kill [by an F4U Corsair] was scored by a Marine Lieutenant R. R. Klingman of VMF-312 Checkerboards, over Okinawa. Klingman was in pursuit of a Kawasaki Ki-45 Toryu ("Nick") twin engine fighter at extremely high altitude when his guns jammed due to the gun lubrication thickening from the extreme cold. He simply flew up and chopped off the Ki-45's tail with the big propeller of the Corsair. Despite missing five inches (127 mm) off the end of his propeller blades, he managed to land safely after this ramming attack. He was awarded the Navy Cross.

      I can't find exactly the quote I'm looking for, but this was the gist of it, again from the bathroom wall of all knowledge:

      With the extreme agility of the Zero, the Allied pilots found that the appropriate combat tactic against it was to remain out of range and fight on the dive and climb. By using speed and resisting the fatal error of trying to out-turn the Zero, eventually cannon or heavy machine guns [] could be brought to bear and a single burst of fire was usually enough to down it. ...
      Another important maneuver w

  127. Hurray for Sanity!! by VirtualJWN · · Score: 1

    I am all for things like "objects" for non programmers to create code with, but those modules should have solid code behind them, and until we have true quantum or parallel computing, object oriented code is not ever going to be optimized. Processors still process sequentially, so the code to run properly and to understand good coding should be taught that way. This is similar to the CompTIA A++ cert dropping the need to know DOS to get the cert. If you even BUY the idea that "certs are good", dropping DOS from a diagnostic standpoint is ludicrous. I know people with the “whole boatload” of Microsoft Certs who could not find their way out of a paper box. And have the customer skills to match. C++ is a bastardization of the “C” language and always will be. It rides on the solid reputation of “C” as does “C#” and any other derivative. When the I/O and basic tenants of a language are changed, then it is no longer the language. Call the language something else like “D” “C"s predecessors were “A” and “B” at Bell Labs. If these “NEW AND BETTER “ solutions truly are, then give them a new name and let them survive or fail with them.

    --
    "Any sufficiently advanced technology is indistinguishable from magic." - Arthur C. Clarke
  128. Re:so the wheels are coming of the OO band wagon t by mjwalshe · · Score: 1

    Oh I agree that you do need to know about OO but from the comments on similar stories on here and stack over flow it appears that a lot of CS degrees are turning out programmers and not rounded software engineers.

  129. OO isn't modular? by Anonymous Coward · · Score: 0

    I've always considered OO programming to be an example of modular programming. True you have to remember "inherritance" and relationships, but it sure beats having to program the basic routines in C that are already done for you.

  130. x++ safer than ++x by Anonymous Coward · · Score: 0

    I wouldn't say that they're equally clear, especially if you're used to languages which don't have these operators. In Python for instance, ++x; and --x; are accepted but effectively no-ops (two unary operators chained), and x++; and x--; are syntax errors. If you see the latter for the first time while reading C, clearly there's something you don't know happening, rather than some conversion along the lines of +x or !!x that just throws away the result. Also, if you're switching between C and Python, and you use ++ by mistake, you want it to be in the place where it causes a syntax error, not a silent no-op.

    Also, usually the variable is to the left of the operator that assigns to it (hence lvalue). So we have x = x + 1, x += 1, and x++; ++x breaks the pattern.

  131. On Switch/Case Statements by Tablizer · · Score: 1

    In my toolkit, OOP is good for exactly one thing: eliminating ugly repetition of manifest switch-case statements

    But it doesn't reduce total code size nor repetition. It just changes the repetition into repeated "lists" of same-named methods. It's still repetition, just re-sorted differently from verb-outer-noun-inner into noun-outer-verb-inner.

    Switch/case statements often get a bad rap because the C-family languages have a very ugly and primitive switch/case statement. This is a language defect, not a paradigm defect. Why it's not modernized, I don't know.

    Further, excessively repeated case/switch statements are often a symptom of poor design.

    And they morph better into non-mutually-exclusive choices when change leads that way. It's harder to make the same change in OO.

  132. Scala Parallel Collections are a good example by MCRocker · · Score: 1

    Agreed. In fact Scala has introduced Parallel Collections with version 2.8 that allow looping methods on parallel collections that spread the work of the iterations across multiple processors and handle the partitioning of the work automatically. Very cool stuff.

    --
    Signatures are a waste of bandwi (buffering...)
  133. When i first learned... by hesaigo999ca · · Score: 1

    When i first learned about OO and the animal object that could be used to hold a cat or dog object, and that you could inherit from the mammale object, etc,etc.....meow, bark, walk, run....we all know the way they explain it (if they do it well), and I thought, it was so simple, you could have shown me this in 7th grade and I would have understood it easily....advanced polymorphism can only be applied when you know the basics, but getting the basics down is now a high school level if you ask me...and all could benefit from this too.....

  134. Complexity is polygonal problem by ChucktheMan · · Score: 1

    Thanks for the post. I like /. because of things like an off-hand mention of Sapir-Whorf - which I had never heard of by that name.

    I would argue that the complexity problem must include all sources of complexity, which includes little things like testing, documentation, user instruction, correctness accounting. Rather than select a single axis of complexity, in this case the language, It makes more sense to consider all sources, and select a language/methodology that minimizes the overall complexity of the project.

    If I can do a task in 3,000 lines of Forth, how do I compare that to the 30,000 or so lines of C++ that might be required to do the same thing? (Forth solutions typically are 1/10 the size of C++, according to Chuck Moore, an admittedly biased source.)

    So with such a possibility, why am I stuck with a bazillion lines of C++? because there is more to software than coding, and more to the solution of a problem than SLOC.

    I think the reason Forth is such a niche language is because it does not lend itself to generic solutions, rather the Forth dictionary paradigm tends to capture value by defining very specific language that may not reuse. (You say PotAAto, I say POOtato) this means that Forth tends to generate complex dictionaries of specific solutions that differ at an atomic level from the same use in a different context. This is a good news/bad news concept: Once you understand the dictionary, you understand the entire app, but to understand any of the app you typically have to understand the entire dictionary.

    In the context of the article (teaching fundamentals to freshman) It would probably serve better to use a more generic vehicle than C++, where the fundamentals can be isolated and demonstrated with a minimum of syntax, and there are plentiful examples of well-structured code to learn from. My personal preference is for TCL, where the typical 'Hello World' program is:

    puts "Hello World",

    which is about as simple as it can get for syntax. This allows the student to concentrate on concepts rather than parenthesis.

  135. B.S. by Anonymous Coward · · Score: 0

    if you look at the actual curriculum, freshmen learn Alice, which is an object-oriented teaching language; the blog author may have served on a committee that recommended his pet paradigm (FP) but it hasn't actually happened yet!

  136. Predicted 15 years ago by Anonymous Coward · · Score: 0

    15 years ago some of us had anticipated that move: http://web.me.com/fbourdoncle/page4/page8/page8.html by Francois Bourdoncle, founder of Exalead

  137. CMU outrage by Anonymous Coward · · Score: 0

    apparently CMU grads have better things to do than read slashdot.