The Shape of Data (2022)
15 hours ago
- Consistent data notation across code, logs, debug, and UIs reduces mental load and improves productivity.
- Clojure's edn syntax provides a roundtrip property (read-print) that makes textual representation a direct mental model for data.
- Separating read from eval (like JSON.parse vs eval) ensures safety and enables language-independent data exchange.
- Using tags (e.g., #inst) allows extensible types without sacrificing self-describing notation.
- Tree-shaped data models with stable IDs for graph-like structures avoid pointer issues and aid portability.
- Layering notations (e.g., text, tags, types) balances readability and expressiveness, as seen in Chrome's HTML inspector.
- Reifying changes as data (paths + operations) enables undo logs, collaboration, and diffs.
- Code as data (homoiconicity) and codebase as data (content-addressed storage) simplify analysis and tooling.
- Execution traces as data could enable powerful debugging, though challenging in unrestricted languages.
- Co-design of data model and notation is crucial to avoid later limitations.