11 ms·
Why Did M.I.T. Switch from Scheme to Python?
- lincolnq 17y agoThis 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, but it seems to be popular, because it greatly reduces distractions when understanding and writing actual programs. In any case, the ground-up approach generally teaches first a system of rules, and only once the rules are understood does it move on to programs. The top-down approach, on the other hand, starts with programs. Often the students are given a partially written program and are asked to improve it. The curriculum doesn't focus on rules because they all have exceptions. It's much more like engineering and less like mathematics. As the article says, 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's better? Some schools (such as my alma mater, Brown) have two intro classes, one for each method of teaching. I chose the rules-based bottom-up approach when I was an undergrad, and it was very good, and I was convinced it was the better way to go. But I'm losing my conviction, partially because MIT is changing it and they must know what they're doing (heh), and partially because I'm coming to the understanding that everybody uses libraries and this is not going to change. The top-down approach doesn't really provide any sense that there should be libraries, that code should be organized, that you can write to an interface and document your code. People can learn these sorts of things later, though.
- nopinsight 17y agoDid you mean "The bottom-up approach doesn't really provide any sense that there should be libraries, ..."?
- lincolnq 17y agoyes, oops.
- twopoint718 17y agoI've never heard this characterized so well. There was a <something> 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 that planets traveled in ellipses not circles, and he knew that they swept out equal areas in equal times (among other things). In short, he had a very firm "top-down" grasp on what planets did. Then along came Newton, a "bottom-up" thinker if there ever was one (calculus was invented in what was perhaps the most supreme feat of yak shaving ever http://catb.org/jargon/html/Y/yak-shaving.html http://catb.org/jargon/html/Y/yak-shaving.html ). He found that there was an underlying and unifying idea, gravity, that explained why the planets behave as they do. So to cap off my analogy, I've found that if I've worked in a sufficiently bottom-up way on something then sometimes what seems complex or intricate collapses down into some small and elegant solution that I wouldn't have seen if I were coming from the other direction (or at least it would be much more difficult).
- lincolnq 17y agoGreat 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.
- silentOpen 17y agoUnfortunately, 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 curriculum's fault... but it does give a good overview of MIT's undergrad CS decline) Frankly, this is unacceptable. I'm not sure I would hire an MIT CS grad that did the new curriculum. It is absolutely absurd that MIT (which purports to have one of the best CS programs in the world) is teaching Java and Python in their undergrad CS curriculum even in places where Java and Python are not the best suited (compilers!? algorithms!? AI!?). For instance, one 6.005 pset is to build a Sudoku solver... in Java. Every MIT undergrad should have the ability to learn a new programming language. 6-3 students (CS majors) should especially be able to do this. MIT is getting watered down. Students don't learn other programming paradigms and they learn to accept the bloat and poor design decisions of the required languages. Where once students would build a text adventure and a metacircular evaluator in Scheme for 6.001, they now build what amount to Lego Mindstorms kits. Seriously?
- spamizbad 17y agoQuite frankly I'd rather be working with robots than building text adventure games (been there, done that: when I was 13). And while building a meta-circular evaluator is interesting, I don't see how it can be considered a central tenet of introductory computer science. Also, both Python and Java have implementations that are meta-circular (PyPy, Jikes RVM, and Squawk), so it's not like you're shutting the door on these concepts to beginner students by bootstrapping them with conceptually-limited languages.
- amalcon 17y agoThe 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.
- gengstrand 17y agoThe title is a bit misleading. The gist of TFA is that MIT is switching from Scheme to Python in its INTRODUCTION TO PROGRAMMING course. That would seem to me to be a bit of a no brainer. I find python to be a much more acceptable alternative than BASIC in introducing people new to coder in a way that is more in line with sound computer engineering practices.
- KC8ZKF 17y agoI'm not sure I understand you. You like the switch from Scheme to Python because Python is better than BASIC?
- jobeirne 17y agoWhy is this guy being voted down for a decently formed comment?
- Confusion 17y agoPerhaps because people are dumbfounded by him introducing BASIC into the disctussion for no obvious reason whatsoever.
- krschultz 17y agobecause SICP was a great introduction, personally I think that Scheme (at least at first) is easier to pick up than Python. Our professor taught us basic Scheme in 40 minutes no problem. Python takes longer than that because there is more syntax. Basically all you need in scheme are some () and define, lambda, cons, car, cdr, and cond for the first 4 or 5 weeks.
- philwelch 17y agoI started with C, but from what I've heard, Scheme actually makes plenty of sense as a first language. There's a Marvin Minsky quote, "Anyone could learn Lisp in one day, except that if they already knew Fortran, it would take three days." The "complexity" of Lisp comes from our preconceptions from different languages (Minsky presumably said that when Fortran was more in vogue).
- cia_plant 17y agoI find this justification downright weird. Yes, a class like 6.001 is an extremely purified and unrealistic view of modern software engineering. But the same could be said of any theoretical subject. The people at the Large Hadron Collider are probably spending a lot more time reading 300-page technical manuals than they are reading Feynman. A lot of the charm of academia, to me, is that it gives you some breathing room to step back from the mess, and look for unifying principles. There might be a bit of a shock when the student first graduates, but in the long term they're often better off with the kind of knowledge that they couldn't easily pick up through osmosis.
- Confusion 17y agoFrom what I've been reading about this issue, I think many people are missing one important point: 6.001 was an introductory course, the contents of which would be rehashed and expanded in several later courses. That the contents of this course has changed does not mean that MIT students do not learn about these concepts anymore.
- silentOpen 17y agoSort of... I don't think MIT has any required undergrad CS courses that use ~(Python || Java). I'd call that a problem.
- cyen 17y agoBefore 6.01 was introduced, MIT didn't have any required undergrad CS courses that required anything besides Scheme and Java! Is that much better? Frankly - I think if you're starting to argue simply based on language, you'll find few supporters. The strengths of the old curriculum were the concepts you learned through 6.001 and using Scheme, not the Scheme skills themselves. Do I think 6.034 would be significantly different if I had to use Python versus Scheme? Not at all - and frankly using Scheme added nothing to my experience in that class.
- silentOpen 17y ago
- silentOpen 17y agoI'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 CS now, I would not choose MIT. I don't know other schools' curricula in depth but some place has got to be more rigorous (Berkeley? Stanford? CMU?).
- scott_s 17y agoThe 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 course to reflect this using robotics and a library to control the robots. That library happens to be written in Python. They didn't start with "Let's change to using Python" and develop the course around that. The validity of this argument is debatable. But I don't think your reasons address it at all.
- silentOpen 17y agoIt'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%3Aqvanwm1hj34&cof=FORID%3A11&q=teal#984 http://tech.mit.edu/search.html?cx=000823599697007823270%3Aq... for how TEAL has been doing. Would Caltech do this? No. So why is MIT?
- polos 17y agoTeaching has always to do with bringing something really new and perfect to a still quite fresh mind. So, when teaching, you always need to bring the simple and perfect theory. Practice is what your students will make out of your 'perfect' theory -- slumming down quite a bit -- but if you start with bringing a 'practical' theory to begin with, your students will never learn to fly high (bringing in some really fresh new ideas).
- wingo 17y agoSee also, http://news.ycombinator.com/item?id=530605 http://news.ycombinator.com/item?id=530605.
- Mongoose 17y agoI'm in the middle of taking the undergrad PL class at the University of Washington and I've come to the conclusion that classes of this sort can be whatever you make them. We spent the first five weeks learning/using ML, recently switched to Scheme, and will dive into Ruby for a few weeks before the quarter ends. While I'm sure many of my peers will leave the course thinking of functional languages as a quirky set of under-developed relatives to the tried-and-true OO family, I've spent the last 6 weeks breathing functional programming, both in my coursework and in places like this thread. I feel that I'm taking more away from the class and that much of introductory computer science works this way. The burden of learning is on the student to become engaged in the subject matter and make use of the resources the school and professor provides. At the end of the day, the department won't make the student great. To a degree, a driven and talented student can succeed anywhere, regardless of how many ooh's and aah's a name-dropping of their school will produce.
- drawkbox 17y agoI think this is a technology evolution natural move. This will probably happen every few decades to the most capable new language or platform. There is a strong religious backing to Scheme being the only way to teach core CS fundamentals at MIT. I think that is an emotional almost fanboy reaction at times probably filled with heavy bias. Python is a great balance of showing many sides of programming, it can be as eye opening as Lisp. Python is functional and object-oriented. Python is a simplifying tool and culture. All platforms used here should be simplifying. Python can get you building market ready desktop applications, web applications, building robotics, scientific computing, game development, algorithms and AI and nearly anything out there Python is at the tip of the spear. Python is rapid iterations and prototype friendly. The frameworks of Python are more capable to wrap nearly anything, that is what software engineering is about now. It is the same evolution software process has taken from the CMM, to CMMI (supporting modular and libraries), to Agile and a more natural iterative process rather than top down design everything from the bottom up approach. You can still do that, it is just not the majority of software engineering today, and it will continue to simplify. Are Scheme and Lisp programmers who are biased because they had that more hardcore bottom up technique really thinking this degrades the experience or is this more of a bias that is being attacked. Or has software engineering fundamentally changed? Scheme will not go away. This does not mean that people will stop making compilers or REPL. It simply means the starting place is different. It might even drive some better compilers and multi-platform tools because of the quirkiness of many compiler systems out there will drive good engineeers to simplify that process. That is what we do, we simplify problems. I would argue Python makes for more marketable and capable graduates to be successful almost immediately after school, but I don't think it harms the fundamentals much. Good developers and engineers still take time to get better. No one is the best programmer in college, it takes time and experiences after the academics to be highly skilled. Python fits closely with computer science and is very capable of taking the torch. I do think that there is a benefit to learning from a more difficult and core understanding because it is more downhill from there but Python is hardly the worst case scenario here. I think that Python is perfect for teaching CS because of the flexibility, libraries, open source but support by Google (they are big on CS and like Python) and many other reasons. What can you make in Scheme that you can't make in Python, very little. Would you rather it be Java or C# they are teaching?
- Tritis 17y agoEvery time this story comes up I'm shocked at the number of CS MIT grads there are on the internets. MIT must be graduating something like 50% of the total internet. Also the comments on this story are always of the type "Well when I was in school things were taught right. The day I graduated it all started going downhill and now I wouldn't hire someone graduating from that school."
- asciilifeform 17y agoIt it just me who is seeing a cowardly surrender to cultural decay here? From the renowned Sussman, no less. The glorious MIT of the 1980s and prior appears to be dead. Erased, in fact, without a trace. Consider the following: http://mitpress.mit.edu/catalog/browse/browse.asp?btype=2 http://mitpress.mit.edu/catalog/browse/browse.asp?btype=2 These are the latest releases from MIT press. Among them you will find nothing remotely like SICP, but plenty of postmodernist/related pablum. "You have to do basic science on your libraries to see how they work, trying out different inputs and seeing how the code reacts." Is this not an atrocity, to be fought to the last bullet? Is this not an argument for declaring all existing software obsolete and starting from scratch? Why are we - even luminaries like Sussman - so willing to give up on the future without a fight? As argued in some of PG's essays, in order for creativity to bear fruit it is not enough for a given individual to possess a creative mind. The culture has to be hospitable to creativity. And there are processes which come close to stamping out creativity without any overt or deliberate suppression involved. Specifically, a transition to a medium where one cannot get reliable, understandable "small parts" having predictable behavior. Take note: http://xkcd.com/298/ http://xkcd.com/298/ Programmers have indeed created a universe where "science doesn't work." Learning where the permanent bugs and workarounds are inside a phonebook-length API teaches you nothing. It is anti-knowledge. Where your mind could have instead held something lastingly useful or truly beautiful, there is now garbage. There is no longer a "what you see is all there is" Commodore 64 for kids to play with: http://www.loper-os.org/?p=16 http://www.loper-os.org/?p=16 No one is working on, or sees the need for a replacement. This is just as well, considering as one would have to start from bare silicon - and avoid the use of design tools built on the decaying crud of the past. Only a raving lunatic would dare contemplate it... Outside of programming: Linus Pauling developed an interest in chemistry by experimenting incessantly throughout his childhood. Today, he would have been imprisoned: http://memepunks.blogspot.com/2006/06/americas-war-on-scienc.. http://memepunks.blogspot.com/2006/06/americas-war-on-scienc.... The new generation will have no Linus Pauling, unless the Third World - where one might still purchase a beaker without a license - supplies us with one. Likewise, we will see very few truly creative programmers. What creativity can there be when your medium is shit mixed with sawdust?
- hc 17y agowow, this is just ridiculously over the top.
- mkramlich 17y agoAn intelligent person, particularly one with natural aptitude for programming will end up fine regardless of which language they start with. Also, anybody that truly starts programming in college is a rather sad candidate to begin with. Also, Python is a much more practical choice than Scheme, and has technical merits which are at least as attractive as Scheme, and arguably more so. Scheme is elegant. But Python is also elegant, yet more practical. From that angle, looks like a net change for the better. MIT also strikes me as a school oriented more towards producing engineers rather than programmers. And if you're going to school at MIT just to get into a career in programming, that sounds like a terrible waste of money. Robotics or electrical engineering? Probably a good choice. But programming? Come on. Then there's the whole argument of why anybody needs to go to MIT, or even get a college education in CS. We live in a world with the Internet and scads of free books in libraries and documentation online. Follow that line of thinking and the whole controversy over this tweak in some random school's class content seems silly. It is as if nobody can learn anything outside of a class, so if it is not taught in that particular class at MIT, it will never be learned, and the world will end. Hilarious. :)