Home All Posts

SICP Chapter 1 Thoughts

2018-06-23

As part of my ongoing effort to blog more, I’m taking the time now to reflect on my experience so far with chapter 1 of SICP (Structure and Interpretation of Computer Programs). To the poor people who have found this blog and have decided to read this post, I’ll try to make it somewhat painless. If you’ve read any of my other posts and you’re actually a return reader (doubtful) you’ll know that I’m trying to blog more. So this is somewhat of a forced post simply to get me in the habit of producing content. That sounds bad. Anyway, if you’re considering reading SICP you might find it interesting.

In one of my past posts I said something along the lines of if this is your first book on programming I felt bad for you. I still basically feel that way, although you could certainly do much worse. My first book on programming was QBasic for Dummies. I read it back when I was in middle school. I’ve seen it muttered on the interent that learning BASIC permanantly warps your mind for programming, so maybe I’m damaged in that way, but I still think that was a great book. I had a lot of fun hacking away at QBasic programs in its limited IDE on DOS on my first computer.

So in an equivocating manner I’ll qualify my last opinion and say that SICP can be a great first book on programming. I’ve learned new things in the first chapter that I didn’t pick up in any number of books that I’ve previously read and the exercises contained within SICP have made me think. My first attempts at programming included writing a musical keyboard in QBasic and having fun, more then learning algorithms. If you’re just getting started in computers and want to learn how to make things and get some exposure to what programming lets you do, SICP may not be the best there. If however you have enough skills to install DrRacket and put it in SICP mode, SICP will teach a lot more then your typical learn programming book.

I also don’t have any other recommendations on what a good first book on programming would be. There are a lot of these books out there, so maybe, since you’ve made it this far and you might actually be considering reading SICP first, you should just go ahead and do it. Or learn JavaScript, maybe it doesn’t matter. Part of me thinks you might want to see if you like programming before you think about concepts like is a process linear recursive, or linear iterative. Although in the long run it’s probably better to understand these concepts then it is to know how to put a button on the screen.

If you have programmed before and are looking to add to your skills, then SICP seems pretty great. It is not a quick read and each section builds quickly on the last, even in the first chapter. This is not a teach yourself how to program in C# book.

I suppose I can’t say much about SICP yet since I’ve only read the first chapter and worked through some of the exercises so far. But I guess I can comment on the first chapter since I’ve read that.

Since I’ve been watching too much Star Trek again, let me attempt a poorly done analogy.

If the Klingons were programmers instead of warriors in a fictional universe, they would say the first chapter is worthy of stories and songs. The programming Klingons would drink blood wine while conjuring up the computers spirits that the glorious LISP language brings forth. The Ferengi would plan on using applicatively evaluated linear iterative procedures to earn strips of gold pressed latinum. The Romulans would secretly conceal their plans. Star Fleet would plan on introducing a recursive algorithm with exponential growth in space and time to the Borg mainframe before deciding not to do it because of Hugh.

Us humans limited to the present day and not space traveling denizens of the future, well, we’d probably all evaluate it differently.

At this point I’m trying to refrain from looking at it like a programming Klingon. It is exciting, and I’m anxious to get further in the book as it will propel me further towards being able to write and understand interpreters and programming language theory. I don’t have any blood wine though. For now I’ll try not to buy too many new books to distract me from getting through the rest of the book.