A fairly obvious observation but one which needs stating as it is easily forgotten when we acclimatize ourselves to the job of programming.
It takes a significant amount of mental energy to do this job.
When programming we will be making decisions minute by minute, if not second by second, and this requires a large expenditure of mental effort. It means that when I get home after a day at work I just do not want to make decisions. I am all “decided out”. This is why I will rely on my partner to decide what to eat for dinner!
It is obvious how much this affects the rate of progress on a project and any experienced technical lead will realise that a significant concern is the level of energy in a team. It usually falls below the radar during the heat of trying to hit deadlines.
We need to notice the difference between what I call linear and non-linear thinking.
Even though we may not consciously recognize it, a faculty I see time and again that highlights the difference between programmers and non-programmers is the realisation that we need to do as little as possible to create a solution that has as much impact as possible. Laziness if you will, though I prefer to call it non-linearity.
A good programmer will try to minimise the amount of code they create, or will create firm foundations to allow them to minimise the amount of code they have to create later. While this is being done there may not be much outwardly visible progress, maybe none if it is all in thought patterns. This, along with the fact that programming is not a numbers game (i.e. more people equals faster progress) can be a big cause of strife between techies and managers.
See Robert Glass’ book Facts and Fallacies of Software Engineering, fact number 13: “There is a disconnect between software management and their programmers”, which has an interesting story of how different the two disciplines are in their view of projects.
Many early programmers were amateur electronics or radio enthusiasts who then turned professional. I remember going to a radio club meeting where one of the members had built a Z80-based system that had 64KB of RAM! A full complement of memory in those days and we all duly drooled. But at the time there was no software to fill it with that could make any use of that much memory.
We were enthusiasts and at the beginning of the PC revolution many programs were games. As the field progressed there was a transition from programming as play to programming as an economic activity, though the games drive has remained strong.
So here we are now with a very lucrative IT industry that is based on this energy and we forget this foundation in play at our peril. It is a fundamental human activity that fosters resourcefulness. Confirmed by recent research by Sergio Pellis about self-directed play – as if we needed to be told. Self-directed play fosters resilience and resourcefulness, faculties that any company would want in its employees.
I believe that the next 2 issues of Boundary Crossing and the Inner World are the most important observations I have to offer.
What do I mean by boundary crossing? Let us look at the characteristics of technology.
- Tools or technology are amplifiers.
We use technology to amplify or extend our capabilities. Cars amplify our movement and aeroplanes allow us to fly. But an amplifier has no knowledge of good or bad and will also amplify and extend our mistakes. During the Industrial Revolution we created devices to amplify or enhance our physical capabilities, but with the development of information technology we have created devices to amplify our thought.
- Technology use has transitioned from External to Internal problem-solving.
As the nature of our tools has changed, the effects of our use of them has moved from being externally visible to others, to being internal and hence invisible to others – as the effects take place in our heads. This is a Significant Shift (which is worth the capitalization) and has many side-effects. My thesis is that this has largely gone unnoticed within IT, especially given the primary focus we have had on the physical gadgets rather than the psychological effects. I take you back to Dykstra’s comment that:
“…their influence will be but a ripple on the surface of our culture, compared with the much more profound influence they will have in their capacity of intellectual challenge without precedent in the cultural history of mankind.”
- The Technological Paradox.
Tool usage requires us to be more awake since it amplifies our actions and thoughts. The paradox with technological use is that we tend to go to sleep more as we let technology take over faculties. (Just look at how people drive – but don’t get me started on that) It is why an incremental process works so well and why Agile techniques have become so popular.
This transition is part of what led me to post about software development requiring an evolution of consciousness and I believe we need an updated vision of the discipline in order for there to be constructive progress.
What I find fascinating about the process of developing software is that despite its heritage in a rational scientific process, we have been led into this inner world and no matter how hard we try, will not escape it. For me it is a source of livingness in the job.
Programming involves the creation of a completely human made world where there is little feedback and few checks against an external reality. Indeed we have had to dope silicon away from its natural state to make machines that can be completely controlled by what are effectively our thoughts.
It can be helpful to identify what happens internally when we write software and I believe a simple view goes as follows:
- First we engage in thinking about the problem and carry on thinking to come up with some possible solution. Notice the verb tense here: thinkING.
- With this thinking we create mental models or more finalised thought constructs that define our solution to the problem.
- It is these mental models or thought constructs that we can transcode into software.
Thus the computer is running a network of these thought constructs. It is worth noting that this is NOT the same as the process we use when thinkING about the problem and its possible solution. This is why I am highly sceptical about the promise of so-called artificial intelligence.
As they [try to] run these mental model networks computers will mirror back the quality of our thought process as programmers. Thus any self-respecting programmer will need to become self-aware about their own process and learning in this area of their own thinking.
Initiation in Thinking
I believe that this whole domain can be seen as an initiation in thinking which in former times would have been the province of mystical and religious orders. But the current ideas of religion are not appropriate to this domain although there are some similarities if you think in terms of ritual – but that is a whole other touchy subject to be dealt with later. This move into the inner world is why a developer’s attitude is as important as their technical ability – if not more so.
Next time I will take a trip into the philosophical side of things and link up to some of the great thinkers of history.