I have been fascinated with abstraction for as long as I can remember. The disciplines I am drawn to instinctively — mathematics, physics, philosophy, programming, literature, design, cognition, religion; to name a few — are all disciplines that truck in abstractions.
Good abstractions make life easier for all of us and greatly enhance human culture. Writing is a good example: we abstract away particulars such as handwriting and font size or physical location and label them under one heading: “this is so and so’s article.” There’s a sense in which all copies of Shakespeare’s Hamlet are the same or close enough to being so.
As you can see, abstraction is tied to identity — if I were to think of one thing that defines the process of abstraction, it’s the ability to categorize two different things as the same. Some abstractions are natural, such as personal identity: after all, without abstraction, how would you experience yourself as the same person over a twenty year period while your hair is falling out and your teeth are decaying? Other abstractions are human created, such as desktop UIs that help you copy and paste files.
Desktop user interfaces tell us that abstraction isn’t opposed to concreteness; in fact, some of the best abstractions make entities tangible to us, just as the mouse and the keyboard makes files on a computer available to us. Tangible abstractions are all around us; words on a screen being the best example. Tangibility is one of two principles I consider paramount while designing good abstractions; the other is representation. The principles can be summarized in two short slogans:
No abstraction without representation.
Make things tangible.
When we represent something in language, art or law, we make it explicit; we give it rights and responsibilities; in a nutshell, we take it seriously. That’s why representative democracy for all it’s faults is better than the people’s republics. Sovereignty — another abstraction — has no meaning if it isn’t translated into institutions such as parliaments that represent that abstraction. Abstraction without representation is toothless. For example, I cringe whenever someone talks about balancing the needs of development and the environment. Economic growth is very well represented. Corporations are in the business of turning abstract theories of growth into real profits. The environment isn’t represented at all. While there are laws, implementation is poor and no one who speaks for nature. Until we create institutions that represent the non-human world, we can’t talk about balancing environmental needs with economic needs.
Representations are even better when they come with a tangible interface, an API in the computer programming sense of that term. The lexicon is an interesting abstraction, but dictionaries make the lexicon tangible. You might be surprised to know that standardized spellings are very recent; as late as the eighteenth century, people would spell a word in different ways in one article or book. The lexicon represents words. Dictionaries make the lexicon tangible. Abstractions such as computer mice and keyboards make computing tangible. Voting makes democracy tangible.
Tangibility works as a great UI for abstraction when the interface behaves the way you expect it to do so, even as it invites you into a space that’s different from anything you have experienced before. For example, Leibniz’s dy/dx notation makes calculus tangible, because it helps you manipulate infinitesimals the way you manipulate regular numbers even as it takes us far away from the world of bare multiplication and division.
These two principles aren’t a historical curiosity; as software leaves the world of the screen and enters the world of gestural interfaces and physical objects, we will need an entirely new framework for understanding abstractions, including new representations and new interfaces. The dominant abstractions of the last two thousand years are all 2D abstractions, i.e., abstractions made tangible on paper and screen. As software and hardware intermingle — itself a new abstraction — we are faced with the task of building 3D abstractions. The world will assimilate software as software eats the world.