The very notion seems strange to me, because when I read SICP it was primarily a "learn LISP's model of computation" book, not a "learn how to program, and we just happen to be using a LISP" book. Because of that, it doesn't make much sense to me to port SICP to a non-LISP language.
The way it was explained when I took the class was that the language is irrelevant for such an intro class and he (harvey, the guy who taught in scheme) just used scheme because SICP is so good.
We actually went through tons of different programming paradigms that scheme and lisp probably weren't really designed for, like OO (closures upon closures, all the way down). Throughout the class harvey and the TA's emphasized that everything we were learning could be done in any language, and didn't actually require scheme or lisp (yes, we never got to macros).
I can understand why you it might seem strange to port SICP over to scheme if you read SICP with the intention of learning lisp, but at berkeley the point of using SICP was to iterate through many different programming paradigms and cover basic computer science. unless they've found a better manual for this, it makes a lot of sense to just translate SICP instead of starting from scratch.
I don't know, I found the way they did OO actually made more sense than what I was taught earlier in a class using Java. It also seems more logical and elegant than Python's OO implementation, even if Python's isn't quite as arbitrary and complicated as Java's.
I think the language was only irrelevant because Scheme is so simple. We covered it in a couple of lectures and then it stayed in the background.
I really don't see the case for switching to Python at all--why "fix" something that isn't broken? Everybody seems to just assume that Python is a better choice.
None of the professors want to teach in scheme anymore, and a vocal subset of the eecs students think scheme is a waste of time because it has no real world applications.
That said, I think scheme is one of, if not, the best language to begin programming in, and agree with you that none of the reasons given for switching were very compelling.
Those scheme handles OO paradigms, the way it does is kind of annoying below the abstraction. however, scheme wasn't designed to handle OO, it was designed for functional programming. if i remember correctly, mutability is a hacked on addition (one of the reasons you use set! instead of def).
most of the arguments that i heard about moving away from scheme were about how it wasn't worth teaching to people who had never programmed before because it wasn't practical/real world enough or too abstract/LISPy.
i think scheme is still great if you already know some programming because you can appreciate it even more.
If you are MIT/Stanford/UCB and you are worried that you have to teach an industrially useful language because the students need it to get jobs - then you should close down and send them to Pheonix or ITT-Tech
My understanding was that MIT switched to python because in later courses they could actually use it to get things done (robotics, image proc, etc).
While if they taught scheme they had to at the end of the course pretty much say: well that was fun, now we have to teach you something useful to get the rest of the course done.
i meant it wasn't real world/practical enough for other classes, though a certain subset of students only really seemed to care about languages and concepts that they might use in industry.
mit and berkeley had/have the exact same "problem" with scheme (ie they don't/can't use it in any other class except the intro-to-into-cs class). This usually resulted in upped div classes spending a a class or two (basically a week of instruction, or a week of lab) on teaching the basics of the language the course is in. Though when i took the compilers course a few semesters later, the second slide of the entire course was "RTFM", and the professor dryly noted that we would be compiling a subset of python down to x86 assembler using c++, and despite the fact that he didn't expect any of us to know those languages at all, we didn't have the time to spend a lecture or discussion/lab on learning them, so we would have to learn them, on our own time.
I suppose that switching to a language that can be used in many classes is nice, but i don't think the students should have that much trouble switching if the professors supply supplementary material and they (students) understand the intro courses well enough. Plus, I think it's a good idea to get exposed to as many languages as possible, so you learn to think in a way that you can code well in any language.
Maybe at MIT an "introductory course" means something a lot different than the school I went to, but SICP covered a lot of stuff in more depth than my entire CS degree did. I'm referring mostly to the 4th and 5th chapters, which cover language implementation right down to the hardware. Are those chapters included in MIT's "introductory" computer science course?
My impression, and I recall this from reading the introduction, is that the fourth chapter is included--just like at Berkeley--but the fifth chapter isn't.
The way the Berkeley intro course series is structured, it actually makes sense to not teach the fifth chapter in the first class: the idea is that you go from the top down, starting with really high abstractions and working your way down to building a computer out of logic gates. The fifth chapter fits in with the latter portion more than with the rest of SICP.
Also, MIT doesn't teach SICP at all in its intro course any more, as far as I know. They've also switched to Python, but I don't think they've kept the book, structure or material from the Scheme course (unlike what Berkeley is doing here).
My experience was quite the opposite. SICP was a "learn about computation" book with a lisp-like language as the least-unnecessary-complexity way of expressing it.
Comments
The very notion seems strange to me, because when I read SICP it was primarily a "learn LISP's model of computation" book, not a "learn how to program, and we just happen to be using a LISP" book. Because of that, it doesn't make much sense to me to port SICP to a non-LISP language.
The way it was explained when I took the class was that the language is irrelevant for such an intro class and he (harvey, the guy who taught in scheme) just used scheme because SICP is so good.
We actually went through tons of different programming paradigms that scheme and lisp probably weren't really designed for, like OO (closures upon closures, all the way down). Throughout the class harvey and the TA's emphasized that everything we were learning could be done in any language, and didn't actually require scheme or lisp (yes, we never got to macros).
I can understand why you it might seem strange to port SICP over to scheme if you read SICP with the intention of learning lisp, but at berkeley the point of using SICP was to iterate through many different programming paradigms and cover basic computer science. unless they've found a better manual for this, it makes a lot of sense to just translate SICP instead of starting from scratch.
I don't know, I found the way they did OO actually made more sense than what I was taught earlier in a class using Java. It also seems more logical and elegant than Python's OO implementation, even if Python's isn't quite as arbitrary and complicated as Java's.
I think the language was only irrelevant because Scheme is so simple. We covered it in a couple of lectures and then it stayed in the background.
I really don't see the case for switching to Python at all--why "fix" something that isn't broken? Everybody seems to just assume that Python is a better choice.
None of the professors want to teach in scheme anymore, and a vocal subset of the eecs students think scheme is a waste of time because it has no real world applications.
That said, I think scheme is one of, if not, the best language to begin programming in, and agree with you that none of the reasons given for switching were very compelling.
Those scheme handles OO paradigms, the way it does is kind of annoying below the abstraction. however, scheme wasn't designed to handle OO, it was designed for functional programming. if i remember correctly, mutability is a hacked on addition (one of the reasons you use set! instead of def).
Every time I hear from someone that scheme has no real world applications, I like to pass them this link: http://philosecurity.org/2009/01/12/interview-with-an-adware...
if i remember correctly, some airfare calculators were/are written in scheme/common lisp for the macros as well.
I, along with several others, are also trying to be vocal in support of Scheme, but I think we're an even smaller subset :(
That said, the self-paced class seems really good. Some of my friends are TAing for that class and it seems to be going well.
i just hope it lives on every semester, and the faculty doesn't treat it like the red-headed step child of the 61 family.
>best language to begin programming in The problem is that how many of the new undergrad intake at MIT/UCB are new to programming !
It was a little easier back in the 80s when the new students would only have known BASIC or 6502 assembler
most of the arguments that i heard about moving away from scheme were about how it wasn't worth teaching to people who had never programmed before because it wasn't practical/real world enough or too abstract/LISPy.
i think scheme is still great if you already know some programming because you can appreciate it even more.
If you are MIT/Stanford/UCB and you are worried that you have to teach an industrially useful language because the students need it to get jobs - then you should close down and send them to Pheonix or ITT-Tech
My understanding was that MIT switched to python because in later courses they could actually use it to get things done (robotics, image proc, etc). While if they taught scheme they had to at the end of the course pretty much say: well that was fun, now we have to teach you something useful to get the rest of the course done.
i meant it wasn't real world/practical enough for other classes, though a certain subset of students only really seemed to care about languages and concepts that they might use in industry.
mit and berkeley had/have the exact same "problem" with scheme (ie they don't/can't use it in any other class except the intro-to-into-cs class). This usually resulted in upped div classes spending a a class or two (basically a week of instruction, or a week of lab) on teaching the basics of the language the course is in. Though when i took the compilers course a few semesters later, the second slide of the entire course was "RTFM", and the professor dryly noted that we would be compiling a subset of python down to x86 assembler using c++, and despite the fact that he didn't expect any of us to know those languages at all, we didn't have the time to spend a lecture or discussion/lab on learning them, so we would have to learn them, on our own time.
I suppose that switching to a language that can be used in many classes is nice, but i don't think the students should have that much trouble switching if the professors supply supplementary material and they (students) understand the intro courses well enough. Plus, I think it's a good idea to get exposed to as many languages as possible, so you learn to think in a way that you can code well in any language.
Maybe at MIT an "introductory course" means something a lot different than the school I went to, but SICP covered a lot of stuff in more depth than my entire CS degree did. I'm referring mostly to the 4th and 5th chapters, which cover language implementation right down to the hardware. Are those chapters included in MIT's "introductory" computer science course?
My impression, and I recall this from reading the introduction, is that the fourth chapter is included--just like at Berkeley--but the fifth chapter isn't.
The way the Berkeley intro course series is structured, it actually makes sense to not teach the fifth chapter in the first class: the idea is that you go from the top down, starting with really high abstractions and working your way down to building a computer out of logic gates. The fifth chapter fits in with the latter portion more than with the rest of SICP.
Also, MIT doesn't teach SICP at all in its intro course any more, as far as I know. They've also switched to Python, but I don't think they've kept the book, structure or material from the Scheme course (unlike what Berkeley is doing here).
My experience was quite the opposite. SICP was a "learn about computation" book with a lisp-like language as the least-unnecessary-complexity way of expressing it.
In comparison, Python has way too much cruft.