Video summary

In Context - Rich Hickey (Clojure/Conj 2026)

Main summary

Key takeaways

Technology

Summary

Rich Hickey argues that software correctness has two dimensions: consistency within a program and agreement with facts in the outside world. Static types and other static techniques can be useful, particularly for mechanisms a program invents and controls. But information-oriented applications—systems that process events, use databases, call external services, and evolve across teams—must handle information whose shape and requirements can change.

He describes Clojure’s information-oriented approach: use named, flexible data structures such as maps, and avoid turning every change in information into a change to a rigid mechanism or schema. This can make systems easier to adapt, inspect, and divide into independently changing parts. The tradeoffs include potentially lower performance than static approaches and less explicit documentation of what functions expect. The talk focuses on new Clojure destructuring features intended to make those expectations clearer without requiring closed, brittle schemas.

Destructuring and key requirements

The talk walks through map destructuring, including nested values and defaults. In existing destructuring, missing keys are generally optional: a missing binding becomes nil, or a default can be supplied with :or.

The new features add ways to express required keys and document keys that are relevant to a particular context:

  • Required-key directives (:keys!, :strs!, and :syms!) indicate that specified keys must be present. By default, a missing required key throws an exception. Required keys cannot also be given defaults through :or.
  • Explicit keys without bindings: Binding directives can list key names after &. These keys can be checked or documented without creating local variables for them.
  • Missing-key handling: A :missing directive can collect absent required keys into a nested map-shaped result instead of throwing. This lets a program handle missing external or database data as normal control flow—for example, by logging, prompting a user, or trying another source. Bindings for absent required keys are nil.

Selection, forwarding, and programmable selectors

Hickey emphasizes that required keys should not mean “reject everything I didn’t name.” Flexible systems often need to process the information they understand while preserving and forwarding the rest.

The talk introduces directives for working with the structure implied by a destructuring form:

  • Everything returns the input structure, with applicable defaults filled in.
  • Select returns only the structure named by the destructuring form, also applying defaults.
  • Excess returns input keys outside that selection. This makes it possible to transform known fields while passing unknown fields onward, rather than discarding or rejecting them.
  • Selection and excess can be recombined. Hickey also mentions deep merging as a way to restore transformed selections together with excess data.

A selector macro takes a destructuring form and produces a function that applies the same selection-related logic to maps. This makes the functionality usable beyond local variable binding—for example, to normalize data, check for missing keys, or extract excess information.

Key takeaway

The features aim to provide context-specific documentation and enforcement while keeping data structures open to change. Hickey’s broader recommendation is to design for information flow: inspect and select what a component needs, preserve what it does not understand, and avoid treating unfamiliar data as automatically invalid.

Reviews, guides, and demonstrations

  • Review: None; this is a technical keynote, not a product review.
  • Guide/tutorial element: The talk includes a walkthrough of map destructuring and examples of the new directives and selector behavior.

Main speaker and source

  • Rich Hickey — speaker and creator of Clojure.
  • ClojureTV — video source; the talk is presented at Clojure/Conj.

Rate this summary

Your feedback will help improve summaries.

Improve this summary

Reprocess with a stronger model when the summary feels incomplete or inaccurate.

Pro

Translate summary in another language

Pro

Ask questions to this video

Chat for follow-up questions, clarifications, and source-backed answers.

Coming soon

Share this summary

Original video