The next issue I want to explore is the central one of how we handle doubt. This is crucial in understanding how we come to know anything and so is pivotal in developing our own perception.
If we accept that there are problems with truly knowing reality, there are a number of ways of handling the situation.
One way to handle doubt is to decide that we cannot truly know anything and so should not even try. Just RUN AWAY! as the Knights of Arthur did from the rabbit in Monty Python’s Holy Grail! In this case we just fall back to perceiving the whole of the world without any analysis. This wish can particularly happen with the New Age movement where some people want to escape away from the world into a cloud of unknowing. But humans will always analyze their surroundings to some extent so this technique is rarely followed in reality.
A second way to handle doubt is by deciding that if we cannot truly know the world, all we need do is take a quick look at it and then come up with some hypothesized model. We then leave it to experimentation to tell us if we are right or wrong. In some areas of research, particularly anything to do with living processes, this means we will be disturbing the very processes we are looking at. It is like using the proverbial sledgehammer to crack the proverbial nut, and we know how that turns out for the nut in such a case! Scientific research can implicitly fall into this mode of operation, letting our thinking run ahead of the phenomena – a trap that Goethe highlighted.
I think that neither of these two modes of handling doubt really come to grips with improving how we generate knowledge about the world.
A more fruitful way is to learn to live with the gap in our knowledge, i.e. stay with the not knowing. This is a distinctly uncomfortable option and is very difficult in the world of commercial software development where we may have time and/or financial pressures. Despite not knowing the best way to solve a problem, we need to use the simplest implementation we can and realize that it is a provisional state, allowing us to return to it when our thinking has matured and we can see our way to a better solution. As Dr. Marian Petre mentioned in her keynote, this handling of ‘provisionality’ is a capacity that distinguishes the expert programmers from their less successful counterparts.
The Disciplined Self
As I mentioned at the end of the section on the path of the programmer, this requires the development of a strong sense of self. It requires that we maintain a disciplined practice when external pressures dictate that an immediate solution is required. We need to learn to hold a calm centre in the face of not knowing the right solution to a problem.
If we do not develop the ability to hold this centre we will not be able to think straight – a necessary function for our survival, commercial or otherwise.
→ACCU2016: Talk on Software Architecture Design 4: A Design Example
←ACCU2016: Talk on Software Architecture Design 2: The Historical Context