This article was started from the notes of a re-reading of Learnable Programming by Bret Victor.
Here’s the framing. Let’s start from first principles.
human <-> interface <-> computer.
Humans want to make things with comptuers. In order to make something you need to have a model of how it works in your head. This model needs to take into account technological realities:
However, it doesn’t neccesarily mean that you need to understand these realities deeply. Simply that your model helps you account for them. That is, we cannot abstract beyond the capibilities of computers.
On the one extreme to the left, you could make an interface building upon models that people already have in their heads. This is why Microsoft Word is so successful. The cursor is much like the tip of a pencil and the page is much like a physical page. The mapping is clear.
On the other extreme to the right, you could simply have the human learn how the computer works, starting from electrons up through NAND and NOR gates, to proccessors, binary, Assembly, and C. This epitomizes Bret’s Alan Perlis quote, “To understand a program, you must become both the machine and the program.”
In the middle, you have powerful models for thinking, which take technological realities into account.
Microsoft Excel. Unless you’re coming from an accounting background, the grid model is new to you. (Side note: it wasn’t until I learned SQL that I learned that properties are at the top and rows are entities. This array of dictionaries metaphor is quite powerful. I imagine people who grow up with Airtable or Fieldbook will learn those powerful ideas seamlessly.) There are two fascinating metaphors in Excel that are incredibly easy to pick up:
$operator. It’s a great example of doing the commong thing automatically and letting you ask for a special case when you need it.