Live data from Hacker News

Why MIT switched from Scheme to Python (2009)

wisdomandwonder.com

71–80 of 249 posts

Re: Why MIT switched from Scheme to Python (2009)

#71

Isn't this just part of the broader trend of CS departments switching away from teaching computer science to teaching computer engineering, which in turn is part of the more general trend of colleges becoming more vocational? LISP dialects like Scheme are excellent for teaching pure computer science because they are the closest thing to executing lambda calculus expressions. Whereas Python is excellent for teaching a…

Yes. One of the biggest complaints that computer science departments used to get from students is that they weren't learning any languages that employers are using.

That's kind of a useless argument. Universities often also don't teach people any web development. In many cases a graduating student has never worked on any real project. If the university's idea is, that the student can learn those things in their free time, then surely asking someone to learn a little bit of Python or another language is not too big an ask either. So which one is it? Learn that stuff at home on your own time, or university should teach it, because it is needed on the job? Then what other things are they not teaching that is used on the job?

Re: Why MIT switched from Scheme to Python (2009)

#72

This is just an introductory language and if you’re in a CS program, you’ll definitely move on to more advanced ones. It actually makes sense to switch to Python since it’s far more ubiquitous and accessible than Scheme. Scheme is not widely used in commercial software development, but still enjoys a presence in academia. Python has strong presence in both. On the other hand, Pascal was my “introductory” programming…

But this is the problem. Our premier academic institutions shouldn’t merely exist as job training programs for big tech. If anything, tech is still one of the better off fields in the university. Look at history or literature programs for where this is heading. I’d imagine that most literature majors don’t even read at all these days. As recent as 50 years ago, the requirement involved hundreds of pages of reading pe…

oldpersonintx2, your account is shadowbanned.

Which colleges did you send your kids to, what kind of degrees (just bachelors? undergrad and grad?), and how many kids?

The $800k figure without that context tells us nothing. If that's for 2 kids to get a BA/BS/BE, you got ripped off. If it's for 4 or 5 kids it makes much more sense when examining current costs.

Re: Why MIT switched from Scheme to Python (2009)

#73

Earlier quoted context omitted.

"essentially", come now. The point is that python's syntax reads a lot more plainly and logically for learning than something like Java.

I am confused, what is the relevance of the word essentially?

Do you agree or disagree that Python is more readable/closer to pseudocode than say Java or C++? Less syntactic sugar, no need to define namespaces/classes, more intuitive for declarations, etc.

Re: Why MIT switched from Scheme to Python (2009)

#74
post #41

Earlier quoted context omitted.

Yes. One of the biggest complaints that computer science departments used to get from students is that they weren't learning any languages that employers are using.

I always found this to be a shortsighted complaint. Getting exposed to languages where computation models are clear gives you an excellent background to switch to the language du jour and become a master. Going through e.g. HtDP or CTM makes it easy to transition to Python and write excellent code, whereas traversing the opposite path is going to be tough.

I agree, but those don't need to be the languages you use in all classes. I learned a few assembly and academic languages (MIPS and LISP) in classes for those two topics, and it was absolutely useful to learn how to think in terms of those languages. The vast majority of our classes were Java though, and that's also been the vast majority of what I've done since graduation. (I think my school has since moved to Python as well)

So I graduated with that really helpful knowledge about why modern languages work how they do, but also a lot of practical experience of actually using those modern languages too.

Re: Why MIT switched from Scheme to Python (2009)

#75
This story has been reposted many times, and I think GJS's remarks (as recorded by Andy Wingo) are super-interesting as always, but this is really not a great account of "why MIT switched from Scheme to Python."

Source: I worked with GJS (I also know Alexey and have met Andy Wingo), and I took 6.001, my current research still has us referring to SICP on a regular basis, and in 2006 Kaijen Hsiao and I were the TAs for what was basically the first offering of the class that quasi-replaced it (6.01) taught by Leslie Kaelbling, Hal Abelson, and Jacob White.

I would defer to lots of people who know the story better than me, but here's my understanding of the history. When the MIT EECS intro curriculum was redesigned in the 1980s, there was a theory that an EECS education should start with four "deep dives" into the four "languages of engineering." There were four 15-unit courses, each about one of these "languages":

- 6.001: Structure and Interpretation of Computer Programs (the "procedural" language, led by Abelson and Sussman)

- 6.002: Circuits and Electronics ("structural" language)

- 6.003: Signals and Systems ("functional" language)

- 6.004: Computation Structures ("architectural" language)

These were intellectually deep classes, although there was pain in them, and they weren't universally beloved. 6.001 wasn't really about Scheme; I think a lot of the point of using Scheme (as I understood it) is that the language is so minimalist and so beautiful that even this first intro course can be about fundamental concepts of computer science without getting distracted by the language. This intro sequence lasted until the mid-2000s, when enrollment in EECS ("Course 6") declined after the dot-com crash, and (as would be expected, and I think particularly worrisome) the enrollment drop was greater among demographic groups that EECS was eager to retain. My understanding circa 2005 is that there was a view that EECS had broadened in its applications, and that beginning the curriculum with four "deep dives" was offputting to students who might not be as sure that they wanted to pursue EECS and might not be aware of all the cool places they could go with that education (e.g. to robotics, graphics, biomedical applications, genomics, computer vision, NLP, systems, databases, visualization, networking, HCI, ...).

I wasn't in the room where these decisions were made, and I bet there were multiple motivations for these changes, but I understood that was part of the thinking. As a result, the EECS curriculum was redesigned circa 2005-7 to de-emphasize the four 15-unit "deep dives" and replace them with two 12-unit survey courses, each one a survey of a bunch of cool places that EECS could go. The "6.01" course (led by Kaelbling, Abelson, and White) was about robots, control, sensing, statistics, probabilistic inference, etc., and students did projects where the robot drove around a maze (starting from an unknown position) and sensed the walls with little sonar sensors and did Bayesian inference to figure out its structure and where it was. The "6.02" course was about communication, information, compression, networking, etc., and eventually the students were supposed to each get a software radio and build a Wi-Fi-like system (the software radios proved difficult and, much later, I helped make this an acoustic modem project).

The goal of these classes (as I understood) was to expose students to a broad range of all the cool stuff that EECS could do and to let them get there sooner (e.g. two classes instead of four) -- keep in mind this was in the wake of the dot-com crash when a lot of people were telling students that if they majored in computer science, they were going to end up programming for an insurance company at a cubicle farm before their job was inevitably outsourced to a low-cost-of-living country.

6.01 used Python, but in a very different way than 6.001 "used" Scheme -- my recollection is that the programming work in 6.01 (at least circa 2006) was minimal and was only to, e.g., implement short programs that drove the robot and averaged readings from its sonar sensors and made steering decisions or inferred the robot location. It was nothing like the big programming projects in 6.001 (the OOP virtual world, the metacircular evaluator, etc.).

So I don't think it really captures it to say that MIT "switched from Scheme to Python" -- I think the MIT EECS intro sequence switched from four deep-dive classes to two survey ones, and while the first "deep dive" course (6.001) had included a lot of programming, the first of the new survey courses only had students write pretty small programs (e.g. "drive the robot and maintain equal distance between the two walls") where the simplest thing was to use a scripting language where the small amount of necessary information can be taught by example. But it's not like the students learned Python in that class.

My (less present) understanding is that >a decade after this 2006-era curricular change, the department has largely deprecated the idea of an EECS core curriculum, and MIT CS undergrads now go through something closer to a conventional CS0/CS1 sequence, similar to other CS departments around the country (https://www.eecs.mit.edu/changes-to-6-100a-b-l/). But all of that is long after the change that Sussman and Wingo are talking about here.

Re: Why MIT switched from Scheme to Python (2009)

#76

Earlier quoted context omitted.

Yes. One of the biggest complaints that computer science departments used to get from students is that they weren't learning any languages that employers are using.

There were plenty of less rarefied CS departments that were concerned about this, and they taught C, C++, or Java in their introductory classes. Ultimately, it doesn't matter. It's your first language, not your last.

I learned programming before entering a degree in this stuff and I think learning a badly designed language as first language made me lose a few years, and additionally, if I weren't so driven to learn more, I probably still wouldn't know more than many others, and might have never explored the field of functional languages. If I hadn't started reading SICP and exploring Scheme and others, I wouldn't know half of what I know now about computer programming.

Sticking to only some Algol family language makes people have a severely limited perspective on things.

Re: Why MIT switched from Scheme to Python (2009)

#77

Isn't this just part of the broader trend of CS departments switching away from teaching computer science to teaching computer engineering, which in turn is part of the more general trend of colleges becoming more vocational? LISP dialects like Scheme are excellent for teaching pure computer science because they are the closest thing to executing lambda calculus expressions. Whereas Python is excellent for teaching a…

I think it's absurd to start with Scheme. A graduate who knows Python but not Scheme has a hope of doing something with computer science. A graduate who knows Scheme but not Python is basically unable to use computers at a technical level. The only choices here are "Python" or "Scheme + Python".

(Yes, of course, they could teach themselves Python at that point---but if we're talking about things that people can teach themselves, they can teach themselves the whole curriculum and both languages; the debate here is over what the university should hold them accountable to learn).

Re: Why MIT switched from Scheme to Python (2009)

#78

Isn't this just part of the broader trend of CS departments switching away from teaching computer science to teaching computer engineering, which in turn is part of the more general trend of colleges becoming more vocational? LISP dialects like Scheme are excellent for teaching pure computer science because they are the closest thing to executing lambda calculus expressions. Whereas Python is excellent for teaching a…

> most common language a computer engineer

Depends on your definition of a computer engineer. Dealing with strings in Python vs. dealing with character arrays in C is a world of a difference.

The decision to use Python feels like a solid compromise between giving the students a stair step to applied computer science work, while stripping away the cruft and language-specifics that would distract from implementing the more theoretical learning material

Re: Why MIT switched from Scheme to Python (2009)

#79
post #41

Earlier quoted context omitted.

Yes. One of the biggest complaints that computer science departments used to get from students is that they weren't learning any languages that employers are using.

I always found this to be a shortsighted complaint. Getting exposed to languages where computation models are clear gives you an excellent background to switch to the language du jour and become a master. Going through e.g. HtDP or CTM makes it easy to transition to Python and write excellent code, whereas traversing the opposite path is going to be tough.

even better is learning the languages you want to learn

why are you paying a school to teach you something adjacent to what you want to learn so you can learn the thing you need yourself?

Re: Why MIT switched from Scheme to Python (2009)

#80
post #43

Earlier quoted context omitted.

Human languages and programming languages are not comparable. You will need a lot more effort to become fluent in a second human language than in second programming language. Even if the human language is Esperanto (designed to be really easy for speakers of European languages), and the programming language is C++ (perhaps the most inconsistencies and foot guns) the programming language will need a lot less effort to…

They're not directly comparable because humans have an inbuilt ability to learn human languages. The vast majority of people on the planet know more than one human language and know zero computer languages. It's literally the opposite of what you're claiming.

That's very superficial and wrong.

It makes a huge difference, whether you have to learn thousands of new words, irregular grammar and (after learning thousands of concepts in the first language) learning a few hundred new concepts, or you learn a computer-understandable language, that has maybe, if very inelegant, 100 keywords, and 100 concepts, most of which you will probably not use often.

Compared to these numbers, the fact, that something is a natural language, has very little influence on the outcome. It is the sheer effort needed to learn a natural language, that makes the difference.

Post reply on HN