Software Engineering

A difficult relationship between algorithms and code

As algorithms gain their prominence in our daily lives and start to affect us to a degree still unknown to many, we should start seeking to understand them a little bit better by drawing on the history, social relevance, and definition of the algorithm itself.

First of all, algorithms are not code. They are two separated yet well acquainted entities in the way that one completes the other. “Algorithms are a finite number of calculations or instructions that, when implemented, will yield a result.” Code is the practical implementation of algorithms, described as set of instruction for a computer delivered via the use of specific programming languages.¹

It is important to remember that an algorithm does not live only within the environment of Computer Science but is firstly a set of mathematical operations. One can think of algorithms as step-by-step formal instructions to solve a problem that are only abstract until implemented on the machine. As suggested by Andrew Goffey in the chapter “Algorithms” on M. Fuller’ Software Studies, we can interpret algorithms as if they were sentences (term firstly used by Michel Foucault) in a language — one which does not cohere with the idea that words can’t do things. A language that is self-sufficient and can transversally communicate with itself without the need of actual “speakers” if engineered to do so.²

Languages base their existence on two basic delivery methods, speech and writing (memorisation being a result of the formers). However, we can see the power of speech diminishing when, in society, “the volume of knowledge quickly increased to a point at which there was too much [knowledge] to pass in the form of dialogue”³. To reason about the nature of the very first algorithm known in history — the instructions for factorisation and finding square roots developed by Babylonians in 1600 BC — we need to imagine dealing with the volume of congested information required to be processed to get the job done. To tackle this issue of “big data” it became crucial to develop written rules and instructions aimed at managing such “ill-defined network of actions upon actions”⁴.

Later in history, Turing’s abstract mechanical machine condensed the logic of virtually any possible algorithm into bits on an infinite strip of tape. Here the algorithm, while occupying a crucial role in the computing process, becomes nothing but a set of data fed into the machine to yield a result. But even a cardinal concept like that of the Universal Turing Machine assumes a degree of abstraction in that it supposes a precise set of inputs (1, 0, and Blank) and outputs (move tape left, move tape right, go back to the beginning state, etc.). Without such structure of data the algorithm is broken.

“Although computer scientists reason about algorithms independently of data structures, the one is pretty near useless without the other. In other words the distinction between the two is formal.” (A. Goffey, 2008)

In a sense, we need algorithms to be broken, “machines to break down and systems to be hacked”⁵ because unintended side-effects are the foundation stone for most creative applications known to us today. I believe the study of algorithms needs to escape the shadow of code, and the much worshipped process of learning to code. This means taking a step back to find the patterns that connect data, before even writing a single line of code.


1–3. Horan, C. (2017). The future is algorithms, not code. [Blog] Hacker Noon. Available at: [Accessed 28 Nov. 2017].

2–4–5. Fuller, M. (2008). Software studies. Cambridge, Mass.: MIT Press. (Respectively on pages 17 and 19)

Francesco Imola is a London-based musician, weekend photographer, and current Sound Design student at the University of Greenwich.