© 2019 Strange Loop
Why do some tools continue to reward mastery after years of use, while others seem to become clunkier as we learn them? One answer is that rewarding tools often display reproducibility: given the same inputs, the tool always does the same thing. Reproducibility lets us build clear mental models of the tool's behavior. We learn to "think in Git", for example, rather than simply guessing at a command or function call and puzzling over the results.
Git, React, and Bundler all rely deeply on reproducibility. As three quick examples: Git will produce the same hash for a file committed on two different machines; React relies on component functions re-rendering the same virtual DOM when called multiple times; and Bundler's entire purpose is to reliably reproduce package lists and installed package sets on different machines.
In this talk, we examine these tools' reproducibility in detail. We then reach two conclusions: first, that their success is a large-scale version of the same advantage offered by pure (that is, reproducible) functions; second, that we can use reproducibility as a guide for building new tools.
Gary Bernhardt is a creator and destroyer of software compelled to understand both sides of heated software debates: Vim and Emacs; Python and Ruby; Git and Mercurial. He runs Destroy All Software, which publishes advanced screencasts for serious developers covering Unix, OO design, TDD, and dynamic languages.