Thinking In Public
In the thought I had about imprecise defintions, I mentioned that we need understand what our words mean, but I didn't get into why this matters. Once we realize we need more precision, we often attempt to define everything precisely. We have a desire to become lexicographers and write glossaries of terms so everyone can be on the same page about what words mean. The problem is, this represents the opposite extreme: an attempt to define words so precisely that they carry all necessary context within themselves.
This attempt, while interesting, often lacks purpose. The goal is almost never to enable precise communication for its own sake. Instead, we want to enable something else through the use of precise definitions. In the example from the previous thought, we want to cut down on time wasted being confused by the words others are using because of mismatched definitions. The solution for that problem is not to define words more precisely, but instead to question the premise of what others are saying when disagreement arises. If someone uses a word and the context around it doesn't sound like it fits your understanding of the world, you don't need to have the person define the word more precisely, you need to have the person clarify what they are attempting to communicate. The words do not matter, the concepts do.
In the documentation case, it does matter that we have precision in definitions, so we should take the time to develop a glossary of terms. But much like a dictionary that allows multiple definitions for the same word, we should not seek to have One True Definition for a word, and instead include multiple different definitions for a word and create easy ways to reference the specific definition of a word being used in a particular piece of documentation.
But there is another reason to create more precise words: in service of deeper understanding. One of the interesting things about distributed systems and the reason why the term is such a bad fit for the thing it describes, is that we quickly discovered after coining it that the algorithms and designs used for geographically distributed computers were also applicable to multiprocessor systems and asynchronous systems.1 It was the recognition that distributed systems algorithms could resolve cache coherency in multi-core processors that enabled them to be deployed so readily. It turns out that the things were were trying to achieve with networked computers and the things we were trying to achieve with multi-core processors were actually one in the same.
That is why attempting to define words more precisely can be useful. When we attempt to actually define a distributed system, for example, we'll look at what properties the system we're attempting to create has and then we can look for other similar things.
This is what has led to me spending a great deal of time over the last few months attempting to define what a computer is. It seems like a simple thing to define, until you actually attempt to do so and all of the sudden things that we don't think of as computers fit the definition. I've reached the point where I'm having more trouble figuring out what isn't a computer than what is. But I'm also not doing this for some intrinsic definition goal. I'm far more interested in the implications of what it means if computation expands out of the devices we've shackled it to for so many decades.
For example, musicians are computers. Composers are programmers. Music Producers are software engineers. That might sound strange. Perhaps you think I'm making an analogy here. I am not. It is not that "musicians are like computers", no the claim is "musicians are computers". Why? They take a written notation written by a composer, e.g. sheet music, and produce music, i.e. compute music. That might sound strange, but a composer can also use software to write the same musical notation and then have a desktop computer play the music. Why does the entity generating the music make the difference as to whether computation is happening? And if computation is happening in both cases, then why shouldn't we call both computers? This is further reinforced by the reality that the term "computer" has referred to a human for a longer period of time than it's referred to a machine.
Once one begins to poke at the edges of what a computer is, it becomes more clear that the way we've used computers and built software has assumed that the computer ends at the edges of general purpose computational silicon devices and does not expand outside of them. It assumes that the humans operating and using the silicon devices are not part of the computer itself.
The point here is that the reason for making precise definitions is not so that we have those definitions, but instead so that we can use those definitions for specific purposes. Defining computing is less interesting to me as an effort to explain the universe. It is far more interesting to me as a way to understand the universe, so that we may build far more interesting things. That is, the definition and understanding that follows is a means to an end.
Here we use the term "asynchronous system" to mean a distributed system in which each of the components do not share a singular clock. ↩︎