The Governing Dynamics of Software - ITP Class on Language Design
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

The Governing Dynamics of Software

You won't reach the moon by improving the ladder

— Brett Victor

To be pragmatic, people build new tools on top of whatever happens to be available at the moment. Processing was built on Java, openFrameworks and Arduino were build on C++ and it all works well enough.

But to be truly expressive with code, we have to discard pragmatism and think very seriously about the tools we use, and the tools our tools are built on. The perspective of this course is that in order for technology to make serious, non-incremental progress, we need more artists thinking about the governing dynamics of it all. We cannot get to where we want by taking what we have for granted and layering on top of it.

This course will guide students through the art and science of designing a programming language. This will include writing parsers, compilers and interpreters as well as discussing and exploring different ways of structuring thought on a machine. Students will also explore the history of code, with particular focus on languages no longer in common use that presented radically different ways of thinking about code. These languages will be discussed, used, and dissected as a source of inspiration and study for the new languages that will be developed in the class.


  1. Introduction / Definition of code
  2. Introduction / Brief history of programming languages
  3. Introduction / How text becomes behavior
  4. Syntax / Introduction to parsing + ALGOL syntax family
  5. Syntax / PEGs + SmallTalk syntax family
  6. Syntax / PEGs + FORTH syntax family
  7. Syntax / PEGs + LISP syntax family
  8. Semantics / Syntax trees + Imparative paradigm
  9. Semantics / Compiling + Object Oriented paradigm
  10. Semantics / Compiling + Functional paradigm
  11. Semantics / Interpreting + Logic paradigm
  12. Final Projects
  13. Final Projects
  14. Final Projects


  1. Lua
  2. Clojure
  3. PostScript
  4. C#
  5. Haskell
  6. Self
  7. Io
  8. CoffeeScript
  9. Piet
  10. Prolog
  11. Brainfuck
  12. Max/MSP