I am a programmer. It’s in my blood. It’s my passion. I know that we can move in mysterious ways – just like all those who create.
I wanted to sketch out some of these ways to make it easier for people who work with programmers.
Programming is a creative endeavour.
Most non-programmers I speak to see programming as an exercise in logic and mathematics. It’s not really, there is deep thought certainly but it’s more akin to writing than science.
Perhaps it’s more like poetry or a recipe. There is an aim, a message to get across, a list of ingredients or cast of characters, the actions required or the arc of a story. It can be written plainly or with more personality. It could be hacked together or intricately developed into something vast and stimulating. Above all, it has a signature and a style that the author is proud of.
When we think about something creative we often think of something tangible like a painting or a book or music. With programming, this creativity may also result in something attractive but more often it’s something behind the scenes, a foundation that other great things rely upon. In this way, it is in the thinking process that the creativity lies.
The search for simplicity can be found in all creative disciplines.
We can all appreciate how simple things are easier to absorb, more pleasing to use, more immediate in their purpose or message. And often more beautiful. But simplicity also takes time. This brings to mind the adage on speech writing that states the shorter the speech, the longer it takes to write. In the pursuit of simplicity, the idea is only the beginning - it must be developed to its conclusion with conciseness and clarity.
The creative process comes to life through exploration and iteration. It’s common for an artist or a writer or designer to build up their work only to tear it all down and go back to the basics, now with hindsight and the experience of inferior ways. In fact, this reforming stage shows that the summit has been reached and the path to completion is now clear.
Programming is just the same.
We’d like to think that there is one true way of doing something but, as the complexity of the problem grows, the more ways of approaching it unfold. Through deep thought the problem can be side-stepped or reimagined in a better way. Better because it took weeks off completion time or because it avoided complexity to ease future work.
Programming well relies on a depth of knowledge. There is the experience of using tools and understanding how they work and why they exist. There are syntax rules to follow and a myriad of techniques to draw upon.
Above that depth of experience, programming is a thinking exercise. The concept of the program, the knowledge of the system, the movement of data within the system and the functions and frameworks must all be held in the programmer’s mind. Sometimes we must think beyond what has been done before. We mentally follow the flow of data through the program towards a working whole.
This is programming. It requires space and time and the thinking goes deep. Disrupting someone who is working this way will affect progress beyond the initial interruption. Once pulled up from the depths, the train of thought is derailed and fragmented. It can be regained in time but if distractions are continuous then the best work cannot be done.
Distractions could be physical or chat room interruptions, they could be meetings, they could be a noisy environment. But the silent killer is stress. The burden of over-responsibility, the helplessness of being rushed or pushed around. Those are the things that most harm creative thinking.
My best programming happens when I’m outside, walking in nature. There is time and space away from distractions so that deeper thinking can take hold. As I walk, I am also walking through the problem and through the pathways of code to find dead-ends or a secret gate to a new way. I’m not in the workplace, I’m not even at a computer, I’m building the thing in my mind.
Freedom to play, freedom to explore, freedom to learn and evolve. Denying those freedoms will stifle output and lead to disillusioned workers producing soulless work.
A programmer wants to solve problems. They know the system as an integrated whole, they understand the possibilities and the opportunities to help users. Give your programmer the problem rather than what you think you need. You will be delighted to see a radical and optimum solution in most cases. The author will do their best work when they are in control of the story. If you dictate the work to someone they become a typist only.
We are all different ∞ We are all the same
Perhaps these are qualities we all recognise in our best work. Let’s honour and celebrate each others’ traits. And remember that the most progress is made when there’s a strong purpose that creates passion and a hunger to achieve something good.