poorly understood ideas

gleaned from Eugene Wallingford excellent notes from OOPSLA’05, OBJECT-ORIENTED PROGRAMMING, SYSTEMS, LANGUAGES and APPLICATIONS.

Gerald Sussman, co-author of SICP, the seminal programming text, opened his talk with the assertion that programming is, at its foundation, a linguistic phenomenon. It is a way in which we express ourselves. As a result, computer programs can be both prose and poetry.

In programs, we can express different kinds of information

  • knowledge of world as we know it
  • models of possible worlds
  • structures of beauty
  • emotional content

The practical value that we express in programs sometimes leads to the construction of intellectual ideas, which ultimately makes us all smarter.

This is where Sussman got to the key insight of his talk, the insight that has underlay much of his intellectual contribution to our world:

There are some things we could not express until we invented programming.

Here Sussman distinguished two kinds of knowledge about the world, declarative knowledge and imperative knowledge. Imperative knowledge is difficult to express clearly in an ambiguous language, which all natural languages are. A programming language lets us express such knowledge in a fundamentally new way. In particular, computer programs improve our ability to teach students about procedural knowledge. Most every computer science student has had the experience of getting some tough idea only after successfully programming it.