← Josh Pullen's Blog

The program is the output.

Spreadsheets are everywhere. They are the go-to tool for people who need to do powerful work on computers but don’t know how to code.

Spreadsheets are both powerful and approachable. These qualities usually act in opposition, but spreadsheets are able to span both worlds. Beginning as a simple table, a spreadsheet is easily approachable, but there is great power lurking just beneath the surface.

These two qualities make the spreadsheet one of the most productive and widely-used tools in computing. How is this dual approachability and power achieved?

When creating a spreadsheet, the program is the output.

In almost all other forms of software, there is a clear distinction creating and consuming programs. Coding an app and using it are separate activities, performed by different people. Programmers know best, and users are told to accept what they are given.

Spreadsheets take a different approach. To use a computer is to command it, and the most powerful command is code. Spreadsheets openly encourage users to program for themselves—to work with the computer, not against it.

Unlike in most traditional programming languages, spreadsheets make no distinction between the program and its output. The code and the output exist in the same space, and this dramatically lowers the barrier to entry. By intermixing program and output, spreadsheets lower the barrier to entry of coding, and make programming a natural part of using a computer.

In particular, starting with the output allows for a natural induction-based approach to building programs. A traditional programming experience begins with code and ends with output. Spreadsheets flip this process around. Users begin by manually specifying the output they desire. A novice spreadsheet user might enter data and perform calculations manually. Only when the desired output is entirely obvious and its manual generation too strenuous, a user writes the program necessary to automate the computation. By beginning with example outputs and only then writing the program, there is never any confusion about what the code needs to do or how it should work. This reversed process makes the act of programming a computer vastly more approachable.

This kind of programming-oriented interface is rare, but not entirely unique. Minecraft, for instance, allows players to program within their own worlds using redstone. The lights, wires, switches, and other components exist within the world being programmed. The code and the output are, again, unified. As with spreadsheets, this paradigm led Minecraft to massive success. Minecraft is the #1 most-purchased video game of all time, despite being incredibly buggy and artistically primitive. Its willingness to make the user a programmer in their own world is the killer feature that transforms Minecraft from a game to an art form.

One up-and-comer in the field of programmable products is Notion. It is a note-taking tool that allows notes to be sorted, filtered, and creatively displayed based on user-defined properties. The tool isn’t as powerful as a spreadsheet, but it’s far more customizable than most note-taking apps, and again, the programming and the content both exist in a unified interface. Notion, too, has seen incredible success, with a $2 billion valuation despite continually turning down investors.

Spreadsheets, Minecraft, and Notion are all unparalleled success stories, and they share one feature in common: to use the tool is to program it. These tools lower the barrier to entry to programming by making programming a natural part of computer usage.

Despite existing for a long time, this area of software is woefully underexplored. There is a vast landscape of programmable formats yet to be discovered. These new tools will empower users to do more, and experience great success as a result. We haven’t yet seen all that computers can do; that power will only be unlocked with users at the wheel.