While programmers love talking about the virtues of minimalism and simplicity, each of us depends on a mountain of abstraction and complexity: build systems, package managers, deployment infrastructure, etc. But much like the suburbanite dreaming of a tiny house in the woods, we find ourselves wishing we could give up all the tools and best practices and work "close to the metal." Could we live without garbage collection? Built-in data structures? Variable names?
These are the principles of Forth, a radically minimalist programming language. This talk explores my experiences in the Forth wilderness: how Forth embodies a computational "rugged individualism", and the peculiar freedom that comes from working with so little abstraction. We'll also discuss what drives people away from Forth, and how I have tried to integrate The Forth Way into my work when I returned to the creature comforts of high-level programming languages.
This is a programming language overview talk, but it examines Forth from a a historic and philosophical perspective as much as a technical one. For example, I explain how Forth's stacks and postfix syntax work, but I also discuss why Chuck Moore chose this syntax: the simplicity of its implementation, the history of the proto-DSLs he was writing that evolved into Forth, and its parallels with the accidental invention of s-expressions in Lisp.
This talk also leans pretty heavily on metaphors around living in tiny houses: the puzzle-like qualities of making words flow together in Forth and how that relates to the organization of small workspaces; the radical change in what one believes to be mandatory for living; why it works more readily for individuals than groups. Likewise, the concluding act on adapting Forth's minimalist philosophy for (scare-quotes) "the real world" borrows liberally from Marie Kondo, e.g. “not looking for things to throw out, but for things to keep.”
- Frame narrative: apartment hunting in NYC
- too much stuff
- fascinated by Tiny House Hunters
- Minimalism in programming
- tension viz. conflicting definitions
- too much magic vs too much boilerplate
- developer experience vs robustness
- tension viz. conflicting definitions
- Forth
- stack based, very little syntax
- comparison with lisp
- mix of high- and low-level features
- manual memory management
- flexible syntax for domain-specific languages
- minimalist ethos
- intended to run without a file system/OS
- fixation on freedom — “to change the language, the compiler, the OS or even the hardware design”
- freedom to change the problem
- stack based, very little syntax
- Parallels between Forth & Tiny Houses
- puzzle of making everything fit together
- efficient because everything can be bespoke
- requires a radical change in what you think is “mandatory”
- works for individuals, not groups
- Reconciling minimalism with teamwork
- Marie Kondo’s perspective: “not looking for things to throw out, but for things to keep”
- how city minimalism is enabled by massive infrastructure
- making it easy to prototype ideas and throw away the ones that don’t work