> For example, students will no longer learn C at CMU yet they will be expected to know it well for os.
This just isn't true. C-not (a typesafe C variant put together by the language department) will be taught in an intro class, and the end of that class will involve a transition to C. Then, the students will take 213 Introduction to Computer Systems, which will be ALL C and Assembly (as it has been since its inception). Then, after writing malloc and a web proxy in C, they will go on to OS.
Additionally, Java will continue to be taught in 214, a class that will be mandatory for all Software Engineering minors (granted, a small number of these exist) but that will invariably be taken by many students concerned about internships and that kind of stuff.
The reality of the matter is that Language Theory is the biggest player in CMU CS right now, and so they took that as a mandate and ran with it all the way to this new curriculum, which is why it's functional-language heavy. That said, our students' brains will not rot for having learned ML more heavily than Java (I imagine it will be advantageous), and all previous options will still be available, albeit in slightly different forms (I actually imagine 214 will be much improved over previous attempts at teaching Java).
The reality is that CMU never gave a shit about students who barely make it by, and scraping off a few extra in the Systems class transition isn't really a big concern for anyone (it's a CMU cultural thing). Most of the complaints is just fear of change and "It wasn't like this when I took it!" type complaining.
The problem with C0 (it's "C-naught", not "C-not") is that it is a toy language used for the compilers class which has somehow made it down into the intro curriculum. It is not useful in the real world; absolutely no one outside of CMU uses it. It is useful only as a stepping stone for C -- at which point, why not just teach C, and keep to a "safer" subset for a while? A couple weeks "transition" to get used to malloc and gdb and NULL pointers and segmentation faults etc is not nearly enough.
Alex, you really need to speak to any professor outside of the PL department to get an idea just how political this change actually is.
C-naught, as jwatzman said, is not C. Students will not learn pointers, they will not learn arrays. In fact, they'll not learn any of the difficulties of C. We both know the purpose of 213 isn't to teach you C. It's coded in C, but I think I used pointers in exactly 1 lab. The course won't teach you C and you can get by with C0 knowledge. Then when you get to OS, Distributed, etc, you will need to know the intricate details of a language you have no real experience in. At this point, why teach a useless language that gives no benefits to students? It is not any easier to learn than Java, yet much less useful.
Additionally, I never stated that its necessary for Java to be taught. But what I do feel is that some language that a student can use in an interview should be covered in the cirriculum.
>The reality is that CMU never gave a shit about students who barely make it by
The reality actually is, its impossible to make it by some of our systems courses without filling out the proper prerequisites. And currently what's happening is that the prerequisites are being removed from the cirriculum. Thus, unless people have knowledge of C, pointers, asm, people will be focusing on learning C during OS and not OS. We've both taken the course. We both know that a student who doesn't know C has a high probability of failure.
The point is, a student coming out of CMU will now only be required to know 3 languages: SML, OCaml, and C-naught. One of them is utterly useless. I do believe that a focus on functional programming is a good thing. What I don't support is pushing programming languages at the cost of everything else. A systems person or even an algorithms person can't thrive in the new cirriculum. Almost every required course is a PL course, or fundamentally tied to PL in some way.
This just isn't true. C-not (a typesafe C variant put together by the language department) will be taught in an intro class, and the end of that class will involve a transition to C. Then, the students will take 213 Introduction to Computer Systems, which will be ALL C and Assembly (as it has been since its inception). Then, after writing malloc and a web proxy in C, they will go on to OS.
Additionally, Java will continue to be taught in 214, a class that will be mandatory for all Software Engineering minors (granted, a small number of these exist) but that will invariably be taken by many students concerned about internships and that kind of stuff.
The reality of the matter is that Language Theory is the biggest player in CMU CS right now, and so they took that as a mandate and ran with it all the way to this new curriculum, which is why it's functional-language heavy. That said, our students' brains will not rot for having learned ML more heavily than Java (I imagine it will be advantageous), and all previous options will still be available, albeit in slightly different forms (I actually imagine 214 will be much improved over previous attempts at teaching Java).
The reality is that CMU never gave a shit about students who barely make it by, and scraping off a few extra in the Systems class transition isn't really a big concern for anyone (it's a CMU cultural thing). Most of the complaints is just fear of change and "It wasn't like this when I took it!" type complaining.