Last fall, when I was still mulling over this programming thing, I spotted this book in Josh’s collection and decided it would make for some light holiday reading:
The book is Structure and Interpretation of Computer Programs, by Harold Abelson and Gerald Jay Sussman with Julie Sussman, otherwise known as SICP. From the book jacket:
“This is a long book, which takes time and effort to digest, but it is never dull and it reinforces my belief that one of the main attractions of the academic study of computing is that it is fun.” – David Barron, Prof. of Computer Studies, University of Southampton
Time + effort + digestion = fun? Sold!
The book borrows a programming language called Lisp (LISt Processing), which has a reputation as a “hopelessly inefficient language” we are told in chapter one (Sold and sold again!). It is used mostly in academia and rarely (never?) in practical applications. Still, “[Lisp] possesses unique features that make it an excellent medium for studying important programming constructs and data structures and for relating them to the linguistic features that support them.” And also, “Lisp is great fun.”
I’m reminded of my senior year poetry Capstone course wherein our instructor required us to write in formal verse for 80% of the class before we were allowed to venture back to free verse at the end. Why? Something something learn to follow the rules before you break them.
And I never wrote poetry again.
(No, that didn’t happen, but I wrote a lot of bad poetry that year. Another hopelessly inefficient language.)
So it turns out that this text of convenience (oh hello, book already here on my shelf) is something of a classic in the programming world, known as “the wizard book” (!!). MIT has released the text online and there’s a whole associated webpage worth of resources. What’s more, there’s an open courseware class and archive with video lectures* by the book’s authors, and a wiki for solutions to the exercises.
*The videos are from 1986 and they are outstanding. Witness:
In sum, if you’re looking to get into programming and this book happens to be sitting on your shelf, I say go for it! And if it’s not on your shelf, well then it’s easy to study on the web. If you hate wizards and poetry, this book is probably not for you, also what kind of monster are you anyway. I’m reading it in combination with an online class in Python, and my hope is that the two will complement each other for a good mix of theory and practical application.
Finally, I’ll leave you with this quote from the preface, which makes me think I have found my people:
We want to establish the idea that a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute.
Hooray for readers!