SICP may well be the best computer science book ever written, nevertheless Eugene Wallingford believes that it is not suitable as a first course in the subject. He referenced an article in his recent blog post that details some major criticisms of the book:
“SICP doesn’t state how to program and how to manage the design of a program. It leaves these things implicit and implies that students can discover a discipline of design and programming on their own.”
“SICP students must spend a considerable effort on the domain knowledge and often end up confusing domain knowledge and program design knowledge. They may even come to the conclusion that programming is a shallow activity and that what truly matters is an understanding of domain knowledge.”
“Because SICP misses structural recursion and structural reasoning, it confuses implementing objects with object-oriented programming. The book never actually discusses reasoning about, and programming with, classes of data, which is the essence of modern OO programming.”
At the same time, Scheme remains an excellent choice for a first programming language. And functional programming should still be taught before object oriented programming. Meanwhile, street programmers in the real world have the difficulty of learning functional programming AFTER they’ve been trained to think entirely in terms of OOP.
Wallingford mentioned in his post that “a student is motivated to learn when her activities scratch her own itch.” I would say that that’s one of the things that makes learning Lisp difficult. We have to create new itches before we can even want to get started! And worse, you have to set aside some long held assumptions before you can make way for the itches. And finally… it’s just plain work to keep trying to get better. (Some people don’t even make it past the basic Emacs commands….) For people that pride themselves on being smart… it sure is tough working with a language that’s so pure and elegant that you’re limited only by your personal intellectual shortcomings. Normally you’re just limited by the tools you use! Creativity may thrive under artificial constraints, but the same cannot be said for raw power.