June 17, 2016

So I’ve got less than a month until my time at Viking Code School truly begins. For better or worse, I’ve been spending much of my time working through SICP.

SICP, or the Structure and Interpretation of Computer Programs, is a wonderful book. Originally used as the primary text for MIT’s Intro to CompSci course, it has come to be known as the de facto book for broadening one’s computer science horizons. The top two reviews on its Amazon page are by Peter Norvig (Director of Research at Google) and Paul Graham (Viaweb co-founder, Y Combinator co-founder) and they both give the book five stars. And while I simply don’t have enough time to work through the entire book before the beginning of VCS, I have been reading through each section as a way to introduce myself to topics like concurrency, streams and meta-linguistic programming. And then there’s Scheme.

Scheme is the programming language used in conjunction with SICP. The history of the language is actually very interesting. See, Scheme is technically a ‘dialect’ of the family of programming languages called Lisp. If that sounds strange that’s because it is. The original Lisp language was originally invented as a programmatic take on lambda calculus by John McCarthy, widely considered one of the “founding fathers” of artificial intelligence. About a decade later, Guy Steele and Gerald Sussman created the Scheme dialect. Sussman went on to write SICP and teach the course at MIT, meaning Scheme(and Lisp) is heavily rooted in the roots of Computer Science.

As for the why the language is such a big deal, Paul Graham has written extensively on the virtues of Lisp over on his website. He even describes how the language gave him a major competitive edgewhen he was developing his startup, Viaweb, which sold to Yahoo! for about 50 million dollars in 1998 and was re-dubbed Yahoo! Store. Suffice to say, Lisp is a compsci nerd’s wet dream.

From my relatively naive standpoint, I think giving some attention to some of the fundamental computer science topics is a good idea. I recently read an article by a startup called Triplebyte, a startup that helps engineers find jobs at other startups. In the article, they discussed the dichotomy between the abilities of CS majors and those of bootcampers in terms of aceing a technical interview. Their findings boiled down to bootcampers doing better than average in web systems design while CS students did better than average in algorithms and data structures. And that seems to check out since bootcampers typically focus on practical knowledge while CS students tend to cover abstract concepts more thoroughly. Which brings me back to SICP — my hope is that its heavy focus on the fundamentals will help me shore up areas that VCS may not cover as thoroughly.

Practicality aside, it is certainly interesting material.

P.S. Here’s a particularly bad-ass note from the book’s section on concurrency:

“The basic phenomenon here is that synchronizing different processes, establishing shared state, or imposing an order on events requires communication among the processes. In essence, any notion of time in concurrency control must be intimately tied to communication. It is intriguing that a similar connection between time and communication also arises in the Theory of Relativity, where the speed of light (the fastest signal that can be used to synchronize events) is a fundamental constant relating time and space. The complexities we encounter in dealing with time and state in our computational models may in fact mirror a fundamental complexity of the physical universe.”