Building Languages to Solve Problems
When a problem is complex enough, the solution is often to build a language for that problem. SICP's most powerful idea.
Posts influenced by Structure and Interpretation of Computer Programs—on abstraction, composition, and computation as a medium for expressing ideas
Structure and Interpretation of Computer Programs by Abelson and Sussman isn’t really about Scheme or even programming—it’s about computation as a medium for expressing ideas. The way they build up from simple primitives to interpreters to register machines fundamentally shaped how I think about abstraction and the layering of meaning.
These posts carry that influence forward: the closure property (combining things yields the same kind of thing), abstraction barriers, procedures as first-class citizens, and the deep insight that good abstractions come from understanding the algebraic structure of what you’re computing.
The book: Full text (free) | MIT lectures
A pattern matching and term rewriting library for Python. Define rewrite rules with intuitive DSL syntax and apply them to transform symbolic expressions.
Explore project →When a problem is complex enough, the solution is often to build a language for that problem. SICP's most powerful idea.
27 image commands, one constraint: read JSON, write JSON. The closure property as a generative design principle.
How iterators reduce the N×M algorithm-container problem to N+M by interposing an abstraction layer, following Stepanov's generic programming approach.
An R package for treating probability distributions as first-class algebraic objects that compose through standard operations.
A modern C++20 library for compositional online data reductions with numerically stable algorithms and algebraic composition.
A production-ready implementation of relational algebra for JSONL data with full support for nested structures. jsonl-algebra brings dotsuite's dotrelate concepts to production with streaming operations, schema inference, and composable pipelines.
An R package where solvers are first-class functions that compose through chaining, racing, and restarts.
Introducing rerum - a Python library for symbolic computation with a readable DSL, powerful pattern matching, and a security-conscious architecture that separates rules from computation.