A Manifesto, or maybe just a musing
Code is so much more satisfying than conventional writing- words given life- not the passive, dull, glow of associated meaning, but rather the vital active energy of mechanism. Code is the idea writ large yet inscribed on the incomprehensibly small- words of fire in a very real sese, shaping flow and structure, pattern and process.
Words on a page are dead things. However powerful their meaning may be, they are themselves lifeless. The words of a program manipulate their own substrate, changing their environment in keeping with the crystalized will of the programmer. To claim that programming represents a disspassionate and outdated form of the Cartesian mind/body duality is to mistake the metaphor for the machine- to read “good” and “evil”, “body” and “spirit” where there is only the 1 and the 0.
Coding is both more subtle and less rigid. A far more accurate and appropriate way in which to view programming is the endless interplay of dualistic entities – the temporal arrangement of active/passive, on/off, yin/yang in order to form complex structures out of a primordial sea of bits.
The key revlation of binary math and logic is not that it necessitates overlaying a discrete “yes” or “no” onto every aspect of reality, but rather that it allows for aspects of reality to be desribed as an alternating sequence of “yes” and “no”.
Almost all belief systems incorporate the concept of the interplay of opposites as a generative force – masculine/feminine, light/dark, heaven/earth, eros/thanatos. Judeo-Christian mythology stands in contrast, formed around a destructive interplay between good and evil. Programming, however, is the ultimate realization of the creative duality. The history of computation can be viewed as the ever-increasing application of binary logic to greater realms of human endeavor, both in the creation of form (audio, graphics, 3-dimensional modeling) and its explanation (modeling of natural phenonmenon). In every case, all aspects of the system, both in content and context, are represented by nothing other than an ordered list of bits. To shape those bits is to create form from the formless. The individual bits are never created or destroyed (deleting a bit is akin to blinking an atom out of existence or, more metaphysically, killing death), but merely ordered. Even ordering is not quite right- a bits, at any given momment, occupy one of two states, and is likely to change that state numerous times as the program runs. If a program was to be slowed down and the bits made visible, it would look like the progression of a game of go- a matrix of unchanging positions that nevertheless give rise to complex and meaningful pattern.
Programming is far from the dispassionate, souless, conquering force that it is so often portrayed as. To label it as such is equivalent to saying upon encountering a hammer that it must be a weapon, for it is clearly designed with violence in mind. And yet a hammer, since it occupies and participates in physcial reality, has certain uses and affordances regardless of the narrative we choose to overlay. Programming is the same. Virtual tools are tools nonetheless, and the fact that code may exist in a medium slightly more malleable than those humanity has shaped for the past few millenia makes it no less suceptible to the laws of physics. And whatever meaning we choose to give merely provides a metaphor for those laws.
The application of metaphor is such a natural process as to render it almost impossible to avoid. Metaphor traps, metaphor simplifies, metaphor sets up a barrier between what we experience and the conclusions we draw. And yet, we seem hard-wired to enforce upon reality a plot, with ourselves cast as the protagonist. If it is impossible to avoid applying metaphor to reality, then one must apply mutally contradictory metaphors, viewing the topic at hand first from one and then the other, switching perception rapidly in order to dimish the import of both.
So if code is not the cold, cruel, oppresive force that it is so often portrayed as, but instead something else, what is it? Nothing. Simply 1s and 0s endlessly repeated in a context that render them impossible to read. But at that, the mind reels, and demands a more satisfying explanation- a more substantial context. If it is accepted that all metaphors are false, all narratives misleading, then what remains is to choose the particular manner in which one wishes to be misled.
Rather than choosing a constrictive metaphor in the illusion of being somehow “truer to reality”, one may opt to choose an expansive metaphor that leads to a higher degree of creative exchange. Instead of the programmer as technician, one can choose to view the programmer as shaman.
Extreme? Perhaps. Misleading? Certainly. But, while there is much math in programming, there is even more majik. Forget for a momment all of the connotions of code, and look at the process itself...
Out of a sea of chaos (unordered bits), a structure is formed via the application of will and the invocation of specialized words and phrases. From that, any number of effects spring forth, some even under their own power (web spiders, genetic algorithms, etc).
What is programming but a reconfiguring of the Pygmalion myth- the generation of a work that, lovingly crafted and imbued with a spark (either from the Gods or GE), thereafter stands on its own. Once a program is made, it has a life of its own. It can be interacted with (by the programmer or by others), but remains a closed entity. Further changes require destroying the program as it is and re-making it – wiping the words from the golem's forehead and gathering fresh mud.
The notion of the programmer as magician is niether new nor novel, but it is most often employed to stress the gulf of separation between those who are savvy and those for whom digital technology (with programming taken as the most arcane example thereof) remains shrouded in mystery. The mage achetype is therefore leveled at programmers in much the same way that “ivory tower” is leveled at academics, in order to emphasize differences and imply aloofness.
But contrary to such, programmers are made, not born. Relating to code on a more aesthetic level can serve to break through the assumptions that can too easily guide ones thought process and lead to a pratice that is simultaneously logical and mythological, comprised of both type and archetype.