# Bret Victor - The Ladder of Abstraction (Highlights)

## Metadata
**Review**:: [readwise.io](https://readwise.io/bookreview/56840635)
**Source**:: #from/readwise #from/reader
**Zettel**:: #zettel/fleeting
**Status**:: #x
**Authors**:: [[Bret Victor]]
**Full Title**:: The Ladder of Abstraction
**Category**:: #articles #readwise/articles
**Category Icon**:: 📰
**URL**:: [worrydream.com](https://worrydream.com/LadderOfAbstraction/)
**Host**:: [[worrydream.com]]
**Highlighted**:: [[2025-12-14]]
**Created**:: [[2025-12-20]]
## Highlights
- We have a set of interactive visual **tools** that will continue to serve us throughout the design process. When we change the algorithm, we can immediately see the effects of that change. To design quickly and confidently, we need to be able to try out ideas and verify hypotheses *as fast as we think of them*. ([View Highlight](https://read.readwise.io/read/01kcd4xdnw5mp9wd85r2yx56nh)) ^966416735
Starting from a simple solution gives us the tool set to explore other solutions.
- Both symbolic and visual abstractions can do so. But the human brain is fundamentally a **pattern-matching machine**, easily outperforming any machine we can build — *for certain kinds of patterns*. With visual patterns, we win hands-down. With logical inferences, we're slow and clumsy. ([View Highlight](https://read.readwise.io/read/01kcd5fs1ayhyf7s982jk71d6f)) ^966417156
- The most exciting engineering challenges lie on the **boundary of theory and the unknown**. Not so unknown that they're hopeless, but not enough theory to predict the results of our decisions. ([View Highlight](https://read.readwise.io/read/01kcd35r3784j28xcz9y9s0rsr)) ^966412205
- Likewise, the most powerful way to gain insight into a system is by *moving between levels of abstraction*. ([View Highlight](https://read.readwise.io/read/01kcd37fx2nfdf29gdyek0prq4)) ^966412249
- However, real time is also quite limiting. Imagine a film editor who has to watch the entire film from the beginning with every edit, and cannot even pause or rewind. That would be absurd. Yet, most of our interactive systems are designed in this fashion. ([View Highlight](https://read.readwise.io/read/01kcd3berdpm0pcp0ztwvhpke0)) ^966412357
- This picture represents the system for *all time*, not *one particular time*. We say that we have **abstracted over time**. ([View Highlight](https://read.readwise.io/read/01kcd3m51vynckc24c7zqkkx0e)) ^966412721
- By abstracting over a variable, we've taken our first step up the ladder of abstraction. ([View Highlight](https://read.readwise.io/read/01kcd3kxdtkyr6q3errn12shss)) ^966412718
- This is a general and powerful technique. Every point on a visual abstraction typically corresponds to a particular concrete state. Pointing at the abstraction to step down to a concrete representation lets us quickly explore regions of interest. ([View Highlight](https://read.readwise.io/read/01kcd3q1yb6j15w6j08m0663hj)) ^966412844
- As we climb higher on the ladder of abstraction, it will become harder to imagine the concrete steps beneath, and more critical that our abstractions provide a way to interactively step down to a more concrete representation. ([View Highlight](https://read.readwise.io/read/01kcd3s7q026tv3wm1vjrk0qrp)) ^966412931
- The purpose of abstraction is to bring out **high-level patterns**. Try to defocus, and tune out the low-level clutter of individual trajectories. ([View Highlight](https://read.readwise.io/read/01kcd3wzhedc2a5cc479qtbx7c)) ^966413106
- This plots the *time to completion* (number of steps the car takes to reach the end of the road) versus the turning rate. Here, we have chosen a **metric** — a number that summarizes the behavior of the system in some interesting way. ([View Highlight](https://read.readwise.io/read/01kcd3z9zr3rp65hh46et8h9dk)) ^966413191
- We stepped up a level of abstraction to *see a high-level pattern*, and then stepped down to *discover the explanation* for that pattern. ([View Highlight](https://read.readwise.io/read/01kcd447w21s7bxw82d0b8r4eb)) ^966413568
- We intentionally started with the absolutely simplest possible algorithm. By thoroughly exploring it, we now understand *why* and *how* it's terrible. ([View Highlight](https://read.readwise.io/read/01kcd4vnba04nxndz522t0nj9w)) ^966416582
- Real-world systems may be more complex, but they all share the same general anatomy: an independent variable (such as time), a structure (such as an algorithm), and a dataset (such as an environment). ([View Highlight](https://read.readwise.io/read/01kcd5144jm6pzcm5yq6vem06z)) ^966416812
- Value changes lend themselves more readily to interactive control and abstraction. But structural changes usually have more impact, and it's important to consider how they can be explored and abstracted over. ([View Highlight](https://read.readwise.io/read/01kcd53s4ah20ak7s5077e4x2d)) ^966416864
- Designing a system requires designing a model for the input data. This can be as much art, and as much challenge, as designing the structure itself. ([View Highlight](https://read.readwise.io/read/01kcd54s4ynrd5j7k86jmsdrkj)) ^966416889
- We **step up** to an abstraction by devising a representation that depicts the system across all values of a parameter. ([View Highlight](https://read.readwise.io/read/01kcd57cr9xgaqsyr1xktgxb4k)) ^966416942
- We **step down** from the abstraction to a more concrete representation, by interactively selecting one particular value for the abstracted parameter. ([View Highlight](https://read.readwise.io/read/01kcd573es3z98qgwy7n4d8tn1)) ^966416930
- We abstract over time by turning the time variable into an argument. This function will return a point for any given time — this defines a trajectory. ([View Highlight](https://read.readwise.io/read/01kcd5n7tqth4r353v6t6992ae)) ^966417341
Or thinking of assinging a set to a variable to abstract it out.
- "Stepping down" from an abstraction corresponds to *partial application*. By specializing the previous function to a particular turning angle (2°), it is now just a function of time — a trajectory. ([View Highlight](https://read.readwise.io/read/01kcd5ny2f6y4gbbqq0ry75ytr)) ^966417369