Whoa, stop. There's a lot of issues in this article. First of all, Berkeley is NOT getting rid of SICP and SICP ideas. This is flat out untrue.
I'm a recent instructor for the course, and I've spoken to several TA's about this course. Below is a rough summary of what we've discussed. This should not be construed as the "official line", but take from it what you will.
First, Berkeley are not getting rid of SICP. For those who aren't aware, they (the future TA's/instructors) are making lecture notes based on SICP but using Python 3).
From a TA:
At the end of the day most of the reason for moving to Python (beyond the weak argument that it's a bigger community), is that there was a meeting where they realized that nobody wanted to teach the course in Scheme after Brian retires. I'm not burning him at the stake, I read his argument and I've considered it. All I'm saying is that he has bad information. Also, lambda is cool but the only difference between that and defining a function inside the body of another function is the requirement of a name. I know lambda's amazing and it's not nearly as magical when you do it in Python, but Python supports proper closures which is the real reason lambda in Scheme is so powerful.
A different TA:
But the real reason it's not being taught in Scheme? My understanding is that it's not being taught is because no professor wants to teach it in Scheme.
Secondly, we talked about some concerns about whether SICP is actually a good INTRODUCTION. I don't think we dispute that there's a huge value in the course, but whether it's good for an introduction is I think, debatable
I do know that when I was a student, I raised many of these same concerns and frankly, I dont think those concerns are invalid. I think that until you have an appreciation for mathematical elegance and REALLY REALLY understand SICP, which appears to only be true for less than half of the students, much of it is lost. I know that was the case when I took the class, at least.
Should clarify. I'm not saying that 50% of the class "doesn't get it", but there's a deeper level that I think is hard to grasp for people who either don't spend 40 hours a week on this, or don't have a mathematical background.
Good example: Data directed programming. Me as a student was: WTF is this? So I always just call this 'get-data' function? What's the point? Where's the application?
The examples in Scheme are often /SO SIMPLE/ that exercises seem like they are dumb. They often look like a point docking trap in exams to students.
In my mind, SICP is better as a capstone, senior course. Think about all of us who defend it. Do we think that we could reach a better audience with that message if the audience were seniors looking for a summary/enlightenment, rather than freshmen exploring CS and engineering applications?
Correct me if I'm mistaken, but my understanding is that this is essentially SICP if they were to teach a graduate-version of the course. This looked /insanely/ cool.
In any case, for future TAs and Instructors of this course:
It is now up to you to make sure the spirit of SICP and CS education lives on! Not that it's been any different since the beginning of time.
In my mind, SICP is better as a capstone, senior course. Think about all of us who defend it. Do we think that we could reach a better audience with that message if the audience were seniors looking for a summary/enlightenment, rather than freshmen exploring CS and engineering applications?
Indeed. I read SICP while in grad school w/ the online lectures. Frankly, I'm not sure I would have appreciated SICP nearly as much in my freshman year. With that said UCB and MIT are probably the two places you'd expect to find freshman that would appreciate it. But given the fact that the text is freely available online, and there are great lectures available for free online, it might be reasonable to say that for the inquiring student, they can use MIT's Open Courseware.
Here's an interesting direction to take SICP: http
The link you posted is dead. I'm interested in what it is. Could you post a new link?
The link was the 6.945 course at MIT. As I understand it, it's SICP used in a graduate course. It still shows up on google if you search 6.945.
For the truly inquiring student, there's also a planned self-paced version of the course that may also include an honors option to dive deeper than what we can do in 61A (aka, SICP/6.001).
I have taught short programming classes for total beginners, and had the most success by following the first chapter of SICP.
1. It explains what computation is. Total beginners generally have no idea how a program executes and what it does. Explaining it using the substitution model is extremely helpful.
2. It introduces functions right away. This is a way better introduction than trying to explain type-related nonsense like "this is an integer, and this is a floating point number, and this is a string, and these are operators."
3. It avoids IO as the first thing people do. This helps avoid the problem of people thinking that printing "hello world" to the screen is equivalent to returning "hello world" from a function. Beginners should write functions which return stuff, not worry about whether the gets function (Ruby) returns something with a trailing newline.
4. Minimal syntax. Beginners have a hard time with semicolons and begin/end blocks. Python? You're kidding. Beginners don't understand whitespace indentation until they've been programming for at least several days, and making things align right is a horrible thing to throw at them.
I'm willing to accept that SICP's requirement of knowledge of basic calculus makes it a high barrier for many students, but frankly, it's the only book I've seen which introduces beginner concepts in the correct order.
There's no denying raw SICP demands a high level of mathematical maturity, since that could be assumed of all students taking 6.001 (all must master the calculus and calculus based Newtonian mechanics and E&M). But since you can't have an accredited by ABET CS program without requiring the calculus....
Is this a recent development? Without proper lexical scoping, don't you have to do weird stuff like creating an array if you want to update a value inside a "closure"?
One might argue you shouldn't mix functional programming with side effects. ;P
But it's not so much the case of scoping as the case of variable binding. Assignments/statements in Python don't work like they do in some other languages. So your inner function can reference the outer "x" all it wants, but you'll get problems if you try to do something like x += 1.
I find it pretty disappointing that SICP is considered too tough for matriculants of a top CS program. Perhaps you should consider enrolling fewer students and raising standards.
I'm haven't said that, so please don't insult my students by saying that. My argument for it being a capstone stems not at all from that it's too hard. We can not, should not require our students to be putting in the amount of time necessary, in my opinion 40hrs/week, to completely 100% understand this material as a freshman. In my mind, completely understanding it is required for the 'enlightenment' that many like about SICP, but this is not true for many other courses. By putting it in Python, students can learn many useful skills along the way.
Furthermore, I'm arguing that all things being equal, the time is better spent as a senior when you might be able to get the same points for a much lower time commitment.
And, please, remember that this is just one class in a curriculum of CS courses. There is a lot of effort being put in by dozens of professors to graduate the best and brightest, which we do.
"First of all, Berkeley is NOT getting rid of SICP and SICP ideas."
Yeah, that's what they said at MIT, and to my somewhat limited knowledge it simply didn't happen (e.g. most of that material is supposed to be taught in a course that uses Java, which invokes the surface of the phrase "not even wrong").
Ah well, "and then there was one" (CMU among the top 4).
I do like the idea of having it as a capstone. It's what Brian said: "I wish we could teach SICP both to incoming freshmen and seniors before they leave." I definitely understand a lot more of everything the second time through as a TA!
Hi! As a member of the Python community, could you please pick a better textbook than Dive into Python? Think Python is a far better book, off the top of my head, but nearly anything's better than DiP for people not acquainted with the language. (http://greenteapress.com/thinkpython/)
The factual inaccuracies in the Strings chapter, covering encodings and Unicode, are horrific enough. Confusing UCS-4 and UTF-32, getting historical orderings wrong, completely forgetting to mention Latin-1, and worst, failing to directly outline the connection between encoded streams of bytes, and Unicode strings, in clear and direct language.
Also, the horrific RE abuse at the beginning of Chapter 6 is a remarkable standalone example of Doin' It Wrong:
I'm a recent instructor for the course, and I've spoken to several TA's about this course. Below is a rough summary of what we've discussed. This should not be construed as the "official line", but take from it what you will.
First, Berkeley are not getting rid of SICP. For those who aren't aware, they (the future TA's/instructors) are making lecture notes based on SICP but using Python 3).
From a TA: At the end of the day most of the reason for moving to Python (beyond the weak argument that it's a bigger community), is that there was a meeting where they realized that nobody wanted to teach the course in Scheme after Brian retires. I'm not burning him at the stake, I read his argument and I've considered it. All I'm saying is that he has bad information. Also, lambda is cool but the only difference between that and defining a function inside the body of another function is the requirement of a name. I know lambda's amazing and it's not nearly as magical when you do it in Python, but Python supports proper closures which is the real reason lambda in Scheme is so powerful.
A different TA: But the real reason it's not being taught in Scheme? My understanding is that it's not being taught is because no professor wants to teach it in Scheme.
Secondly, we talked about some concerns about whether SICP is actually a good INTRODUCTION. I don't think we dispute that there's a huge value in the course, but whether it's good for an introduction is I think, debatable
I do know that when I was a student, I raised many of these same concerns and frankly, I dont think those concerns are invalid. I think that until you have an appreciation for mathematical elegance and REALLY REALLY understand SICP, which appears to only be true for less than half of the students, much of it is lost. I know that was the case when I took the class, at least.
Should clarify. I'm not saying that 50% of the class "doesn't get it", but there's a deeper level that I think is hard to grasp for people who either don't spend 40 hours a week on this, or don't have a mathematical background.
Good example: Data directed programming. Me as a student was: WTF is this? So I always just call this 'get-data' function? What's the point? Where's the application?
The examples in Scheme are often /SO SIMPLE/ that exercises seem like they are dumb. They often look like a point docking trap in exams to students.
In my mind, SICP is better as a capstone, senior course. Think about all of us who defend it. Do we think that we could reach a better audience with that message if the audience were seniors looking for a summary/enlightenment, rather than freshmen exploring CS and engineering applications?
Here's an interesting direction to take SICP: http://ocw.mit.edu/courses/electrical-engineering-and-comp...
Correct me if I'm mistaken, but my understanding is that this is essentially SICP if they were to teach a graduate-version of the course. This looked /insanely/ cool.
In any case, for future TAs and Instructors of this course: It is now up to you to make sure the spirit of SICP and CS education lives on! Not that it's been any different since the beginning of time.