The next issue I want to explore a little deeper 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 knowing reality, there are a number of ways of handling the situation.
One way to handle doubt is to decide that since we cannot truly know anything, we 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 decide that we are just going to 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, not all, just want to escape away from the world into a cloud of unknowing. A point here is that humans will always fall into analysing their surroundings to some extent so this technique is rarely followed in reality.
A second way to handle doubt is to decide that if we cannot truly know the world, then we need only take a quick look at it and then come up with some hypothesized model. We then fall into leaving 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 Marian Petre mentioned in her keynote, this handling of provisionality is a capacity that distinguishes the expert programmers from their less successful counterparts.
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 a solution is required NOW! 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.