Structure & Interpretation of Computer Programs | SICP's Wizardly Intro to Computer Science & Programming

| | TrackBacks (0)

"Computer Science is not a science," proclaims a professor at MIT, drawing an X over the word. He's introducing an introductory course on Programming called » 'Structure & Interpretation of Computer Programs' .. aka SICP. (Watch the video yourself » HERE.)

The Wizard Book » Structure & Interpretation of Computer Programs, by Abelson & Sussman

Less than a minute into the lecture and already I'm curious. "If it's not a science," I wonder, "then...??"

"It might be engineering," he continues, as if reading my mind, "Or it might be art. We'll actually see that computer so-called 'science' actually has a lot in common with magic."

I smile at this point, having gained insight into the graphic displayed on the book's cover, understanding why some refer to it as » The Wizard Book.

Then he draws an X over the word 'Computer' and says, "It's not really about computers either." (Okay, now I'm really interested.)

"The reason we think Computer Science is about computers," he continues, "is for the same reason the ancient Egyptians thought geometry was about surveying instruments ..

.. » because, when a particular field is just getting started, and you don't really understand it very well, it's easy to confuse what you're doing with the tools you use."

So-called Computer Science (he explains) is really about formalizing intuitions & knowledge about » Process (a word he writes on the board .. he's a lefty, btw). He then clarifies himself by saying, "How to *do* things."

••• today's entry continues here below •••

[ Note that Radified is a site very much about » how to do things .. cool things .. technical things. Some visitors come for the personal stuff, but most come for the technical aspects, especially the guides. So I'm naturally interested in what he has to say. ]

As an example of what he means by the term Process, he gives the mathematical definition of/for the term » "square-root" .. which happens to be an example of declarative knowledge: defining "what is" ..

.. but he explains that defining what a square-root is doesn't tell us anything about *how* we might go out and find one .. which would be an example of imperative knowledge, or "how to do something."

Returning to the word Process (on the board), he asks, "So, what's a process?"

"It's hard to say," he says, answering his own question, "You can think of it as a magical spirit .. that lives in the computer and does things. And the thing that directs a process is a pattern-of-rules called a » procedure. Procedures are like the 'spells' that control these magical spirits called processes."

"Sorcerers need a magical language," he continues, "to conjure their spirits. We're going to conjure our spirits in a magical language called LISP."

"LISP is easy to learn," he assures the class. "In fact, in just a few minutes, I can teach you all the rules that govern LISP. And this shouldn't surprise you .. just as you can teach someone all the rules of chess in a few minutes. But of course, it takes much longer to master those rules .. by understanding their implications, and learning how to exploit them .. to become a master chess-player."

I'm not going to document the whole course here (as that's already been done) .. but a few quotes stood out:

CS is about formalizing 'how-to' knowledge. The real problems in CS come when we try to build very large systems (programs). There are techniques for controlling the complexity of large systems. And CS, in a sense, is really about learning the techniques for controlling complexity.

Most interestingly he said (and something that really got me juiced):

In contrast to other disciplines, such as mechanical engineering, or electrical engineering, which deal with real components (and their associated physical limits), CS deals with idealized components .. such that there's not much difference between what I can build and what I can imagine. CS is therefore like an abstract form of engineering, where the only constraints are the limitations of the mind.

In my (admittedly nascent) study of programming, this is the concept I keep seeing & hearing repeatedly, and it's the thing that most entices me (drool-city) .. the idea that you can build something out of nothing .. and that 'that-something' is only limited by your imagination (or lack there-of). Very powerful concept. Almost seductive .. especially for the creative part of us.

In an attempt to convey this idea more poetically, the HtDP text quotes The Bard himself:

And as imagination bodies forth
The forms of things to unknown, and the poet's pen
Turns them to shapes, and gives to airy nothing
A local habitation and a name.

-- Shakespeare, A Midsummer Night's Dream

Around the web, you'll read comments from people saying things like » "You're not going to find something as concise and valuable as SICP. It doesn't exist and I don't think it can exist." And also comments like:

"LISP is worth learning for a different reason -- the profound enlightenment you receive when you finally "get it." It will make you a better programmer for the rest of your days, even if you never actually use LISP."

Jess from GrokCode lists SICP near the top of his Top 9½ Programming books (what he calls Hackers' classics). Many disagree with individual selections, but nobody disagrees that SICP belongs on the list. Perhaps the most recent appraisal comes from Eli, who studied the course from mid-2007 to mid-2008. He says:

A word on SICP and its exercises. Abelson and Sussman have created a masterpiece, a book initially written in the 1980s, that still hasn't lost one bit of relevance. Everything it contains must, must be learned and understood by any aspiring programmer.

His book review is » HERE, where he concludes by saying:

SICP is an amazing book. It is by far the best programming book I have ever laid my hands on, and I seriously doubt it will be surpassed any time soon. Reading SICP will enlighten you as a programmer, and make you a better one.

One final comment (my own) » I have not read SICP (yet) .. but you might imagine that a course taught at (arguably) the world's finest school of technology .. about a topic the professors describe as 'how to do things' (i.e. » Process) .. would lead the student to learn how to "do things" in an exceptional manner.

It's difficult to describe exactly what I mean (and why I feel this way) .. but comments from those who *have* read the book seem to confirm my intuitions (» that it's an exceptional book).

In other words, the course itself is a process (small 'p') about learning the craft of Process (capital 'P'). I'm making myself dizzy. =) Cuz it's sort of like thinking about our thoughts. Capturing what I'm trying to say is elusive .. like a dog trying to catch its tail. But I'll try.

Because these professors are experts in the field of Process (how-to knowledge), we might expect them to be able to use what they know to craft an exceptional course (which is itself a 'process' .. containing & presenting 'how-to' knowledge). It would not be unrealistic therefore, to expect this course to be crafted so well that you might call it 'magical' or 'wizardly'.

Related entry #1 » Best Language to Learn Introductory Computer Programming » Scheme | SICP & HtDP

Related entry #2 » HtDP's Introductory Programming Course & Book » How to Design Programs

Here's a thread developing in the Rad forums from someone (Magoo) working thru the online SICP course for the first time, and his impressions, as a newbie. It's titled » HtDP & SICP - compare & contrast.

For more along these lines, here's a Google search preconfigured for the query » sicp structure interpretation computer science programming book

« Previous Rad entry ||| NEXT Rad entry »

0 TrackBacks

Listed below are links to blogs that reference this entry: Structure & Interpretation of Computer Programs | SICP's Wizardly Intro to Computer Science & Programming.

TrackBack URL for this entry:

About this Entry

This page contains a single entry by Rad published on January 28, 2009 1:44 PM.

New Perl Script Sets chmod Permissions for YaBB Forum Upgrades was the previous entry in this blog.

HtDP's Introductory Programming Course & Book » How to Design Programs is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.