Code as a Medium for Human Expression

▶ Watch (08:06)

Most programmers say they’re a musician at parties. That’s not a joke, it’s an indictment. Writing was once confined to legal documents and religious texts; now it carries poems, shopping lists, letters to friends. Code is still in that earlier phase.

“So why don’t we do the same for code?” — Sam Aaron

Teaching sports at school doesn’t manufacture professional athletes. Most students never go pro, but they keep playing. Code education oriented entirely toward business employment misses the same point.

Simple Interfaces Over Complex Systems

▶ Watch (12:24)

Sonic Pi starts with two commands: play and sleep. With those two, a six-year-old can write any melody ever heard. Aaron’s niece wrote a 100-line composition at age six and announced she wasn’t finished. The trick isn’t simplicity for its own sake. Behind play 60, sleep 0.5 sits concurrent scheduling, SuperCollider synthesis, and Haskell-verified timing semantics. A piano has the same property: one lesson to play all the notes, decades to reach Jimi Hendrix. Programming is just younger than the piano by several hundred years.

Teaching Concurrency Without Naming It

▶ Watch (23:58)

A student at Cambridge asked why she couldn’t play drums and bass at the same time. The answer was threads, not on the UK computer science curriculum. Aaron told her she’d have to wait until she was 18 and take a university degree. She immediately switched off. The following week he shipped live loops: syntactically a loop, internally threaded. The teacher taught a repeating construct; the student’s two-loop instinct just worked.

“Loops are like black holes for code.” — Sam Aaron

The Sonic Pi live loop MIDI demo with Moog synthesizer (31:53) shows the same live-update principle applied to a hardware Moog.

Why Sonic Pi Needed a Successor

▶ Watch (34:44)

Thirteen years of Sonic Pi produced a large Ruby codebase with a custom threading model, reverb scoping via closures, and a tree of threads traversed depth-first to kill selectively. Erlang’s OTP does all of this correctly; he’d built a worse version. Three problems blocked the next phase: schools managed by external councils cannot install software, sharing code like Scratch requires a sandbox Ruby cannot provide, and distributed jamming needs web deployment. Aaron built an experimental system called Bleep on Phoenix LiveView with a sandboxed Lure interpreter to test whether the BEAM could solve all three.

Tau5: Elixir, Lure, and AI-Assisted Live Coding

▶ Watch (48:22)

Tau5 runs on the BEAM in Elixir with a sandboxed Lure interpreter. Any execution taking more than 30 milliseconds is killed. Any string that keeps growing hits a memory cap and stops. Aaron demonstrated both attacks on himself on stage: CPU denial-of-service, then memory denial-of-service, both blocked. For development, he wired in Phoenix Live Dashboard for BEAM process introspection, a Chromium DevTools bridge, and Spectra, an aggregating MCP server that exposes all of it to an AI agent. Claude updates the Hydra sketch inside Tau5 (56:33): one prompt, Claude rewrites the Hydra GLSL shader, a green circle appears.

Notable Quotes

So why don’t we do the same for code? Sam Aaron · ▶ 9:57

Loops are like black holes for code. Sam Aaron · ▶ 24:05

Build the future of tomorrow. Sam Aaron · ▶ 1:00:09

Key Takeaways

  • Programming confined to business use is a social failure, not a technical constraint, and live coding challenges that assumption publicly.
  • Simple and expressive are not opposites; Sonic Pi proves that deep design can make concurrent audio code accessible to six-year-olds.
  • Tau5 solves Sonic Pi’s security and web limitations by running sandboxed Lure on the BEAM with MCP-connected AI tooling.