Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

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?

Here's an interesting direction to take SICP: http://ocw.mit.edu/courses​/electrical-engineering-an​d-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.



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....


"but Python supports proper closures"

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.


Your link to the ocw course is not working. Google gave me: http://ocw.mit.edu/courses/electrical-engineering-and-comput...

Might be a encoding issue with your link? You have "%E2%80%8" pasted periodically throughout the link.


Chromium bug ticket: http://code.google.com/p/chromium/issues/detail?id=53579&...

How "%E2%80%8" got in your link in the first place would be interesting to know though.


I don't know :(. I copy pasted the link, but it doesn't seem like it worked in the post.


Thank you. Many of the comments here make it sound like the sky is falling. It's nice to hear from someone involved in the decision.


"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!


Ras Bodik's CS 264 ends fulfilling a similar purpose if you're still at Cal and interested in the programming language design side of things.


Woah, woah, Brian's retiring? Always Felleisen at NEU...


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/)


Here's a Google Wave containing list of problems found in DiP: https://wave.google.com/wave/waveref/googlewave.com/w+8KfvUG...


Some of those are problems, but many of them are "I would present this material differently."


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:

  import re

  def plural(noun):          
    if re.search('[sxz]$', noun):            
        return re.sub('$', 'es', noun)        
    elif re.search('[^aeioudgkprt]h$', noun):
        return re.sub('$', 'es', noun)      
    elif re.search('[^aeiou]y$', noun):      
        return re.sub('y$', 'ies', noun)    
    else:
        return noun + 's'




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: