Live data from Hacker News

Why MIT Switched from Scheme to Python (2009)

wisdomandwonder.com

61–70 of 102 posts

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

#61
post #27

Earlier quoted context omitted.

While I think that most CS people should learn assembly and computer internals basics, it would be an absolute disaster to start students off in assembly as CS 101. Python is a fairly decent language for starting people off: * It doesn't have a lot of boilerplate, so no magic "I'll teach you what this means in three weeks" steps * Output for debugging is fairly easy, since print accepts a lot of stuff without needing…

It really depends on the type of school. We started programming on University with a simplified assembly, but it made a lot of sense since it was electrical engineering school and we've learned about hardware in parallel, so we could follow what physically happens when the code is executed. I don't remember that anyone had a huge problems with following it. For many people around me with good math skills, but no prev…

I choose electrical engineering for some weird reason - I don't think it occurred to me that software engineering was a way of making a living even if I had been a hobby programmer since I was 12.

Luckily the introductory course was based on SICP - and it really realigned my BASIC- and C- damaged brain.

It turned out to be the only course that I enjoyed so I eventually switched to a more computer systems and sciences oriented education.

It was a good introductory course for me, and perhaps most others. Perhaps not good for the most daft though...

I guess you also need some assembler-skills but it's hard in a totally different dimension somehow.

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

#62
post #2

I think there's a tension between two imperatives in teaching new programmers: 1) Learning must be applied learning. Give people problems to solve and they will come to you for data structures and algorithms, O notation, etc. If they don't, they should do something else 2) A lot of what's out there in programming languages are cargo cults, and newbies need to be prepared for this. For instance, virtual function inher…

My problem with this sort of bottom-up approach to learning how to program is that what seems "fundamental" from one point of view always turns out to be an abstraction built on an even lower-level foundation.

So, virtual functions aren't real because they're just vtables implemented in C. But C isn't real because it's just fancy assembly language. But assembly language isn't real because it's just fancy machine language. But machine language isn't real because it's just 0's and 1's zipping around the hardware. So I have to learn how integrated circuits work before learning how to program? No.

Bottom-up knowledge is important for understanding performance and other trade-offs. However, there's also a lot of benefit in learning how to program in a formal system without knowing much about how that system is implemented under the covers. If I was teaching an intro programming course to undergrads in 2017, I'd be strongly inclined to teach them a clean functional language first (e.g. Elixir, F#, etc.), and only introduce gory details like pointers and memory allocation later on.

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

#63

Sussman wrote "Structure and Interpretation of Computer Programs" which is the book formerly used in many introductory CS courses including 6.001 "The wizard book" is a great read and I recently starting flipping through it again. PDF https://mitpress.mit.edu/sites/default/files/6515.pdf HTML https://mitpress.mit.edu/sicp/full-text/book/book.html

Also available in Info format, for easy browsing and searching from within Emacs:

http://www.neilvandyke.org/sicp-texi/

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

#64
post #37

Earlier quoted context omitted.

> 50 years there won't be that many application developers left either. I like your comment, but the crystal ball statement in the last sentence is a bit too much.

I think it's probably right. 50 years is a long time.

I've been coding professionally for 30 years. And programming isn't really much different now than it was 30 years ago. The tools are better, yes. But we're still sitting at desks in front of a screen, entering code into computers as text, with keyboards.

Perhaps there will be a threshold reached where suddenly that goes away. But I'm not holding my breath.

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

#65
post #7

Berkeley made the same switch at around the same time, and it made me sad. Having done the intro course in Scheme, I'd say it helped me understand functional programming far more than I ever could have with Python, and it opened me up to different ways of thinking. Even though I never again used any Lisp variant, I'm still really glad I learned it and feel that what I learned using Lisp has informed my future decisio…

CS61A still has a Scheme project (albeit written in python), and focuses on Scheme for about a month before switching to SQL.

[1] http://cs61a.org/proj/scheme/

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

#66
post #22

Earlier quoted context omitted.

Every higher abstraction could be described as an attempt to pretend that the lower abstraction is less complicated and error-prone than it actually is.

I know - I'm being facetious, but really, if you want to really understand how most modern computers actually work, there's probably no better way than to learn C. It's high level enough and provides enough structure so that you don't need to actually blurt out a bunch of assembly instructions, but low-level enough so that your code mostly more or less corresponds to what the underlying Von Neumann hardware is actual…

How computers really work never clicked until I took a computer architecture class where we started in a logic simulator with individual gates, and progressed step by step until we had an 8-bit computer, running in the simulator, that could load in machine code generated by an assembler we wrote for that simulated computer, or compiled from a cut-down dialect of C.

That was a long semester.

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

#67
post #46

Earlier quoted context omitted.

The switch occurred while I was at Berkeley and it also made me sad. I loved that course so much I decided to TA for the self-paced version which kept SICP and Scheme. Brian Harvey explained the decision to switch here: "But, as I keep saying, the choice of programming language isn't the main point. I get upset when students, even the students who like 61A, refer to it as "the Scheme course." It's not a course about…

That's a brave and thoroughgoing attempt to, among other things, attract non-nerds to computer science. That's Berkeley. Abelson and Sussman once got MIT to trademark "Nerd Pride".[1] MIT still keeps the trademark active. Here's a Nerd Pride button.[2] [1] https://books.google.com/books?id=LJq0JhoElk8C&lpg=PA78&ots=... [2] http://www.computerhistory.org/collections/catalog/E1312 [2] http://www.computerhistory.org/col…

Hmm. I don't think Berkeley intentionally switched from Scheme to Python to attract so-called "non-nerds"; it was more founded upon a recognition that computer science will become essential in any field, and not to put at a disadvantage any student who wanted to learn but was new to programming. I mean the current enrollment for CS61A is well-over a thousand, the university lacks resources to properly fund the department, and to declare there's a 3.3 GPA minimum (assuming for Letters & Sciences as College of Engineering students get admitted into the major from freshmen admission).

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

#68

Earlier quoted context omitted.

If students have years of programming experience, why are they being made to take programming 101?

Because it is a required subject in your curriculum? You don't get to pass people just because they say they know something.

In addition, computer science is not the same as programming.

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

#69
post #2

I think there's a tension between two imperatives in teaching new programmers: 1) Learning must be applied learning. Give people problems to solve and they will come to you for data structures and algorithms, O notation, etc. If they don't, they should do something else 2) A lot of what's out there in programming languages are cargo cults, and newbies need to be prepared for this. For instance, virtual function inher…

My problem with this sort of bottom-up approach to learning how to program is that what seems "fundamental" from one point of view always turns out to be an abstraction built on an even lower-level foundation. So, virtual functions aren't real because they're just vtables implemented in C. But C isn't real because it's just fancy assembly language. But assembly language isn't real because it's just fancy machine lang…

F# would be particularly well suited for this since it can reasonably do imperative, object, and functional styles. I'm not as familiar with Elixir to make the judgement there. Though I suppose one could also argue for something like Clojure.

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

#70
If people aren't exposed to enough languages to a level of competent understanding, if not mastery, a groupthink monoculture will inevitably develop where engineers only understand JS and Python, not C, Tcl, Clojure, Erlang, Brainfuck, Haskell, Coq, Rust, etc.

The most important thing is for good engineers to understand both near-universal basic concepts and the low-level impact of data structures and algorithms (like branch mis-predictions / deep pipeline stalls, memory usage, latency, locality.)

Post reply on HN