## 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.

lol said...

Hi .. i tried installing the MIT scheme on my PC ubuntu as proceded as per the insctrution but i encountered floating point core dump..
Please let me know how to get away from this problem...

Mark said...

I hope you get back to doing the exercises! I'm starting Chapter 3 and want to continue comparing my answers to yours!

Yuzhe Wu said...

Hi Bill,

I came across your blog as I search for an exercise from the SICP book. Well looks like it's been quite a while for you... Like the way you laid out a plan and blogged about your progress(:

I find your write-up of course notes really nice and detailed. Wondering how you managed to transcribe all the materials, also what motivated you to spend time on careful documentation?

I've been attempting at the SICP book for a while and just started the section on compound data. Enjoyed the reading and video lectures by the authors, though I feel the MIT course syllabus is not light at all and requires quite some effort to keep the momentum, especially in case of self-study. I'm trying to do all the exercises and if possible the course projects as well.

Cheers,

Yuzhe

Bill the Lizard said...

Hi Yuzhe,

I originally started blogging my progress because I thought it would keep me motivated to finish. That worked for some time, but after a while it became demotivating. It was taking a lot longer to get through each section of the book than it would have if I hadn't decided to blog each exercise. I'm glad that I was able to help a few people when they were stuck in the early parts of the book, but ultimately I had to give up on finishing the blog series. Too many other things in life were competing for my time.

I still enjoyed the book a lot, and I highly recommend reading it to anyone who's interested. However, if you want to finish reading it, I would say it's fine to try the exercises and search for someone else's solution if you get really stuck.