Taking SICP one step at a time

If you’ve been dabbling with learning programming you may owe it to yourself to gain a basic understanding of computer science. Even if you have learned to programme your level of knowledge of basic computer science concepts may be holding you back. Some self-taught programmers will be able to implement complex and subtle functionality but others will struggle if they have no formal grounding in computer science. For example if you find yourself writing a lot of boilerplate code you may need to develop your theoretical knowledge in order to better identify efficient means of abstraction that would make their code better. More time spent coding may offset to some extent a good grounding in computer science but there may come a point where improved knowledge of how to structure programs becomes essential.

I want to learn computer programming because I find it interesting and diverting. It represents practical but also appealingly esoteric knowledge that is – at least in principle – perfectly accessible to anyone sufficiently motivated. I don’t have any particular aspirations to switch careers to a field related to programming but a practical knowledge of computer science and programming seems unlikely to be harmful to my career prospects or professional development in the long term. I work currently in a non-computing-related technical profession in which software tools are becoming increasingly important.

My desire to learn to programme started out with an interest in UNIX system administration. After wasted opportunities in my teenage years I started learning about Linux in my twenties. Getting to grips with system administration exposed me to software and I became increasingly interested in the open source software ecosystem and in specific open source projects. I started wondering how I might be able to contribute or at least find some useful and rewarding endeavour to give my interest in computing and system administration some meaning and direction. I wanted to understand how everything fitted together and to develop the skills and knowledge to create from scratch something that is useful (and perhaps clever).

The Structure and Interpretation of Computer Programs1 (SICP) book has a near mythological status in computer science education circles. Not everyone gets on well with it but everyone has an opinion. SICP is recommended as a core text for programming in the “Teach Yourself CS” self taught computer science programme. Although the 1986 lecture series2 presented by the authors of the book (MIT professors Hal Abelson and Gerald Jay Sussman) is wonderful, Brian Harvey’s SICP lectures for the 61A course at Berkeley is recommended as more suitable for new students3.

  • The version of the Scheme programming language used in the SICP book is a subset of the Scheme programming language which has itself evolved since the book was written. Using Racket for SICP

  1. Abelson, H., Sussman, G.J. (GeraldSussman) and Sussman, J. 1996. Structure and Interpretation of Computer Programs. The MIT Press; 2nd edition (July 25, 1996). https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html↩︎

  2. https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures↩︎

  3. https://archive.org/details/ucberkeley-webcast-PL3E89002AA9B9879E?sort=titleSorter↩︎