I launched a Kickstarter project yesterday to do an idiosyncratic tour of the best of Structure and Interpretation of Computer Programs in Clojure
Please sign up if you are interested (below is copied from Kickstarter)
It is a great introduction to computation, Peter Norvig probably said it best:
To use an analogy, if SICP were about automobiles, it would be for the person who wants to know how cars work, how they are built, and how one might design fuel-efficient, safe, reliable vehicles for the 21st century. The people who hate SICP are the ones who just want to know how to drive their car on the highway, just like everyone else.
I was going to write more about why one should study SICP, but Kai Wu of Hacker Retreat did a stellar job here
It’s a long book, with lots of exercises and lots of people I know have started, loved it, but somehow not finished.
Abelson and Sussman themselves highlight the important lessons of SICP in their paper Lisp: A Language For Stratified Design and I have my own favourite bits.
As the book itself is available online for free I want to make the perfect accompaniment to it - an ebook summarising the key ideas, short videos describing them, screencasts of solving some of the exercises, translation of the examples into Clojure, example projects, partial solutions for you to complete (similar to 4clojure and Clojure koans) and a place to discuss solving them with people.
Something more like the exercises for the Feynman Lectures on Physics, to be enjoyed alongside SICP, rather than completely replace it.
Maybe some ideas come out a little different in Clojure, or I take a slightly novel approach (hence idiosyncratic), maybe I miss something out (hence tour, sorry), but I hope we can have some fun along the way.
I’ve surveyed friends and people who signed up early about which bits they enjoyed, where they got stuck and how best to approach it.
People that join in on the Kickstarter get a reduced price and a chance to affect the direction of the project (and, let’s be honest, be test subjects)
- A modern take on Lisp
- Slightly less parens (though obviously you will come to love them anyway)
- More immutability! (SICP gets as far as possible without mutation and quite rightly warns you to be careful when you start)
- An excellent parser library
- A more fully featured logic engine for us to peek at
- Different concurrency models
What will I do?
- Come to appreciate and use higher order functions
- Build everything from (almost) nothing
- Deeply embed DSLs into Clojure
- Draw Escher pictures
- Create datastructures
- Learn why reduce is considered harmful (not SICP but I have some fun exercises planned)
- understand iteration and recursion
- Create an object system
- Make a compiler
- Build a Lisp interpreter (or a mini version of your other favourite language)
- Do some logic programming
Having the money up front allows me to judge interest, spend more on post-production of the videos, devote more time to it and create a way for people to collaborate and help each other along the way.
I want it to be free!
So do I! If I was independently wealthy I would love to spend all my days on this, but alas I am not. I do believe in freedom though, and promise to make all the resources free after 12 months.
To quote RMS:
The copyright system works by providing privileges and thus benefits to publishers and authors; but it does not do this for their sake. Rather, it does this to modify their behaviour: to provide an incentive for authors to write more and publish more. In effect, the government spends the public’s natural rights, on the public’s behalf, as part of a deal to bring the public more published works
How long will it take?
I will roughly follow the books 5 chapters, one a month, that gives enough time for people to follow along. If we have a bunch of people going through at the same time we will be able to benefit from interactions within the group as well.
However I am often put off by artificial deadlines in MOOCs so want the material to stand alone (well at least alongside the SICP text) for someone doing it by themselves at whatever pace they like.