Vedant Kumar has a provocative post entitled SICP is Under Attack in which he laments the abandonment of SICP by several universities and especially by Berkeley, where he is a EE/CS student. Berkeley, it turns out, is replacing SICP with Dive Into Python. I’m having a hard time getting my mind around this.
I’ve read Dive Into Python and it’s a very nice book—excellent for learning Python—but it’s not really a book about Computer Science or learning to think like a computer scientist. If you’ve watched the famous SICP lectures given by Abelson and Sussman at HP you may recall that in the first lecture Abelson specifically says that Computer Science is no more about computers than geometry is about surveying. That little nugget is from 1986 and has aged well, I think.
How then, does it make sense to replace a book about Computer Science—arguably the best book about Computer Science—with a book that teaches a particular language? Yes, SICP uses Scheme but the point was that Scheme was so easy to pick up that they spent virtually no time on the language; they concentrated on Computer Science concepts such as recursion, complexity theory, and fixed points.
To be fair, Kumar has an update in which he says that Berkeley has assured him that all that’s really happening is that they’re moving from Scheme to Python and that the content from SICP will be preserved. Even if that’s possible, it makes the decision worse in my opinion. SICP is the exemplar of its approach. Why would you replace it with something else? Again, Dive Into Python is a fine book for learning python but in no way does it cover the same material or serve the same ends as SICP.
MIT, of course, famously abandoned SICP too but they, at least, had a reasonable, if not ultimately convincing, rationale for doing so. Sussman explained that software engineering today is all about gluing together huge libraries that hardly anyone understands and that the SICP approach of understanding everything “all the way down” isn’t used anymore or at least is less relevant. That may be true but it’s no reason that students should not learn the material that forms the foundation of their craft.
In the last couple of days. I’ve seen several posts lamenting the fact that younger engineers don’t really understand the fundamentals or what’s going on “under the covers.” Of course some of this could be the normal “kids today!” that fogies have been muttering since Plato but if our very best engineering schools, like Berkeley and MIT, are teaching their students to glue libraries together at the expense of learning and understanding the foundations of CS these observations should come as no surprise.