I’ve been seeing mail and blog postings, particularly from people in the Lisp community, why MIT has switched from using Scheme to Python in the freshman core curriculum for the department of Electrical Engineering and Computer Science.
At the International Lisp Conference, Prof. Gerry Sussman gave a short impromptu talk explaining the new freshman curriculum. Just to get a second opinion, I later called Prof. Jacob White, one of the designers of the curriculum and lecturers for the core courses. (Digression: Jacob and I have been close friends since I was six years old!) He confirmed Gerry’s description.
Asking why they changed languages is, in some sense, the wrong question.
The freshman software engineering course, since 1985, has been based on the book Structure and Interpretation of Computer Programs (known as SICP), which uses Scheme. The course is now nearly thirty years old. Engineering has changed quite a lot in thirty years. Since 1995, Gerry and his co-author Prof. Hal Abelson have advocated changing the freshman curriculum radically, not basing it on SICP.
In 1980, computer engineering was based on starting with clearly-defined things (primitives or small programs) and using them to build larger things that ended up being clearly-defined. Composition of these fragments was the name of the game.
However, nowadays, a real engineer is given a big software library, with a 300-page manual that’s full of errors. He’s also given a robot, whose exact behavior is extremely hard to characterize (what happens when a wheel slips?). The engineer must learn to perform scientific experiments to find out how the software and hardware actually work, at least enough to accomplish the job at hand. Gerry pointed out that we may not like it this way (“because we’re old fogies”), but that’s the way it is, and M.I.T. has to take that into account.
The new approach also has the big advantage that it combines computer science with electrical engineering, whereas the old one taught them as entirely separate disciplines. This way, students see how they interrelate. Also, as Jacob points out, some of the same macro-principles apply to both software and hardware, and the students see this illustrated. There is extensive lab work, making robots and mobile applications.
It just so happens that the robotics substrate software that comes with the system they’re using is programmed in Python. Similarly, the mobile software environment is based on Python. (Or, at least, the original plan was to use such a substrate, although it may have changed for various business reasons.)
Changing programming languages was absolutely not a goal of the curriculum change. It was merely the result of the consequences of various decisions. We can always discuss how it came to be that the robots and mobile devices are using Python instead of some other language, but that’s not the question being addressed here. M.I.T. has nothing against Scheme. (And, of course, M.I.T. does teach classic software engineering, later in the curriculum.)
(Here’s another take on this topic.)