Skimming SICP

By Ev Bogue - November 24th 2014

Back in the day, if you wanted to learn anything at all, you had to go to college for four or twelve years before anyone thought you knew anything.

These days, the reverse seems to be true. If you want to learn anything at all, you'd best be learning on the streets or surfing the dark recesses of the collective mental space of the entire planet -- otherwise known as the Information Superhighway, Cyberspace, or The Internet.

Anyway, after studying programming for the past three or fifteen years, I've discovered I know almost nothing about how to solve real world programming problems.

Yes, I've gotten better at configuring and setting up software such as email servers, and web servers. But something is missing. Some vital part of what it is to be a programmer just doesn't seem to be clicking for me.

So today, I decided to skim the legendary SICP from back to front.

What is SICP?

SICP (Structure and Interpretation of Computer Programs) is a book originally written in 1985, and then updated sometime in the '90s, as an effort to teach beginning computer science majors at MIT how to think in the way that a programmer thinks.

Being that I was also written in 1985, this must make this book almost 30 years old.

But unlike most programming books, it doesn't show it's age. Why? I asked. WHY?

So I had to skim it to find out. Here's what I discovered...

Wait, not yet.

First let me justify why I skimmed the fraking huge book first.

Once upon a time, as I was browsing the information superhighway, I discovered something that someone wrote about reading programming books. I cannot make this shit up, because someone else told me about it first.

  1. Skim the whole fraking book.
  2. Do each exercise in the whole fraking book.
  3. Do each exercise in the whole fraking book without looking at it.

The reason to do the skim first is to have an overall understanding of what is contained in the book, and also write the whole book off if it turns out to be a waste of time.

So next time you read a programming book, don't read it, just skim it. You'll get to the end faster and then you'll know if you'll learn anything from reading it.

So yes, last night and today I skimmed SICP. All of the way through.

First, let's talk about the question I wanted to answer when I was reading SICP.

Q: How can I learn how to program and still be able to deal with normal day reality?

A: Not answered in SICP.

Bummer. I know.

But at least I skimmed the thing... because over the past 10 years, I imagine the number of people with the mental capacity to make it all of the way through SCIP has decreased exponentially due to the 'kids these days' thinking computers are to be used with a single thumb while sitting on a toilet seat. As illustrated by the number of hastily written emails I received from people who can't be bothered to turn of the "Sent from my iPhone" at the bottom of their message.

The good news is they still know how to use their thumbs, which is a big evolutionary innovation, but the bad news is they aren't quite sure what to do with the other eight fingers anymore.

So what did I get out of skimming SICP?

Some things... I learned about breaking programs into pieces. Modularization. I learned about separating data from the program itself. I read some inspirational quotes about keeping the magic in programming and wizardry in code. This made me feel somewhat inspired before I found myself in the drudgery of attempting to guess how to program a program that would guess whether or not the number I typed is prime.

The point is, I think SICP doesn't show its age because it doesn't attempt to tackle anything concrete, practical, or useful at all. It's mostly programming theory, which is beneficial, but also great for a skim.

As for practical programming advice, your guess is still as good as mine.

Maybe the only way to really learn programming is to back yourself against a terminal until you understand the problem in front of you.

Clean out your dead guppies →

← Why I respond to every incoming email