11 comments

[ 2.6 ms ] story [ 32.1 ms ] thread
I enjoyed this post - but I don’t feel like it added much beyond SICP itself and also one of my favorite books, Design Concepts in Programming Languages (Turbak et al.)
Makes me think of the environment notation invented/used by Joseph Weizenbaum in the paper "The Funarg Problem Explained" in 1968 and which was used by our Professor Daniel Ribbens in 1998-99 in our Scheme classes. The notation was really useful to understand how closures worked relative to the environment of definition vs the environment of execution. That was really interesting stuff. He called it the "Weizenbaum notation" but I never found any reference of it, except its use in that paper.
In our introductory CS course at UC Berkeley, CS61A (which is based on SICP but taught mainly in Python), we use http://pythontutor.com to visualize environment diagrams for our programs line-by-line.
If 61A taught me anything, SICP is bad introductory textbook for people who are not directly CS majors: it is not that accessible, and most people just want to learn Python.

I’m not saying SICP overall is a bad textbook; but it is something that can only be appreciated after realizing CS is not only tool for manipulating data.

I want to disagree with you, but you're basically right. The functional way of thinking is different enough it's an unnecessary complication for most non CS majors.

That said, you can teach very solid Computing Science using imperative languages. Algol is still used for research and publishing after all.

but at the birth of SICP, is there any suitable imperative language to do that?

If we exclude the part of functional language, SICP is a quite good advanced text for CS major.

It's worth looking at operative lisps such as kernel or wat (I wrote a wat-pl to go with the original wat-js) to get a full understanding of how amazing this model is