## Sunday, October 4, 2009

### The SICP Challenge

Late last year I wrote a post titled Books Programmers Don't Really Read. There was quite a bit of debate about the books I included on the list, and even some about a few I left off. The overwhelming consensus seemed to be that the one glaring omission was a little book called Structure and Interpretation of Computer Programs (SICP). I said at the time that I would add it to my queue of books to read, and now it's time to make good on that promise.

To make things even more interesting (and to keep myself motivated), I've decided to follow the MIT OpenCourseWare program that uses the book and blog about my progress.

The resources I plan to use include the following:
I'll keep this list updated with any additional resources that I find useful along the way. Suggestions are always welcome.

My personal goals for the program are:
1. To learn the Scheme programming language (a dialect of Lisp).
2. To read the entire SICP book.
3. To watch all of the MIT video lectures and post my transcribed notes here on my blog.
4. To do the exercises in each chapter of the book, and the projects listed in the MIT course syllabus. Solutions to exercises and projects (with explanations of both, of course) will also be posted here.
My next post will be my notes from the first lecture, with solutions to exercises to follow. I hope this series sparks some interest in other programmers who want to read SICP, learn Scheme, and maybe even take the course along with me.

Lecture Notes
Lecture 1A - Overview and Introduction to Lisp
Lecture 1B - Procedures and Processes: Substitution Model
Lecture 2A - Higher-order Procedures
Lecture 2B - Compound Data

Exercises
1.1 - 1.5
1.6 - 1.8
1.9 - 1.10
1.11, 1.12, 1.13
1.14, 1.15
1.16, 1.17, 1.18, 1.19
1.20
1.21, 1.22, 1.23, 1.24, 1.25, 1.26, 1.27, 1.28
1.29, 1.30, 1.31, 1.32, 1.33
1.34
1.35, 1.36, 1.37, 1.38, 1.39
1.40, 1.41, 1.42, 1.43, 1.44, 1.45, 1.46

2.1
2.2, 2.3
2.4, 2.5, 2.6
2.7, 2.8, 2.9, 2.10, 2.11 2.12, 2.13, 2.14, 2.15, 2.16
2.17, 2.18, 2.19, 2.20, 2.21, 2.22, 2.23
2.24, 2.25, 2.26, 2.27, 2.28, 2.29, 2.30, 2.31 , 2.32
2.33, 2.34, 2.35, 2.36, 2.37, 2.38, 2.39 2.40, 2.41, 2.42, 2.43
2.44, 2.45, 2.46, 2.47, 2.48, 2.49, 2.50, 2.51, 2.52
2.53, 2.54, 2.55, 2.56, 2.57, 2.58, 2.59, 2.60, 2.61, 2.62, 2.63 - 2.65, 2.66

Other Resources:
I'm not the first blogger to attack SICP, and I probably won't be the last. If you're looking for help with a problem that I haven't gotten to yet (or if you just want to check my answers), here's a list of a few other places to find SICP solutions:

Aruni RC said...

BIll, this is a noble endeavor indeed. SICP is arguably the best (heh, quoting other people here) book of its kind PLUS it's free.
Really looking forward to following your progress and will make an attempt to mirror it at my end. My last foray into sicp was last year.

Bill the Lizard said...

Aruni RC,
Great! I'm glad to have you following along. I'll try to have the first set of exercises up soon. I would have finished them tonight, but unfortunately I'm doing PC repair. I'm burning a new Ubuntu install disk on my wife's PC right now. :(

Aruni RC said...

lol. that's alright. Last time gave up on Ubuntu due to EC201 overload - FETs in college. xP the more the merrier.

William Sandoval said...

I had some Scheme introduction on my first semester at college.ohh that was the nightmare of all the students hehe

Ill be following ur progress and give a second chance to Scheme :P

cheers from Brasil

bryan said...

I believe it will be a rewarding journal. I found course videos of CS61A at Berkeley are great, too. The course uses SICP. You can found the the videos on iTunes U. Looking forward to your following posts.

Bill the Lizard said...

William Sandoval,
I had Lisp in school, but it was just a small part of a course on programming languages, so we only spent a few weeks on it. I'm hoping to get much better at it this time around. :)

Bill the Lizard said...

bryan,
Thanks for the alternate resource. There are a lot more lectures in the UCB set, so hopefully some of those will come in handy for sections of the book not covered by the MIT lectures. I'll add these to the resources section here.

dojik said...

Hello Bill. Let me ask you an intimate question:) Are you going to continue to do these exercises? I'm already doing my 2.6* and your blog was always so helpful, concise and detailed! I can even suggest you to cooperate if you'd like to%) I mean, if you are going to write some more code, it could be a great pleasure to me to discus these tasks with you.
Best regards.

Bill the Lizard said...

Hi dojik,

Yes, I do plan to continue with SICP soon. Classes really slowed me down for a long while, but I'm done with school now. I'm taking online classes in my spare time, but I have found a little bit of time to spend on SICP as well. I'm about halfway done with my next post, so look for it soon.