I’ve been thinking a lot about the essay I published last weekend, “Addition, Multiplication, Integration”. In it, I laid out the basics, the vapours of a conceptual framework for building software faster (although the more I think about it, it might not just be about faster, but also about better). The gist of it was:
Building on the work of others with shared/open source code is like Addition.
Building software with others, collaboratively, is like Multiplication.
Building new tools to help us reason about and trivialize the tricksy problems, those beyond our current abilities to easily juggle in our heads, is like forms of Integration and Derivation.
This was the really important part of the essay. Software developers so often get caught up on the trivial, yet devilish bits of writing programs, where they’re either facing common mistakes and bugs, or they’re facing things they can’t easily think about (dealing with higher dimensions, visualizing large amounts of data, memory, large computations, etc.). By building new tools to help us reason about and truly trivialize these sorts of problems, it should have the effect of making these problems less of a roadblock, and so we can work faster.
I chose the Integration/Derivation metaphor because not only is that a useful way to arrange things, it also works as sort of a compactor, squishing a higher dimension into a lower one, and spreading the details around. Tricky problems which once occupied an entire plane sprawling in both directions can, once trivialized with tools, be squashed down to a single point. Once an immense vastness, now finite and graspable. This is kind of like Bret Victor’s Up and Down the Ladder of Abstraction
What I’ve been thinking more about since publishing it, and where the arithmetic and calculus metaphors break down, is that these “levels” aren’t really mutually exclusive but instead they feed and fuel each other. Using open source tools and working with others helps build new tools faster, the kinds of tools described in the third level, for solving trickier problems. Well, once those trickier problems are solved, then it can allow us to create more open source code, where those problems are solved. That helps us work better together, too. It’s a positive feedback loop felt throughout the system.
The question now is, where do we start?