This is like reading a modernized version of Shakespeare. You can still kind of tell the story is good, but it just feels lacking. It doesn't convey the same kind of weird magic, even though you aren't 100% sure what they are on about.<p>It is a perfect example of Rich Hickey's "Simple made easy" talk from a few days ago.
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.
This is ok, for a CS 101 class. I'm sure the students will turn out just fine. Some of them will likely be intrigued by the purple book their class name references. Looking at the schedule, it looks like it just covers the "Structure" and not the "Interpretation". My favorite parts of SICP are the 4th and 5th chapters, on metacircular evaluation, interpreters, lazy Scheme, Prolog, and compilation to byte code. I guess it's probably too much for CS 101 though. It would also be a lot more work to do those chapters in Python, since you'd need to cover scanning and parsing, instead of just using (read).
I took CS61A in the spring of 2008, when it was still done using Scheme. Looking through the first few lectures and the titles of later lectures, I'm struck by how much the material is the same. Most notably, in the first several lectures, they've made a point of stripping down Python to a subset that makes its evaluation near-identical to Lisp - by using only named functions (no '1+2', only 'add(1, 2)'), they've kept the emphasis in those lectures on the environment model of evaluation.<p>Looking through the later lecture titles, it's quite clear that (despite what other commenters are saying) the "deeper" parts of the course have been preserved.<p>There's a bit that's been lost in translation; in particular, while the emphasis on metalinguistic abstraction has been kept (students are going to be implementing an object-class system, in a rather elegant way that uses Python's capability to redefine attribute getters) the more exotic models of computation pursued in the old 61A have been abandoned. No more ambiguous evaluator. This is perhaps inevitable - it's just impractical to create a metacircular evaluator for a language as complex as Python. Still, the core of the class has remained, which is a testament to the fundamental similarity of the the Lisp model of computation with that of many modern scripting languages.
I'm simultaneously disappointed and thrilled about this. As I've suspected, teaching SICP in a language other than Scheme would require dropping chapters 4 and 5. They're simply too hard to do in any other language. Which of course is a bummer, since chapters 4 and 5 are huge amounts of fun.<p>All the same, I'm thrilled that SICP is being taught.
Well, at least they're still using Emacs. That being said, they have a weird way of describing the hotkeys. For example, for C-x C-f, they tell you to hold down C-x, release all keys, then press C-f. You don't need to release the control key, and it adds at least half a second if you do.
"I felt a great disturbance in the Force, as if millions of voices cried out in terror and were suddenly silenced. I fear something terrible has happened."
Won't this end in disaster considering the use of tail recursion in SICP versus Guido's flat out refusal to allow tail recursion optimization in Python?
But they can do such cool projects! Mining twitter data? Seriously?<p><a href="http://wla.berkeley.edu/~cs61a/fa11/projects/trends/trends.html" rel="nofollow">http://wla.berkeley.edu/~cs61a/fa11/projects/trends/trends.h...</a>