SICP: A Synonym for Computer Programming

Choosing a cryptic title for your blog-post has a polarizing effect. There is some novelty promise associated with an unfamiliar title. The promise is fulfilled if the blog-post is a good one. Let me try.

SICP stands for “Structure and Interpretation of Computer Programs.” If you are already familiar with computer programming, then there is a chance (sadly slim) that you have heard about this initialism. In my experience, few computer programmers (even experienced and professional) have heard of it. If you are unfamiliar with computer programming, then it is even less probable that you have heard of SICP.

SICP is, like the title of this blog-post proclaims, how programming should be introduced to people who have some interest in or inclination toward mathematics. If you have ever been attracted to the idea of a mathematical function, learning to program with SICP enhances your understanding of both mathematics and computer programming.

SICP is a university-level course given by MIT and it has a long history. But something very useful happened when people like Martin Henz, Tobias Wrigstad, and many others at Source Academy came together and provided a beautiful, self-paced course that ported SICP to a popular programming language, JavaScript. This course is called SICPJS and it is open-source and offered at no charge. As an introduction to programming as a problem-solving technique, nothing could be better than this for a budding computer programmer, and, dare I say, for a seasoned programmer. This, ladies and gentleman, is pure gold. These kind people have put in so much effort that I can’t even begin to thank them for it.

You don’t have to listen to me. Just look at what Guy Steele, Alan Perlis, Sussman and Abelson, and Henz and Wrigstad have to say (in their forewords and prefaces to this book) and you’ll perhaps be hooked to this course.

For the last three months, I have been doing SICPJS with a high school student, Apoorv Mhaswade, at our homeschool. Apoorv prepares to enter a college to pursue computer science — SICPJS could not have come at a better time.

The programming environment for SICPJS is not full-fledged JavaScript, but a growing subset of JavaScript, called Source (Source-1, Source-2, etc.). You write your programs in Source. The syntax is clean, the interpreter is well-made, and there is a thriving support community. I have cried, laughed, thrown my hands up in admiration and joy while reading this book and solving every programming problem in it. Apoorv has also thoroughly enjoyed this course. We have had invaluable discussions on many little topics and he appreciated every minute we spent on it. I am glad that we picked SICPJS for Apoorv’s high school senior year.

Don’t misunderstand that SICP is “programming for kids only”, or toy stuff, however. The ideas are timeless and although you may not agree with all of it, doing the course will enlighten you. The course is difficult. It makes you think. It makes you uncomfortable because seemingly simple questions trick you. If you are an experienced programmer, you even feel ashamed when you are not able to solve a simple-looking problem.

A programming language should have only as many tools as a programming craftsman needs to create programs. Being trained in imperative programming style may sometimes make you brand Source-1, or Source-2 programming languages (the ones used by SICPJS) as insufficient, but you don’t have to have plethora of tools. One needs to learn to think differently when learning new paradigms. Indeed, like the great Alan Perlis once said, “There is no point in learning a programming language if it does not change the way you think.”

My detailed log about our this course is here. But you forget about it and just head over to SICPJS. Keep calm and do SICPJS!

Leave a comment

Design a site like this with WordPress.com
Get started