I started working through SICP back in the middle of June, and now, in the beginning of September, I’ve finished the first two chapters. This includes doing around 90% of the problems or so, and I’m leaving the last exercises of chapter 2 to the future to write the symbolic algebra part.
If you’re on the fence about working through SICP I can say that after the first two chapters it’s definitely worthwhile. If you’re not a pro at recursion, working through this book will help immeasurabely. Without the familiar looping constructs found in imperative languages, using Scheme will force you to get comfortable thinking recursively.
Chapter 2 is about 140 pages long and contains just short of 100 problems to do. It works through a few data structures such as sets and binary trees and shows how to abstact operations on them. It covers a number of forms of abstraction in Scheme that you can use in creating abstractions to represent different types. Then it shows how to create generic operations that work with different types. This is done through the example of a numerical package which allows programs to use different types of numbers and perform operations on them.
It took me a few months to work through the second chapter. I slowed down a little from my pace of working through chapter one. Counting the exercises I skipped I probably averaged about 1 or 2 problems a day. Some of the exercises are fairly tough in this chapter. While there are solutions online, some of the exercises are big enough and depend upon previous answers where its harder to check your work because there are multiple ways of going about the problems. That said, it’s definitely worth doing the problems.
Anyway, working further through the book, and cross referencing my work with other solutions online, it looks like there are a number of people who started SICP and don’t finish. I’m hoping that I don’t add to that number. I think my goal of working through it with regards to building the interpreter and compiler in the later chapters will keep me motivated.
I am going to take a break for the next month or so (possibly less) now to work through the new book by Thorsten Ball Writing a Compiler in Go and translate that to C#. It’s also time to start the Discrete Math Specialization on Coursera. I also have to write the third post in the series on flatmap…