C Doubt
C Doubt
I want to return to the issue of Doubt, of Not Knowing. This is a difficult aspect to think about
because it forces us to look at the process of coming to know something, rather than the content
of the conclusion. It can make us enter that difficult realm of our Self and how we handle our own
ignorance. Within an economic context this can seem to be unacceptable, but in software
development we must come to terms with this. Indeed, as Dr. Marian Petre mentioned in her
keynote, this handling of what she called ‘provisionality’ is a capacity that distinguishes the
expert programmers from their less successful counterparts.
This topic is central to understanding how we come to know anything and so is pivotal in
developing our own perception. In the light of the historical and philosophical context of the
previous article, 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. However, humans will always analyse their
surroundings to some extent so this technique is rarely followed in reality despite the intention.
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
and hence his introduction of the concept of Delicate Empiricism.
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, yet distinctly uncomfortable, way is to learn to live with the gap in our
knowledge, i.e. stay with the not knowing. When we have time and/or financial pressures in a
commercial context this option, compared to the first two, requires (i) a strong sense of Self and
(ii) a disciplined approach to the handling the boundaries of what we know.
There is not much that can be said about developing a strong sense of self since it is such an
individual struggle. But I want to make clear that by “strong” I do not mean arrogant and
unbending, in fact the opposite. We obviously still need to work constructively within our teams,
but we must first develop the capacity to accept not knowing as part of the job specification of a
programmer.
The worst thing we can do is jump to implementing a hasty and overly complex solution. This is a
feature of many systems and leads to maintenance nightmares. We need to use the simplest
possible implementation 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. Indeed the simpler we can
make it the faster we can implement the eventual best way to solve the problem.
But it is just here in the implementation of a simple provisional solution that we need a
disciplined and self-aware approach to our own knowledge, or lack thereof. Just as with
debugging, we need to be aware of the boundary of what we know and keep any coding from
moving too far past this boundary into a complex “Journeyman” mode of practice. In fact the code
is going to be far more “Novice” oriented and the KISS (Keep It Simple Stupid) heuristic is an
appropriate guideline.
In reality this need to develop a strong sense of self means that we should not get trapped into
thinking that ignorance and stupidity are the same thing. We should be able to calmly know
need to maintain a disciplined practice when external pressures dictate that an immediate
solution is required, and we must be able 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.