Even MIT abandoned SICP for its introductory course in favor of Python. But I believe it's featured in its second course, no? I don't consider that a mistake. If you're getting rid of it from the curriculum altogether, though, that's a mistake. This article didn't say if that was the case or not. (Also the point of SICP being language agnostic is fairly false. I mean sure you can implement iteration as recursion in other languages, but without tail call optimization it's going to be ugly. Then there's the whole "code as data" problem that's not easily extendable outside the s-exp world. I guess one might say the important, deeper parts of SICP work across languages, but is there an equivalent somewhere to SICP that's not in Lisp?)
Yes, not even the authors of SICP defend it as a good introductory text any more. They have observed that their students don't graduate into a world where they program using the pure, low-level constructs taught in SICP. Instead they have to grapple with layers and layers of APIs written by other people, and messy real-world problems. These require different skills, and it's not bad to have to learn them in school.
Still, SICP is one of the greatest computer science texts ever written, precisely because the learning curve is about as steep as it gets. Each chapter builds on the last, and by chapter three you're learning concepts that clarify some of the thorniest issues you will ever face in an average programming career. Even if you don't get to use a language like Scheme, it's sad if you don't know what SICP has to say about these problems.
1) MIT did not abandon SICP: it decided that it no longer wanted to teach core CS concepts. There was an interview with Abelson on HN a while back, look that up for more. SICP is not featured in the courses at all, unless you count 6.945, an advanced class with Sussman, that goes far beyond.
2) The fact that iteration is a special case of recursion is a fact that does not depend on a language. For its part, SICP distinguishes between the two specifically because most languages don't make this theoretical unity a practical one.
3) Code-as-data is not used much in SICP until the final chapters, where you implement a metacircular interpreter. It is impossible to implement a metacircular interpreter without making use of code-as-data, because that is its point. And in Python, a Scheme interpreter is just as approachable as in Scheme (a Python interpreter is not, simply due to how huge the Python langauge is).
4) There is not, AFAIK, and equivalent to SICP, because we already have SICP.
MIT did not abandon SICP: it decided that it no longer wanted to teach core CS concepts.
Wait, what? Are you claiming that the MIT undergraduate CS program does not "teach core CS concepts"? Or are you only talking about a single introductory course?
Yeah, but how well is the rest of SICP transmitted in a course using Java (6.005, at least according to the original plan)? Based on what I've seen (at a distance nowadays), MIT decided fundamentally change what it means to get an EECS education and degree in a panic move when enrollment dropped by half after being steady for decades.
> Also the point of SICP being language agnostic is fairly false.
I remember reading a bit of Eli Bendersky's SICP blog posts[1], where he started with the premise that he was going to work through SICP using Common Lisp rather than Scheme. I think that lasted through about half of the first chapter before he moved back to Scheme because he found it too hard to handle the differences between the two - I don't remember what specifically Common Lisp was lacking, but I remember he made it seem like a huge stumbling block.
[Disclaimer: This comment is based on a half-remembered perusal of only a couple of blog posts well over a year ago. Contents may not adequately reflect reality.]
Edit: I may have been badly misremembering. From Eli's "Conclusion" post[2]:
> Also, I originally planned to reimplement all the code do all the exercises in Common Lisp. Later I changed my mind and decided to use PLT Scheme for some of them. Eventually, I’ve been using both languages interchangeably, which is a good thing, as I got some practice with both.
When I started the project, I preferred CL over Scheme. Later, however, I had some experience with PLT Scheme and really liked the programming environment, so I decided to give it a try. I figured that using both languages will help me understand the differences between them better. It was not some serious limitation of CL, in any case.
As I said in my update, I was apparently badly misremembering a comment on your blog regarding the use of CL.
You've actually inspired me to take up a similar SICP reading/blogging project, though I'm hesitant for two reasons. First is the concern over the depth of the material. I don't have a CS degree and I'm mathematically out of shape (and I never even did a calculus class), so I'm concerned about making it to a certain point and then completely failing to be able to continue on. Second is a concern about copyright and plagiarism. I've never been clear where the line is with regards to the sort of summarizing knowledge of a whole book, since paraphrasing is still plagiarism AFAIK. Less of an issue with SICP, I'm sure, since you ended up with a signed copy, but I'm a very risk-averse individual and like to know exactly where I stand before attempting such a thing.
I'm sure that your blog will be a great resource for me when I do my version of your project, so I'd like to thank you in advance for having blazed the trail for me.
You should by all means do it, because you don't have a CS degree. Don't worry about the math too much - it is all explained there, and whatever isn't you can easily find out. Don't forget that the most important thing here is the learning experience. It may take you longer to complete, but you will learn more in the process.
IANAL. Plagiarism is only relevant in a classroom environment where you aren't doing work in the expected way. Copyright infringement is different. In the case of SICP, the entire book is available online for free, as far as I know the book doesn't contain answers to all of the exercises (so most work you do there is your own), and many of the code snippets are small enough that I don't think they would withstand a copyright claim in court. (It'd be like trying to copyright "for (int i = 0; i < MAX; ++i)".) Even if you blatantly copy out large sections from the ebook for a blog entry, I'm still pretty sure there's a strong fair use claim to be had. (I guess it would be weakened if your blog serves ads.) Cite your source and you'll be alright.
re: Calculus, you could always watch a few videos at Khan Academy. ;) I don't remember needing all that much calculus, but if you don't have a concept of derivatives or integrals then some of the earlier examples of higher order functions will go over your head. You could watch some online lectures here: http://academicearth.org/courses/the-structure-and-interpret... which don't ramp up the difficulty as steeply.
Right, sorry. `s/plagiarism/copyright infringement/g`. I've been reading a bit too much about education lately, and I guess it snuck in.
I knew SICP was CC-licensed, so I guess it was relatively clear that I'd be in the clear here. I have a sort of end game in mind where I build myself up enough to work through TAOCP as well (ha!), and it's certainly not CC-licensed. I rather enjoy the idea of doing something like this in public, for moral support and random acts of guidance, so it'll become important for me to know where the line is.
And yes, I'm quite familiar with Khan. I had a couple complaints about the site early on and ended up falling out of the work because of it (the main issue specifically was that I was working through the exercise section, and I had to do a geometry section for which there seemed not to be a relevant video, so I got stuck on a given node in the progress graph). The end game for that plan was to get at least through introductory calculus, since it almost feels like my geek card is illegitimate without it. I definitely need to take another run at it.