Every once in a while I find myself reading a book that makes me feel stupid. As I try to internalize the prose I can’t help but feel a strong sense of regret for not being more adequately prepared.
Then I learn that the book has long been the basis for an “Intro to Programming” course at some college. Did you say intro to programming!? This is usually the part where I start to feel a strong sense of inferiority. :-(
Is the feeling of inferiority enough to make me want to put the book down? Hell no. If anything I’m finding SICP to be one of the most compelling computer books I have ever read. Like the Scheme language itself, SICP is incredibly dense. No reading on autopilot here, folks. You need to be paying attention or you’re going to get nothing out of it. The code examples draw almost exclusively from math. In the first chapter alone the following mathematical concepts are used to “help” teach the reader about computer programming (in general) and Scheme (in particular):
The other thing that seems strange at first is that Scheme uses recursion for nearly all processing. I’ve only completed the first chapter, but I have yet to see a “for” or a “while” construct in any of the code.
I know that that some fellow .NET developers might ask “Why are you wasting your time with that?” or “Why aren’t you spending your time learning about Silverlight?” Well I couldn’t really say for sure. I’m a big fan of Paul Graham’s essays, so those are certainly what motivated me to have a look at a Lisp dialect. What’s keeping my interest is the richness and depth of the content. There’s just so much there.
I plan to post more about SICP as I wade my way through it over the next several weeks… or months. I’m going to take my time and savor every head scratching moment.
If you are Java or C# programmer who is looking for something to expand your mind, you should certainly have a look.