Why MIT switched from Scheme to Python

Costanza asked Sussman why MIT had switched away from Scheme for their introductory programming course, 6.001. This was a gem. He said that the reason that happened was because engineering in 1980 was not what it was in the mid-90s or in 2000. In 1980, good programmers spent a lot of time thinking, and then produced spare code that they thought should work. Code ran close to the metal, even Scheme — it was understandable all the way down. Like a resistor, where you could read the bands and know the power rating and the tolerance and the resistance and V=IR and that’s all there was to know. 6.001 had been conceived to teach engineers how to take small parts that they understood entirely and use simple techniques to compose them into larger things that do what you want.

But programming now isn’t so much like that, said Sussman. Nowadays you muck around with incomprehensible or nonexistent man pages for software you don’t know who wrote. You have to do basic science on your libraries to see how they work, trying out different inputs and seeing how the code reacts. This is a fundamentally different job, and it needed a different course.

So the good thing about the new 6.001 was that it was robot-centered — you had to program a little robot to move around. And robots are not like resistors, behaving according to ideal functions. Wheels slip, the environment changes, etc — you have to build in robustness to the system, in a different way than the one SICP discusses.

And why Python, then? Well, said Sussman, it probably just had a library already implemented for the robotics interface, that was all.

(via wingolog)


105 thoughts on “Why MIT switched from Scheme to Python”

  1. My 10 year old wants to learn Programming. Scheme or Python – which is it?
    Simple English please.

  2. I should probably write my own blog post on the topic, but, in short —

    When I took computer science courses, in a school to the south of MIT not known traditionally for engineering, the core two courses were “programming” (taught in M68000 assembler) and “algorithms and data structures” (taught in pascal). That’s where you were supposed to learn “all the way down”.

    Interestingly, most students “didn’t get it”, especially algorithms and data structures, because they could copy from the book. They didn’t re-think the problem. I asked for – and was allowed – to submit all my problem sets in C, which means I had to re-code everything and use only the ideas in the book, not the code itself. Thus, I submit, that while the old world of understanding “all the way down” has greatly vanished, the idea of skating over the top of unknown libraries has been with us since the beginning.

    I didn’t get an A in that course, and I did become my TA’s worst nightmare because I quickly knew more C than they did, but I came out with an extraordinary knowledge of data structures that form the core of my professional practice to this day.

    There were no other programming courses. I remember the first day in Operating Systems. Tom said “the course is taught in C. Anyone not know C? If you don’t know C, go to (some particular) TA, they will help you get up to speed and be your resource, but if you know programming you can program in any language. Let’s begin Operating Systems.”

    1. It’s funny you mention Data Structures and Algorithms, because in High School I took a summer class at Harvard (it’s a school a little northwest of MIT) that was also taught in Pascal, then I went on to get a CS degree from MIT, but I always felt most of my day-to-day programming knowledge came from that one Data Structures class. Arrays, pointers, structures, sorting and searching, binary trees, heaps and stacks were never really taught in the MIT comp sci program, which was mostly about theory and handling complexity, but it’s the stuff you use every day as a programmer.

Leave a Reply

Your email address will not be published. Required fields are marked *