code and the oracular

Why Geeks will rule the World as Inheritors of Cutting-edge Knowledge about Practically Everything

with 2 comments

In programming the first introduction to abstraction we receive really comes when we have a variable we choose to name. This allows the name to feature ever after in our code, instead of having to represent the actual data that constitutes the variable each time.

The second form of abstraction occurs when we choose to name a procedure. In the same way a block of code is represented by a function name. These two effects may become even more pronounced in LISP where from the start we are encouraged to think of data and program code in the same way.

And in these clever inventions we can already see a lot of the development of human thought paralleled:

first people pointed
then they described through gesture and evocation
then they named

I hope to take the reader on a brief impressionistic tour of how all human thought is one, and how these “knowledge machines” help us expand our knowledge, as long as we are truly thinking not just staring at an empty inbox for hours every day or wondering why friend x always posts on facebook when they are hungover…

Abstraction starts cropping up everywhere the more you look. If you are writing a longer program in a text editor you may choose to incorporate code folding where segments of code can be hidden or revealed by a click in the margin.

Even this is abstraction too, although the referent is a spatial one, given by location in a document, rather than a lexical name.


In much programming activity the solution to a problem depends on how you break the problem down into sub-problems. This is in fact one of the essential ideas behind all modern science, namely reductionism. Analysis seems to want to come by dissection, at least to the unstrained. I couldn’t begin to try and explain how to analyse without these means, but maybe that says something about culture rather than about best methods. I think the similarity is worth pointing out as part of my rap though. Also the opposite process to decomposition of composition is such a widely found pattern. If decomposition is science, then surely composition is engineering. Building structures, or code is about this combining step. Taking them to bits, even debugging must be the converse.

Where does art come into this ? I like to put anything I can’t justify but still feel like doing into that great old-fashioned but eternally valid category. But then I’m still abstracting while I do that ! Art creates new logics through leaps of intuition but the space opened becomes available to all and will definitely join with our more scientific knowledge for the holistic insight that is evolving in the species.

What about this one: Good chess players may decide to split or chunk the board into 16 2×2 regions, 4 4×4 ones or other less symmetric groups of pieces rather than considering every separate square. This “chunking” is a refinement used similarly in many areas of human expertise. Rich and complex models of situations can become unwieldy unless a simplicity is obtained by building from similar modular concepts. Object orientation is about this decomposition where you are searching for the thread that unravles the tangle into the simplest overall form.

This is abstraction too. I see it as similar to data compression of an image such as a jpeg. Patterns that repeat often enough can be designated as individual units, and so the data needed to specify an image gets shorter. Programs, video, text, music all chunk nowadays.

So abstraction and compression are linked too.

When the human mind finds itself in a new unknown domain… a new environment, a new situation or even a whole space of new science opening, it will unconsciously start to identify features and classify them. This means marking and dividing into objects that possess similarity and can thus be subsumed into classes. These classes are another abstraction we can see in programming. The emergent shape behind the process is that of a taxonomy, a hierarchy of descendant categories that help us to make sense of a complex collection of stuff.

A taxonomy holds objects, but if we want to add more data to the system in finer detail, and allow an inter-relationship between the things we have seen, then what emerges is an ontology. This seems to be rather similar to a scientific theory… But in a way any program is similar to a theory. Its input and starting data are essentially observations that are fed to the code. What is output then ? Maybe an output is a prediction given by the theory. In the same way humans make observations of each other when we communicate. Attention seekers love to be modeled, but as their reluctant companions sometimes find, you need some energy to make the observations and can’t always be bothered ! But maybe you will when you realise that we are all theories too.


Behind many of the constructs of programming also lies the conception of formal logic. This seems a great abstraction, and also a compression of language, perhaps lossy, where the fundamental structures of statements are preserved and formalised. Also since it is a compression we find that logical forms such as syllogisms can be classes too that characterise huge numbers of individual statements in ordinary language. Who can doubt that understanding some of logic helps one’s reasoning skills, yet what is being manipulated is the compression not the original data. So I feel that everything we see as our thought processes depends in some way on compression just as much as abstraction. When using language compression is always there, as we unconsciously work out how to say things, often we use shorthand or reference rather than maximal verbosity. Indeed we often find well compressed language more beautiful!

What about another aspect of human consciousness ? The existence of a subconscious mind, to me stems in part from the nature of parallelisation. The architecture of the brain is parallel but our conscious mind seems only to know one thing at a time. So many processes can be active while only one can have focus, thus we feel that often answers and results rise although we had no idea of a computation about them happening. Given the huge range of our preoccupations it seems that most of what we think about we didn’t know we were at !

Sleep and waking too may be explicable through parallelisation. While awake you live busily and react through established neural circuits. But those circuits, in varying degrees of reflex function, need to be programmed and prepared, and this with its implication of downtime needs to be addressed at a time when cognitive load from external situations is low, hence we dream and sleep at night. The rotation of the planet is of course the other driver, we evolved to fit needs to circumstance.


And there’s more. It seems that the method in programming that allows us to set up conditional branching is directly analogous to human choice. We do not know what our programs will do in advance but we enable them to “decide” based on an input or some other value in their compass. This essential tree structure seems an inevitability in allowing complex behaviour. It’s planning by isolating likelihoods and laying down possible responses. It can even help with likelihoods that no-one saw if your thinking is dynamic enough. The more complex the organism the more branches its behaviour can show. Organisms with no branching are the simplest, perhaps like a single celled creature whose rule is “open your mouth and swim forward. repeat.” If the universe itself is a computation, massively parallel and endlessly novel, then programming is indeed cosmic knowledge, worthy of the most mysterious initiation. Everything I’ve done on this blog is aiming for that. As well as finding it useful we should sit inside our knowledge and enjoy it like contemplatives sometimes.

In programming there are two ways to deal with collections of many things. The most commonsense first approach is iteration, the other, harder but satisfying, is recursion. All counting behaviour is iterating so we can get a sense of how some clever caveman prefigured that ultimate formal standardisation of counting. This can set us up with a whole load of parallels in ordinary life. Of course making what we do too iterative can lead to great boredom. Making things too recursive may lead to madness too. This is a blog post not a scientific paper so I have to give my two penny’s worth !

Most enterprises that get to the stage of manufacturing will be tending to aim at standardisation of their product. This is so that economies of scale can be harnessed for mass production. Standardising objects and processes is ultimately aiming for industrial processes to behave more like computer programs. Nowadays this trend also applies to many service industries. By standardising educational achievements employers have the capability to judge more reliably about their employees. By laying down procedures for complex tasks people can be governed by rules allowing for better judgement of competence. But it can increase bureaucratic stupidity since computers also teach us that there is an exception to every rule, and that idiot proof instructions can get intractably long and still never cover every possibility.

I had an interesting window on this when I took up cheesemaking. Artisanales cheeses all tend to be slightly different. If you are on a large scale of production you may not be profitable unless you standardise and can make accurate predictions about precise quantities of raw materials required, time needed for ripening, price etc. Operations Research has brought all these quantitative concerns to making industry and all business far more mathematical.

I must claim an opinion of mine at this point. Systems or institutions that are designed to process or manage human individuals and human needs may sometimes clearly not benefit from all these developments that make our approach to management so clearly quantitative. For example the Call Centre is designed to mass process calls from customers, but the unique nature of human beings suggests to me that no single easily graspable taxonomy can successfully classify every situation without a need for further thought on the part of the operative. Of course asking your employees to think may be a risky proposal for those who establish this system ! Medicine is claimed to be a rational science but certainly in the case of psychiatry we see that forcing humans like round pegs into square holes may be missing the point. This is a failing of a system that aims to taxonomically define and cure illness. I feel that people will always feel that their essential beings are being more respected if recognition of their uniqueness is given. This uniqueness is a combinatorial certainty, and recognising it is an act of optimism and affirmation for which I find I am usually grateful.

If many modern institutions are trying to make human activity more like computer activity, then it is geeks who need to resist this. Simplistic rectilinear thinking fails when faced with hugely asymmetric complexity, the universe can still be a computer, but it’s much more chaotic than we usually think. Is it the wrong kind of programming that is defining the world, and politicians and leaders who need to think more chaotically, more quantum? Human uniqueness says that your need to ring the call centre is unique and cannot always be automated. So, and this again is against the trend, we will always need to think. The chaotic parallel computation that is the universe is richer than we may know, and humans need to flex the muscle that gave them such evolutionary advantage. Among geeks we seem to like to think, and so again there we must be born to rule. Who could know more about running complex systems like economies than people whose daily bread is managing extreme complexity for users ?

So do the learning steps of today’s beginner programmers recapitulate the early history of the development of programming by the human race as a whole ?

This is an interesting question … If they do this certainly makes life simpler because it means that getting a professional education and knowing about the history of your subject share a structure in common… Some educationalists believe in this “recapitulation theory”. They got the idea from the development of babies in the womb where a human fetus passes through stages that mirror its evolutionary history.

The first proto-programs were codes like the cards that controlled a loom, or the roll of paper in a pianola. Do all learning programmers start from the ultimate basics like this or do they jump in at a later stage? I don’t think we always start from scratch, mainly due to the ubiquity of computation nowadays. People don’t learn to count by putting pebbles in a bowl anymore either ! Maybe we’d have better mathematicians if they did ! Most programmers seem to want to start with games, or making a website like their friend’s. To really get the rounded idea of the subject you might familiarise yourself with the real history when you have progressed from the basics, though. As well as making a human element the history fleshes out the hows and whys of what you are studying.


So it’s a great time to be a programmer, and I maintain that its a discipline which has spinoffs into many other skillsets. I hope some of these my informal thoughts have made that clearer for you. And perhaps you will see enough that you conclude like I do that we want people to stay like people and the computation around them to honour that, rather than letting that looming computer dystopia appear where we become homo-bureuacraticus and are forever lost in the corridoors of limited logic. So let’s redefine: being a geek means having great social skills, finger on cultural pulse, a grasp of the ideas behind the humanities as well as the character to climb the knowledge-is-power ladder to lead our civilisation forward. If there’s a singularity coming I want to stay on the horse, but that’s another story for future posts.


Written by Luke Dunn

October 16, 2012 at 9:20 am

2 Responses

Subscribe to comments with RSS.

  1. OK, this was a little over my head. You’ve obviously put a lot of thought into the relationship between programing and the human mind. We work with what we know best I guess. Still I want more though.

    Jeanette Moore

    February 9, 2014 at 7:24 am

  2. the blog is partly my creative writing including stuff about mental health, and the other bit is my science and programming work… the categories “creative nonlinear subjective” and “Creative Writing” in the cloud on the right are mostly my non-technical stuff

    Trip Technician

    February 9, 2014 at 7:28 am

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: