The future of programming

Bret Victor’s web site is a treasure trove. Since I chanced upon it a few weeks ago I’ve been savoring my way through his talks and essays.

My favorite so far is The Future of Programming. Victor explores four key ideas that drove innovation in programming languages in the 1960s and early 1970s.

  1. Users directly manipulating data, as in Smalltalk and later Self, rather than indirectly manipulating data through code
  2. Specifying goals and constraints (declarative programming) rather than procedures (imperative programming)
  3. Spatial representations of information instead of text representations
  4. Concurrent programming as a fundamentally new paradigm (like the Connection Machine) rather than as an extension of sequential programming

The history of programming languages is one of my favorite subjects, and I enjoyed the allusions and references. The conceit of the talk is also engaging – the IBM uniform, the overhead projector, considering “the future” from the vantage point of 1973. But the presentation goes well beyond that. Victor’s message is that as Computer Science matured as a discipline in the 1960s and 1970s, researchers stopped focusing on the long-term potential of technology and started chasing a local maximum. The short-term incentives of industry, faster publishing cycles in academia, and other factors have waylaid people into neglecting grand visions and possibilities. In my own area of Computer Science, systems research, Rob Pike sounded the alarm 20 years ago, declaring that “Systems Software Research is Irrelevant”.

The local maximum is so entrenched now that it won’t be easy to move beyond, but I believe that understanding the history of Computer Science and the IT industry must be a prerequisite to doing that. We should be using history to teach Computer Science, rather than treating the history of the discipline as a mere intellectual curiosity.