Metaphors for computers: the slave

In the previous article, I proposed the toolshop as a metaphor for a computer. Thinking of computers as toolshops assign them to a passive role. This was true twenty years ago, but with the advent of global networking and - particularly - with mobile computing, computers can no longer be called passive; they are becoming symbiotic. Indeed, we increasingly depend on them to remind us of what we should do, to make movie recommendations, to do a thousand boring chores we can no longer be bothered to do ourselves. So, there is need for a metaphor with a more active connotation to explain how computers colonize our reality.

Computers as slaves

Computers, though active, are unproblematically subservient to our will. However, they are not (yet) generally trusted to act on our behalf; they require detailed instruction and we do not treat them as equals. This makes them slaves. (If they were trusted or our equals, they would be assistants.)

Let us disregard for the moment the melodramatic revolt; in practice, most slaves accepted their role in their respective societies.

A typical slave-based society has an abundant supply of slaves (or your society will not stay slave-based for long). Similarily, with the advent of cloud services, IaaS, PaaS and the rest, there is essentially an unlimited supply of computing available. The critical limitation of slave-based structures are how many slaves you can instruct and coordinate.

There are two axes along which utility grows: attention and trust. In the extreme case, if a slave would require your full attention at all times, it would be meaningful only when the work was dangerous. Similarly, a computer program that requires your full attention at all times is useful only in special circumstances. The real utility of slaves come when they are sufficiently autonomous for you to oversee several of them, effectively multiplying your capacity.

The second axis is trust. In order for slaves to be useful to you, you must trust them to act in your stead. You must trust them to continue to perform according to your instructions when your attention is directed elsewhere, and you must be able to trust them to notify you when they encounter some condition that they are not equipped to handle.

Similarily, the relevant limit for a human's use of computers is in instructing them to do your bidding and to get a predictable and faithful execution.

This gives us some important design principles for software:

  • Try to require as little of the user's attention as possible, but never guess.
  • Make sure to keep state so the user don't have to repeat instructions unnecessarily.
  • Try not to make assumptions about the number of computers available to work on a problem; good software can be empowered by adding computing power.

Computers, however, are not human

Computers do not share many properties with humans. They can concentrate indefinitely, they are (mostly) immobile, they are not prone to cognitive cross-connection and they are not self-centered. When we instruct computers (whether we are writing software or trying to use software) we should remember these strengths and make use of them.