Stuart Sierra, TweetCognitect
Presentation: TweetThe Joys and Perils of Interactive Development
The ability to interact with and modify a running program is one of the great strengths of modern programming languages. But this ability comes at a cost: modifying a running program is very different from recompiling a static program. To support runtime modification, we have to make trade-offs at every step of a program's design: local versus shared state, late- versus early-binding, encapsulation versus visibility. Despite the rapid evolution of development tooling, our programs are still fundamentally expressed as text files on disk. Rather than dream about a theoretical future free of text files, let's see how we can work with that medium, incrementally adding capabilities by building development aids into our programs. "Non-functional" requirements such as monitoring, debugging, and deployment should be integrated into our designs. This talk will describe various ways to tackle this problem in Clojure. Prior experience with Clojure is not required, although some familiarity with its syntax may be helpful in understanding the examples.