Luckily, I took all old-curriculum classes. If I were a student entering college for CS now, I would not choose MIT. I don't know other schools' curricula in depth but some place has got to be more rigorous (Berkeley? Stanford? CMU?).
Luckily, I took all old-curriculum classes. If I were a student entering college for CS now, I would not choose MIT. I don't know other schools' curricula in depth but some place has got to be more rigorous (Berkeley? Stanford? CMU?).
The argument is that computer scientists rely more on existing libraries and systems that often require fundamental research for an individual to comprehend. They have changed the course to reflect this using robotics and a library to control the robots. That library happens to be written in Python. They didn't start with "Let's change to using Python" and develop the course around that.
The validity of this argument is debatable. But I don't think your reasons address it at all.
Python's a great language, don't get me wrong but you're being misled if you think that popularity and marketability were not factors in selecting Python for the new course 6 curriculum.
As for the argument that "computer science has fundamentally changed", I agree. Unfortunately, what is really meant is that software engineering has changed. You can learn computer science concepts just as well with Scheme or Python or Smalltalk or OCaml...
Additionally, while library use may be more prevalent in industry now, that's no pedagogical argument for teaching "library use" (whatever that is).
Library use is relatively easy. Reading docs is hard for a lot of people but learning to read docs can be done with systems or languages instead of libraries.
It all boils down to what will serve the students best and what will let MIT deliver the most value. Students can learn python and library use on their own relatively easily. Fundamentally understanding recursion, abstraction, complexity, scoping, FP, OO, and other more abstract topics is considerably harder working alone. 6.01 claims to still cover these topics. 6.01 claims to integrate them with EE and robots to make the class fun.
From the conversations I've had with 6.001 students and 6.01 students, 6.001 does a much better job with these topics. 6.01 can and will improve, of course. Unfortunately, I don't think teaching about robots in Python will give students as solid a grounding as SICP.
MIT's new course 6 curriculum falls along similar lines as the 8.01/8.02 (intro mechanics and e&m) move to TEAL (a bastardized blend of game show and "hands-on" computer work that feels like high school). See http://tech.mit.edu/search.html?cx=000823599697007823270%3Aq... for how TEAL has been doing.
Would Caltech do this? No. So why is MIT?
Reading SICP on my own time helped me understand these topics better, and helped me understand some things about Java better (like how anonymous inner classes are a half-assed, broken attempt at implementing closures). SICP makes sense of these topics in a way that I doubt is even possible in a class taught in Java. You can probably cover a lot of this material with Python, but still run into more limitations and inconsistencies than with Scheme.
Note that I said, with added emphasis, "the practice of computer science has fundamentally changed." This idea rings true for me, as a systems researcher. I have to do as they describe to do my own research. "Library use is relatively easy" greatly underestimates the difficulty of accomplishing non-trivial tasks with new hardware, even in the presence of published specs and available library.
Also, answering your own rhetorical question even though you don't actually know the answer is not support for your argument.
"Library use is relatively easy" is not true for all cases; you are correct. 6.01 uses libraries which are well-built and relatively friendly. This is the first 6 class students take, after all. Classes later in the curriculum will have students using libraries of their own selection or writing compilers or operating systems for modern processors (should the student choose to take those courses). Between teaching fundamental concepts and teaching how to use a library, concepts should win out in introductory courses. Whatever skill it takes to use a library or documented system will be learned in time.
I don't absolutely know the answer to whether Caltech would do something similar but I would wager a great deal that they wouldn't. Have you looked at Caltech's required courses? Talked to Caltech students? Looked at MIT's required courses? Talked to MIT students? If you do, you will notice a very clear trend. Although MIT and Caltech are ostensibly peer institutions, the last two decades have seen a marked (relative) decline in the intensity and rigor of MIT's undergraduate programs.
6.006 does Python, but it's new and 6.046 had no practical edge to it at all. As a student who had a little bit of difficulty with the theoretical steps in 046, I can understand why they added the "test this and prove to yourself that this makes sense" exercises in Python.
As lame as it sounds, look into 6.00 - it's an "intro intro" programming class mostly required for Course 20 (Biological Engineering) students, but it's surprisingly robust as an introductory class - covering a lot of the topics you just listed, and well.
I've helped a number of people with their 6.00 work and read quite a bit of the course material and I have to respectfully disagree. Students in 6.00 don't learn anywhere near what was taught in 6.001.
I did my undergrad at Georgetown, where nearly every class used C++ (or C, for classes in things like OS and security).
6.945 (Large-scale Symbolic Systems) is an excellent class. Afaik, it's still taught in Scheme by Sussman.
All these classes cover quite a bit of material in not-very-much time. They don't get bogged down by whatever language they use (if any) and they straightforwardly teach fundamental concepts in some depth. They have high throughput.