Thinking In Public
Communicating is difficult. And it's often made more difficult because we rarely ensure that everyone has agreed upon the definitions of words before a conversation begins. I've often wondered why this is such a problem. What is it about the words we use that makes it so challenging to effectively communicate our ideas? To ask questions? To debate topics?
I was watching some YouTube videos the other day when the algorithm suggested a video of Carl Sagan responding to a question. Intrigued by the title, I clicked on it and gave it a watch. The video is interesting for a variety of reasons, but one of the first things that he does is ask a question in response. In this case, the question he asked challenged the premise of the initial question. That is, in order to actually answer the initial question, he required a more precise definition of what the person meant by the word "god".
This reminded me of one of Sam Newman's talks where he similarly inquires about what people mean when they use the word "asynchronous". He goes as far as to recommend we stop using the word altogether because of the confusion it can cause.
There are no shortage of words that are like this though. Words that have so many different meanings that it can be difficult to actually know what particular meaning of the word someone actually intends. As Sam mentions, we often need to use the contextual words surrounding the ambiguous word in question to understand what that word actually means.
In a way, this is a critical thinking problem. I've noticed that people tend to assume that their definition of a word is what everyone else means when they use that same word. This is true even when they themselves cannot actually define the word or what they mean by it. This has come up a lot recently in the world, especially around words that people assume have very well defined and concrete meanings. One that I find particularly amusing is "tree". As this MinuteEarth video explains, we don't actually have a way to define the word tree such that it actually includes the things we consider trees while not including things we don't consider trees. Most of the time this doesn't matter, because precision doesn't matter. But what about when precision does matter? For example, when we're writing laws about things? Or when we're designing a software system?
Most conversations don't require precision. Most of the time we can figure out what someone means by taking in enough context and asking for clarification when necessary. This does tend to waste time, especially if a heated debate occurs due to the mismatch of definitions. But in general, it's fine. Where it's not fine is when we need to communicate in a way where we cannot add additional context. For example, if we're writing documentation.
When we write documentation, we can't actually go back and ask the author of the documentation what they meant. Even if that person is still around and available, the passage of time means that they don't have the same context they had when they wrote those words and the fuzziness of human memory means they won't perfectly remember the context they do recall. Precision also matters when we do not have time to spend on cycles trying to understand what the words each person is using actually mean. If you need to build and launch a system in a few weeks, you can't waste a week in disagreement simply because people were using the same word to mean different things.
In the computing industry we've done ourselves a disservice by also coining terms before we actually understand what something is, leading to words that mean one thing without context, but something entirely different with context. The term "distributed system" is a good example of this. To most people they would use one of two definitions:
While both of these definitions describe distributed systems, they don't cover the entire space of the term. For example, a distributed system could be distributed in space, like the first definition, or it could be distributed in time. It could be about failure modes, like in the second definition, or it could be uncertainty of input. This is to say nothing of the reality that distribution over space does not have to be far in human relative terms: a multi-core processor is a networked system with several compute units linked together by a network, which fits the first definition.
The problem here is not one of words or necessarily needing more precise words in general. It's about understanding when it's appropriate to use colloquial words and when we need to use formal words. This is where the critical thinking component comes in. Before one can respond to a question or form an opinion of something, they should first ensure they understand and agree with the premise. When the premise isn't firmly understood, questions need to be asked to clarify what the premise actually is and what the words used actually mean.