Live data from Hacker News

Why Did M.I.T. Switch from Scheme to Python?

danweinreb.org

21–30 of 66 posts

Re: Why Did M.I.T. Switch from Scheme to Python?

#21
post #2

This issue is a fundamental one that everybody teaching programming or computer science must answer. Is it better to teach CS from the ground up or top down? The ground up approach is something like SICP, with fundamentals in lambda calculus or Turing machines. Students learn rules such as how a Lisp evaluates an expression and write programs which apply the rules. It's not necessary that this be taught using Lisp, b…

Unfortunately, when MIT moved from 6.001 in Scheme to 6.01 in Python, they also changed later courses to Python because now students wouldn't have Scheme experience. This results in: 6.005 ("software engineering") in Java 6.006 (intro to algorithms) in Python 6.034 (intro to AI) in Python 6.035 (compilers) in Java (6.005 was 6.170 which used Java and 6.035 has always used Java afaik so this list isn't all the new cur…

I agree - after freshman year, don't worry about whether the students have prior experience in a language or not. My first experience with Java was in a Database class: The teacher gave us a project, said "use Java". She linked to the Java tutorial, and I learned enough for the project in a day or two. I learned Perl the same way (for a bioinformatics course)

Of course, if they had been languages in a different paradigm, (e.g., Scheme, Prolog) it may have taken me a bit more time to get going. Still, no reason to not use these languages.

Any computer science student should be able to learn a new language quickly to get a project done. It's an important practical skill for their careers anyway.

Re: Why Did M.I.T. Switch from Scheme to Python?

#22
post #17

I'm graduating from MIT (hopefully) in under a month with a degree in CS. The new curriculum is an abomination. If you are teaching some of the (supposedly) brightest students in the world, you shouldn't worry about teaching marketable skills or using popular languages. Your students should be able to pick up a new language easily. Luckily, I took all old-curriculum classes. If I were a student entering college for C…

The arguments for changing the course do not include teaching marketable skills or using popular languages. The main argument is that the practice of computer science has fundamentally changed since the course was originally developed. 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 cour…

It's not just 6.01/6.001 -- it's the entire undergrad CS curriculum. Moving these classes toward Python because 6.01 found a Python robotics library (from MIT, coincidentally) does not justify moving other things to Python.

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?

Re: Why Did M.I.T. Switch from Scheme to Python?

#23
post #2

This issue is a fundamental one that everybody teaching programming or computer science must answer. Is it better to teach CS from the ground up or top down? The ground up approach is something like SICP, with fundamentals in lambda calculus or Turing machines. Students learn rules such as how a Lisp evaluates an expression and write programs which apply the rules. It's not necessary that this be taught using Lisp, b…

Did you mean "The bottom-up approach doesn't really provide any sense that there should be libraries, ..."?

yes, oops.

Re: Why Did M.I.T. Switch from Scheme to Python?

#24
post #18

Earlier quoted context omitted.

Unfortunately, when MIT moved from 6.001 in Scheme to 6.01 in Python, they also changed later courses to Python because now students wouldn't have Scheme experience. This results in: 6.005 ("software engineering") in Java 6.006 (intro to algorithms) in Python 6.034 (intro to AI) in Python 6.035 (compilers) in Java (6.005 was 6.170 which used Java and 6.035 has always used Java afaik so this list isn't all the new cur…

The program I was in didn't even try to do things like this. Web course? Use perl. OS course? Use C. Soft Eng? Use Java (people demanded at least one Java course). If you can't learn the appropriate language within the first week of the course, you probably should have a different major. Naturally some people were very upset about this, but it definitely made for a better program all in all.

Where did you go?

Re: Why Did M.I.T. Switch from Scheme to Python?

#25
post #20

I'm graduating from MIT (hopefully) in under a month with a degree in CS. The new curriculum is an abomination. If you are teaching some of the (supposedly) brightest students in the world, you shouldn't worry about teaching marketable skills or using popular languages. Your students should be able to pick up a new language easily. Luckily, I took all old-curriculum classes. If I were a student entering college for C…

What remaining classes do you think best exemplify the old curriculum?

6.003 (Signals and Systems) and 6.004 ("Computation Structures" -- transistors to microprocessors) were great classes. I don't know what they've done to them since I took them. 6.033 (Systems Engineering) and 6.046 (Intro to Algorithms) were also great classes. 6.046 has become 6.006 and 6.046' now. I've heard mediocre things about 6.006.

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.

Re: Why Did M.I.T. Switch from Scheme to Python?

#26
post #2

This issue is a fundamental one that everybody teaching programming or computer science must answer. Is it better to teach CS from the ground up or top down? The ground up approach is something like SICP, with fundamentals in lambda calculus or Turing machines. Students learn rules such as how a Lisp evaluates an expression and write programs which apply the rules. It's not necessary that this be taught using Lisp, b…

I've never heard this characterized so well. There was a that I had always been trying to put my finger on when I'd read these sorts of articles and the top-down/bottom-up description is right on the mark. My own feeling is something like this. Before Newton there was Kepler. Now Kepler was no dummy and he used the exacting measurements of Tycho Brahe to arrive at a very accurate model of planetary motion. He found t…

Great analogy. I guess the answer is "people should be able to apply both ways of thinking". So how do you impart both in a curriculum?

I have observed that for great hackers, it doesn't matter what method they are taught -- they'll learn both and apply them appropriately. This was probably true for Newton. It's certainly true for one of my best friends, an excellent hacker, who is as much a bottom-up thinker as anyone could ask for and yet he took the top-down class. He was going to learn how to think about problems in the optimal way no matter how, or what, anyone taught him.

I'm not sure what this means for how the intro course should be taught. Certainly it seems to suggest you won't be ruining anyone with great potential by teaching them the wrong stuff. So maybe MIT has realized that it doesn't matter for the best students, and they've been doing the same thing for 30 years and it's time for a change. What the hell. See how it works, and then maybe change back or learn something new. They're going to have to run this experiment for a long time, though, in order to figure out whether it's actually better. I'm quite interested to watch.

Re: Why Did M.I.T. Switch from Scheme to Python?

#27
post #2

This issue is a fundamental one that everybody teaching programming or computer science must answer. Is it better to teach CS from the ground up or top down? The ground up approach is something like SICP, with fundamentals in lambda calculus or Turing machines. Students learn rules such as how a Lisp evaluates an expression and write programs which apply the rules. It's not necessary that this be taught using Lisp, b…

Unfortunately, when MIT moved from 6.001 in Scheme to 6.01 in Python, they also changed later courses to Python because now students wouldn't have Scheme experience. This results in: 6.005 ("software engineering") in Java 6.006 (intro to algorithms) in Python 6.034 (intro to AI) in Python 6.035 (compilers) in Java (6.005 was 6.170 which used Java and 6.035 has always used Java afaik so this list isn't all the new cur…

I have been taking Carnegie Mellon graduate CS classes part time, and for the most part I have been able to use any programming language I want for assignments (within the bounds of "The TA knows at least enough of that language to read and understand your code"). I have used this as a fun excuse to learn a new language just to do the projects and assignments for a course. I've done this with Common Lisp, Python, and Clojure so far. Some times the source code isn't even required, just your answers to the questions and an idea of how you arrived at them.

It seems a much more grown up and civilized approach to me. Maybe this is because it is graduate level and not undergrad? I remember CMU undergrad classes requiring C, Scheme, Prolog, and Pascal, but that was over 20 years ago.

Re: Why Did M.I.T. Switch from Scheme to Python?

#28

I'm graduating from MIT (hopefully) in under a month with a degree in CS. The new curriculum is an abomination. If you are teaching some of the (supposedly) brightest students in the world, you shouldn't worry about teaching marketable skills or using popular languages. Your students should be able to pick up a new language easily. Luckily, I took all old-curriculum classes. If I were a student entering college for C…

I didn't do my undergrad at Stanford, but I'm here as a grad student, and I believe they use Java for the intro classes. They do teach Python and C eventually, but no Lisp AFAIK.

I did my undergrad at Georgetown, where nearly every class used C++ (or C, for classes in things like OS and security).

Re: Why Did M.I.T. Switch from Scheme to Python?

#29
post #17

Earlier quoted context omitted.

The arguments for changing the course do not include teaching marketable skills or using popular languages. The main argument is that the practice of computer science has fundamentally changed since the course was originally developed. 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 cour…

It's not just 6.01/6.001 -- it's the entire undergrad CS curriculum. Moving these classes toward Python because 6.01 found a Python robotics library (from MIT, coincidentally) does not justify moving other things to Python. 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 th…

"Fundamentally understanding recursion, abstraction, complexity, scoping, FP, OO, and other more abstract topics is considerably harder working alone."

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.

Re: Why Did M.I.T. Switch from Scheme to Python?

#30
post #28

I'm graduating from MIT (hopefully) in under a month with a degree in CS. The new curriculum is an abomination. If you are teaching some of the (supposedly) brightest students in the world, you shouldn't worry about teaching marketable skills or using popular languages. Your students should be able to pick up a new language easily. Luckily, I took all old-curriculum classes. If I were a student entering college for C…

I didn't do my undergrad at Stanford, but I'm here as a grad student, and I believe they use Java for the intro classes. They do teach Python and C eventually, but no Lisp AFAIK. I did my undergrad at Georgetown, where nearly every class used C++ (or C, for classes in things like OS and security).

I did undergrad CS at Georgetown too (hi). What year were you, if you don't mind me asking?
Post reply on HN