Functional Reproducibility
robsteranium.github.io/functional-reproducibility
robin@infonomics.ltd.uk
NASA (2011) “Benevolent Monster” Solar Flare
Schreinmer, R.M. (1912) Deutsches Museum, München
© The Board of Trustees of the Science Museum released under a CC BY-NC-SA 4.0 license at collection.sciencemuseumgroup.org.uk
Increasing Disorder CC BY Htkym
Maxwell’s Demon CC BY Htkym
Photo by Dan Meyers on Unsplash
Advanced Deep Extragalactic Survey - NASA, ESA, CSA
Brant Robertson (UC Santa Cruz), Ben Johnson (CfA), Sandro Tacchella (Cambridge), Marcia Rieke (University of Arizona), Daniel Eisenstein (CfA)
\[f(x) = \frac{1}{\sigma \sqrt{2\pi} } e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2}\]


Reading from a database:
Drawing a sample at random:
Writing to a filesystem:
Count is 0
Sometime later…
[1] "Count is 0"
Sometime later…
[1] "heads" "tails" "tails" "heads" "heads"
Sometime later…
Pseudo-randomness from a Mersenne Twister
[1] "tails" "tails" "tails" "tails" "heads"
Sometime later…
Input is a side-effect
Output is a side-effect
Instead of relying on global state:
We can make dependencies explicit:
Command-line arguments
Environment variables
Configuration data
It is impossible to step in the same river twice
Heraclitus c.a. 500 BC, possibly apocryphal
Builds should be:
Functional Reproducibility
robsteranium.github.io/functional-reproducibility
robin@infonomics.ltd.uk