(I’ve been sitting on this post about abstraction, indirection, and disintermediation for nearly a year, figuring I’d flesh out the argument into a long post with numerous examples; Greer’s post tonight is on a similar topic, so I decided I might as well post it as is.)
It’s often said as a joke among computer scientists (especially among those who work on systems, as opposed to theory) that there are really only two ideas in the field: abstraction and indirection. I’d like to explain what happens when these ideas (more about which in a moment) are applied not just in the abstruse confines of software and hardware and computer systems but instead are applied to a society as a whole. While it might seem like a leap to say that such academic principles of computer science impact society, I’d like to make that case that that’s exactly what’s happened while we weren’t looking.
Computer science is an odd field — it consists of everything from pure mathematics (e.g. computational complexity theory), applied mathematics (e.g. algorithms and cryptography), engineering (e.g. distributed systems), and even some of what we might traditionally call science (e.g. Internet measurement). Computer scientists might bristle at the following, but to a first approximation subfields within computer science fall broadly into two categories: theory and systems. My academic background is in the latter, though I’m also fairly familiar with theory as well. Theory includes algorithms (divide and conquer, dynamic programming, greedy algorithms) and then computability and complexity theory.
There’s been a movement of sorts for the last decade to attempt to quantify everything, as technologists expand their vision and reach and dominance in society. From crime fighting to education to governance to personal health to many many more fields, computer scientists have jumped in with both feet, and more than that, people have welcomed their dominance, perhaps from a perspective that “data will set us free.”
The DIKW — Data, Information, Knowledge, Wisdom hierarchy — is a nice classification, and one that I think more computer scientists should consider. To put it simply, I think we’ve seen a replacement of a smaller amount of knowledge and wisdom for a larger amount of data and information, in the hopes or claims that more is better. We have shoes that will tell us how fast and how far we’ve run, phones that can and do monitor everything from what we’re currently doing to what someone else is typing nearby, purportedly crime-fighting cameras and microphones, and much much more. But it’s not clear that any of this is turning into knowledge or wisdom — my hypothesis is that knowledge and wisdom have a fundamental limit, in that they are generated by slow processes of human minds and human interactions, and more data or information won’t help speed that up.
But I think the impact of computing on society goes deeper, and its root is the two concepts of abstraction and indirection.
Abstraction in computer science terms, roughly speaking, is the process by which some computational object — anything you can represent in terms of some data stored in a computer — is boiled down to a set of data fields that describe it. Think of any concept stored by a website you use, and there’s lot of abstraction going on, a lot of it visible from the outside if you know what to look for. For example, many companies publish APIs (Application Programming Interfaces), which are the means by which you can integrate with their software / systems. Those APIs come with descriptions of the abstractions they use to convey information. Want to see what your friends look like to Twitter? Just look at their API — your friends are just a list of numbers. The benefit of abstraction in computing is that it enables code to be written generically and modularly — a friend in code is a simple abstract concept that can be described with a few data fields, rather than a real complex human relationship around which code must be adapted.
Indirection in computer science terms is the process of interposing on some communication — the process of decoupling two things that were coupled and sticking a layer in between. The benefit of indirection is that it can enable flexibility. For example, Amazon to a large extent relies upon indirection — many of the warehouses they operate are not actually run by them, but by warehouse contractors under their direction, and the products they sell aren’t made by them, nor are the reviews written by them. The benefit, so far as there is one, is that by creating many layers of indirection in between, they enable their users to learn about and purchase just about any products manufactured anywhere in the world and stored at some large warehouse out there.
There’s obviously a dark side to both abstraction and indirection, and it’s been written about a lot, but I think it hasn’t been recognized as such. That is, the systems that employ abstraction bother us at a gut level — the fact that Facebook has cheapened friendships, that Amazon commodifies all products and all sellers — but it’s not often recognized that at its root it’s just abstraction gone awry. The same goes for indirection. Cloud computing is a good example of the use of the two systems ideas together — your data is held in some abstract conception of a data storage system — the cloud — and you don’t even communicate with the cloud servers directly but rather through a labyrinth of intermediate systems and layers all with a friendly face on them. Virtually every website, Internet service, and tech startup leverages abstraction and indirection; they abstract the previous provider of the service and become the layer through which the two sides interface — take Uber, which abstracts away the Taxi driver and inserts itself as the middleman in the transaction and takes a hefty cut. (Note, however, that traditional software doesn’t do this — an old fashioned calculator program, for example, is abstracting and indirecting much less.)
Those that don’t insert themselves as the middleman in a previous paying relationship create a new one via advertising (and apply indirection there). It’s been said by Bruce Schneier that the business model of the Internet is surveillance. That is, many companies make money on the Internet by collecting data on people so that they can sell better advertising. I think this is true, and again I think the fundamental issue here, the cause of the structure of business on the Internet, is these two key ideas of computer science. Understanding those ideas might be important in a range of challenges we face as a society — both the obviously related ones like surveillance and less obviously related environmental and socio-economic challenges.
Am I saying as a computer scientist that we should abandon the field? No. But perhaps there are a few things we — both computer scientists and the broader public — need to discuss:
a) that data and information are just representations of the real world, and our current society tends to favor these representations over the messiness of reality,
a’) and we need to resist this.
b) that intermediation on things in the abstract world can intermediate things in the real world,
b’) but it’s possible to apply this idea in reverse and disintermediate and
b”) it’s possible to identify and remove computers in natural systems and human society and remove them if the only reason the computers are still present is legacy.
Should we perhaps move towards building computing tools rather than computing systems?