I greatly enjoyed this post. Abstractions are so important and I liked how reflective this post is.
In the context of the post I ask a question - aren’t all abstractions singular? And what does a faceted abstraction look like? Maybe I’m misunderstanding the terms.
Here is an example. I want to design the API for an online blob storage service like S3 and minimize the costs of running the service. But I’m used to using local file systems that obey rules like “I can list the contents of a directory efficiently”. Blob stores are designed to make GET and PUT data operations efficient and cheap, and in the interest of cost savings I do not want my blob store to efficiently support things that are easy for a local file system to do like efficiently list directory contents, which might require some complex metadata storage and indexing.
Is the blob store API singular or faceted? Is the local file system’s interface singular or faceted? Have I misunderstood the problem?
Yes, singular abstractions are always faceted.
Take the example given in the text, Palmer Eldritch who turns out to be a demiurge. While Dick can tell us in various ways how Eldritch’s reality overlays and overtakes our own, he can only do so using examples of which there are many. If the experience were truly singular, you couldn’t convey it with words. So we’re left to imagine such a state of being.
Of course, my point isn’t to say that in some far-off future we couldn’t have our reality take over somebody else’s, it to to say that such an event would be past the ability of human language to adequately describe. (Simply imagine such a thing happening to a deaf-mute, or an intelligent animal). At best we can just hint around at what such a thing might be like and hope that our readers will use their faceted abilities at understanding and manipulating reality to extend to this possibility.
None of that would matter except for the fact that we’re talking about coding abstractions, which, by definition, are created in some form of machine-human syntax. So we’re back to words, and we’re back to not having any sort of truly singular knowledge.
Oddly enough the same isn’t true with multi-sensory input aside from language. Anybody who’s ever played a really cool procedurally-generated game has been in a world that completely overlays their own, just not entirely. Over time we’ll get better and better at this, bringing in more senses and making it all more immersive.
It just won’t work with language. Or code (because of it’s relationship to language)
tl;dr code is not existence
Yes, singular abstractions are always faceted.
I guess the whole article reminded me of George Berkeley’s subjective idealism: to be is to be perceived, nothing exists external to the mind. A ludicrous but powerful argument.
Things exist external to the mind, of course, but (so far) we only have words to describe those things, and all words are “leaky”. So I can never, ever describe to you what my experience of “blue” is. Over time, if we talk, we might be 99.99% aligned on some concepts (mostly scientific ones), but it’ll never be perfect.
So if you look at that 99.99% number and say “there is an external reality that we all share and it’s ludicrous to think of ourselves as brains in a vat”, you’re not wrong, but that line of reasoning works only for scientific concepts, and only after a lot of level-setting is done among participants. If you look at the “we’ll never ever be absolutely aligned” part and think “nothing exists external to the mind”, you’re not wrong either.
We use human, spoken language to align in social groups to agree on formal systems (maths) that we use to explore the common shared reality around us. The human part and the math part are completely different universes of stuff with different rules and ways of thinking. (Apologies for the rambling. It’s early.)
The distinction drawn in the essay is focused on how abstractions are adopted, extended, and discarded, rather than the abstractions themselves.
I see, thanks!
Absolutely fantastic. Thank you.
I had exactly this thought.
Not a recipe, but what I find surviving from project to project, from system to system, from domain to domain – is the set of questions that one should ask themselves about the abstractions they come with.
q1) are my abstractions composable? Meaning can I build new meaningful features just by composing the existing abstractions
q2) are compositions regular ? Meaning that I do not have to come up with entirely new method of composition, I can use the same one over and over again
q3) If needed, can i express my abstractions by means of a domain specific language (this is often not needed, but forces to essentially recast the first 2 questions)
If the answer to all 3 is yes, then perhaps the designer found the ‘atoms’ of the problem space, and now the algebra (or composition) of those atoms can start growing slowly and iteratively.