Archive for the ‘Education’ Category

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

Sunday, May 10th, 2009

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.)

Reblog this post [with Zemanta]

AgentSheets: Learning Programming, for middle-schoolers

Saturday, January 3rd, 2009

The Scalable Game Design project is aimed at getting computer science into middle schools, to get kids interested in information technology through their natural interest in games. A principal software tool of the project is AgentSheets, which lets you make your own simulation games without learning the syntax of a programming language.

If you know a kid in middle school who wants to make his or her own game, or just learn about programming, I recommend that you take a look at this!

The general concept is a bit like some systems you may have seen before, such as the visual programming languages provided with Lego Mindstorms. However, this requires no special hardware, and the specifics look a lot more interesting and flexible to me than anything I’ve seen along these lines.

An example of what you can do is the classic arcade game Frogger (developed by Konami for Sega/Gremlin in 1981). This tutorial shows how to do it in AgentSheets.

There is a three-minute movie showing kids using AgentSheets. It gives a good sense of the kind of game and the level of complexity that AgentSheets is suitable for (although it doesn’t demonstrate programming itself).

You can also read research papers about the project.

To try it out, you can download a free trial version with a ten-day license, for MacOS X or Windows. It costs $120 in single units, less for educators or if you get ten licenses.

As it happens, it’s written in Common Lisp, which is how I came to hear about it. But that doesn’t matter as far as using it is concerned.

The principal investigator is Prof. Alexander Repenning of the University of Colorado. He has worked at Xerox PARC and HP, and he has collaborated with researchers at the Epistemology and Learning Group of the MIT Media Lab, LOGO, and SRI to explore programmable LOGO toys. He has been involved in many other projects as well.

Thanks for telling me about this, Alex!