Testing traditional software strives for an ideal of exact determinacy: If a test fails, there is a bug and the developers must investigate; and if a test passes, the bugs it is testing for are not present, so development can proceed without worrying about... Read more
Probabilistic Programming Habits
Programming intentionally random programs presents its own special software engineering considerations, in addition to the usual ones. I have been surprisingly slow to realize this, but two years in to working on a probabilistic programming platform I can recommend some specific habits around software... Read more
On Intentionally Random Programs
For a little over two years, I have been professionally dealing with programs whose behavior is intentionally random. Why would one even have intentionally random programs? The first kind of “random” program I encountered was the randomized algorithm, but I do not consider these... Read more
On Good Software
Good software is software that admits a simple mental model. For all that I have observed and participated in plenty of discussions about one or another piece of software as to whether it is or is not good, I am surprised to say that... Read more
Best Effort vs Strictly Safe
Possibly the greatest tension in the design of programming languages occurs when encountering a user program that doesn’t quite make sense. The two coherent schools of thought on the subject are The platform should make its best effort to continue the computation—choose reasonable rules... Read more
How to Compute with a Probability Distribution
What makes a good representation for computing with probability distributions? The two canonical options are samplers and probability density functions. Both are valuable; and the relationship between them turns out to hide two fruitful variations on the idea of a sampler, that I will... Read more
Social Function of Module Systems
Observing the state of modern software practice, one might notice that a rough tower of different abstraction mechanisms has emerged. One might then wonder: why do we need so many concepts, if their fundamental job is to give a name to some software, and... Read more
Stochasticity is a Quantifier
In English, quantifiers are words like “all”, “one”, or “some” that indicate how broadly true the quantified clause is. Formal logic has adopted symbols for such words, namely “all”, “exactly one”, and “some” (in the sense of “at least one”). Probability theory offers us... Read more
Hard Work and Success
This essay is inspired by the assertion that hard work is more important for success than being smart. There are, of course, many meta-objections one could have against such an assertion, especially in the context in which I heard it. For example, one could... Read more
Cleverness of Compilers 2: How
The Cleverness of Compilers essay described the name of the hyperaggressive compilation game in broad, philosophical strokes. Here, I would like to walk through the Mandelbrot example in some detail, so that the interested reader may see one particular way to actually accomplish that... Read more