ARN

Rekindling the thrill of programming

Coding can be tedious, dreary, and stressful. Zooming out to reflect on how extraordinary software programming is can bring back the wonder.

We humans are a funny lot. How quickly we go from being humbled by the improbable feat of human flight to being irritated by how long it takes at the airport. We are routinely antagonised by traffic, but only occasionally amazed by the existence of a thing called an automobile.

One of the most prominent examples of recent human achievement is what we call a programming language. Reviewing the Olympic mental feats that punctuate the history of its creation will help you rediscover the near-fantastical nature of programming.

The programmer, like the poet

Frederick P. Brooks, Jr., in his influential Mythical Man Month collection writes, “The programmer, like the poet, works only slightly removed from pure thought-stuff.” That is a statement worthy of reflection. For the working programmer and anyone involved in helping them be successful, it may serve to awaken dormant inspiration.

We could say that programming is an activity that moves between the mental and the physical. We could even say it is a way to interact with the logical nature of reality. The programmer blithely skips across the mind-body divide that has so confounded thinkers.

“This admitted, we may propose to execute, by means of machinery, the mechanical branch of these labours, reserving for pure intellect that which depends on the reasoning faculties.” So said Charles Babbage, originator of the concept of a digital programmable computer.

Babbage was conceiving of computing in the 1800s. Babbage and his collaborator Lovelace were conceiving not of a new work, but a new medium entirely. They wrangled out of the ether a physical ground for our ideations, a way to put them to concrete test and make them available in that form to other people for consideration and elaboration.

In my own life of studying philosophy, I discovered the discontent of thought form whose rubber never meets the road. In this vein, Brooks completes his thought above when he writes, “Yet the program construct, unlike the poet’s words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself.”

A kind of slow-motion dance between mental and mechanical development was enacted over the centuries to arrive at what we can now call up in the browser with a casual flick of the F12 key.

Consider this programmable loom from the 18th century, and the role it plays in the tale. It’s interesting to look at a Baroque machine for algorithmic weaving and see punch cards that are precise analogs and forebears of the punch cards of early computers. The interplay of condensing thought and rarifying machines finally meet at the modern programming language.

Awed wonder

For a grittier, nuts-and-bolts look at programming’s development, see Ron Pressler’s ambitious history, Finite of Sense and Infinite of Thought. From the hesitant baby steps of antiquity to breathtaking leaps like Babbage and Turing, there is the sense of moving towards something not fully understood, but intuitively felt. We are in an age of realising the broad promise of this thing.

Pressler’s account marches resolutely into the hailstorm of mathematical and logical detail, but before setting out on the journey, he writes that “awed wonder is a powerful marketing tool, but it mystifies rather than clarifies.” Here we understand the warning is to avoid falling into programming fads and fashions. This is sound advice.

On the other hand, we don’t want to fall off the precipice to the other side, into a desiccated indifference.

It is to our detriment if we dispense with wonder entirely. It is healthy and vital to keep inspiration alive, to lift the head up from the work, zoom out for perspective.

There’s really no reason to divorce the joy of coding from the discipline.  In fact, that is a recipe for dissatisfaction. Burnout in IT is rampant. There needs to be more wonder, not less.

Turing-complete

A key moment in the story of programming is Alan Turing’s universal machine. This is another mind-feat we can point to in acknowledging that programming was achieved at a heavy intellectual cost (and great personal cost in Turing’s case). 

The difficulty in holding in the mind the idea of a self-referential system that can describe both itself and the programs it runs. Today we use computers that store both the information and the instructions for working with it in the same memory space.

This idea was taken up by Von Neumman for his architecture, which underpins how modern computers work. It’s one of those “obvious once it’s done” things: the system’s data storage capability is harnessed also for its code. Before it’s actually done though, it’s anything but obvious.

The trick here is that the idea of a file that can be both data and executable is a conceptual breakthrough that makes for a modifiable, extensible system that we have been working on ever since.

We can say for sure that a Turing-complete machine being realised and commonly available is something not just impressive, but until relatively recently, not even readily conceivable. The basic concepts for wrapping the mind around it were not yet clearly discernible.

Human interaction

Everything we’d said so far has dwelled on the nature of programming itself. Another important aspect we must mention is the effect it’s had on human interaction. Whether or not computers are evolving towards a singularity, the overall effect of humanity’s improved ability to communicate via software is a watershed event.

When looked at from this angle, web-enabled software is seen as the familiar cyberspace metaphor, a new kind of medium for interaction. Bearing in mind what we’ve described before — the bridging of the mental and physical — this landscape offers a unique opportunity to interact with one another largely in the realm of thought with the support of an executable logical understructure.

When united with the Turing idea of a universe of potential machine built within the system, we see the potential for worlds of interacting ideas. Here it can be felt that we are still in progress, still active in feeling for new ideas to be brought to life.

The future unfolding

Our daily work in programming software, then, is a part of the ongoing unfolding of unpredictable future realities.

Perhaps the ideas swirling in the Web3.0 sphere, underpinned by Blockchain innovations, will play a role. Many certainly think so. Others vehemently disagree. In any case, and not for nothing, Facebook changed its name to Meta.

Perhaps quantum computing will have a role. After all, it allows for the interaction with an inherently different character of the underlying physical reality, that of the non-binary.

All things return to the humans using the systems, doing the programming, and helping them to succeed. Let’s remember that above all, technology serves people. Happy developers write better code, and that’s better for the bottom line, it’s true, but the more fundamental point is that happy developers are happy people.

If you can, remember the sense of possibility inherent in opening up the code that makes a program work. It was fired with not just a technical interest, but with an almost fantastical quality. And why not? Less than a hundred years ago, a programming language was a dimly perceived possibility that might or might not pan out to something real.