DOVETAILING DETAILS FLY APART—ALL OVER, AGAIN,
IN CODE, IN POETRY, IN CHREODS
Stephanie Strickland and Cynthia Lawson Jaramillo
Poetry and code—and mathematics—make us read differently from other forms of writing. Written poetry makes the silent reader read three kinds of pattern at once; code moves the reader from a static to an active, interactive and looped domain; while algebraic topology allows us to read qualitative forms and their transformations, both those written by available pathways and patterns and entropy budgets, [1] and those we conjure out of 'nothing'.
READING LINES
Code and poetry, both, are read in end-stopped lines as short as one word. Both give rise to various visual fields on the page and are exquisitely sensitive to what happens between incremental bits of themselves.
The bit, in code, is a unit of information having just two possible values, 0-not-1 or 1-not-0. All meaning derived from code is controlled in an unambiguous line of instructions directed to manipulation of those bits and their physical correlates, usually gates allowing electrical current to flow or not. What is multivalent and flickering in code emerges from its being read, simultaneously, by many entities. For code to be read is for it to come 'alive', to run, to work, to do something. This coming alive is called 'execution'.
By contrast the 'bit' in poetry is notional and elusive, an effect occurring at one exact moment, which can be felt or performed, though not necessarily repeated. The meaning that emerges from silently read lines of poems draws from three realms which are always operating on each other.
an ever-fixed mark / a never-fixed mark
The first of these realms is that of graphemes, the written-down part, which crucially includes the blank-that-imposes-separation. It marches to the right (in English), striving for or against accomplishment of a sentence. The second realm is the echoing space of the road-not-taken, more particularly the words or locutions not chosen from all those potentially suggested by tradition, training, habit, or the unconscious, which haunt the choice actually made on the page. The third realm is the sounded part created by the silently reading body, the sound provoked by a written line of poetry in the mind's ear of the passive non-performing reader.
mind's ear / mind sear / mind seer
This silently reading body very often understands a phonic text at odds with the graphic text—a text-at-odds that must be silently heard to be believed, to make its modifying impact on the understanding that the written words would aim to deliver. Garrett Stewart [2] on whose critical study, Reading Voices, this paper draws, refers to this as the air/ink difference: a difference marked clearly by ink, "I scream," but happily confused and enriched by the ear as, also, "ice cream."
At odds with the plain vanilla syntactic written meaning (itself, of course, not necessarily unambiguous), the phonemic text can function to enforce, or to counter, to embroider or to complicate the graphic text; but in all cases operates as a supplement to it, a third axis of meaning enriched or suppressed, concurrent with the intended meaning of the parsed syntax and the echo chamber of non-chosen but familial or wished-for alternatives. As Stewart says, written one way, but silently spoken in a particular mind's voice, text gives up its double or gives out at its borders. Lexical integrity, syntactic contiguity, and segmental demarcation all, in his phrase, fray and reweave. [3] This phonemic text-at-odds can be caused by design and will be caused by chance, those two forces always in play.
She it is Queen Under The Hill
whose hosts are a disturbance of words within words
that is a field folded.
—Robert Duncan [4]
Inter-bit sensitivity then, in the silently read poem, leads to an overflowing richness of effect, a superabundance that carried to any extreme tends to undercut the possibility of any assigned meaning. It also enforces a circular or oscillating rhythm for reading, because the assumptions made on beginning a line need to be revised, rethought, re-resonated, and re-understood as the poem proceeds.
In metric poetry, this counterflow is even more strongly engaged, because, as poet Douglas Oliver [5] points out , to relate musical flow to musical change—whether by accent or measure—one needs a notional instant inside the syllable at which all forces of change concentrate, a point-like moment crystallized in the so-called 'stress'. To arrive at it, one must both post- and back-date much information onto that moment, and each reader will do it differently.
Whereas a silent reader can process four or more simultaneous variants, of the sort Emily Dickinson made explicit with her +/annotation system, a performing reader or actor commits to a particular interpretation influenced by performance technique. The surety of the performer's sense of beat or stress contrasts markedly with the theoretical difficulty in fixing a stress point on the page, for it is not written into the line but occurs in the sounding of the word within a full and ambiguous set of contexts, ranging from adjacent letters to whole poem. Rhyme, also not a written feature, contributes additionally to the vibrational undertow, stacking in the mind's ear, exerting vertical and backward pulls even as the poem goes forward.
foreward / forward / four-word / fo reward
Many more possibilities for inter-bit sensitivity are controlled by code than can be controlled by natural languages. Only some 6000 of these survive, 3,000 of which are liable to be lost in the next 100 years. [6] According to oral literature scholar, John Miles Foley, "...we human beings have produced only about one hundred true literatures over the entire course of our history, anywhere on the planet. That is, as a species homo sapiens has created only about one hundred situations in which a literary tradition of individual authors, the craft of text-making and -reproduction, and a mass readership have combined to support an ongoing, self-sustaining literature. Of languages spoken today, the count is even lower: seventy-eight...." [7]
By contrast, computer languages are constructed at will. An O'Reilly poster timeline [8] includes fifty of the most used from among the more than 2500 documented through 2003. These languages can achieve popularity quickly, as the open source language, Processing, [9] shows. Their great strength is to write commands; that is, to write behavior, to write control, to write simulation. They are able to model enormous numbers of interactions simultaneously, but to do this they have to produce very long and complex texts. As with any complex system, emergent phenomena may arise. A single change in a very long program can completely deform the output. [10]
Further complexity is introduced by the fact that the full processing of code requires more writers and readers than does print poetry. Between the coder and the displaying screen output many players (human and not) intervene. The rolling credits for Adobe Director, for instance, one of our programming environments, list some 150 persons responsible for its creation, beginning with Engineering Management headed by
Grace Gellerman, Program Manager and Diva of the Details.
Her Development Engineering staff included, for instance,
Ming-en Cho, as herself,
Derek Chung, Development Engineer,
Venkatachalam K, Engineer,
Kraig Mentor, Accessibility and some neat buttons,
Sobin V. Thombra, Mac Evangelist,
and
Darryl Trujillo, Software Spiritualist.
Contrasting with these vibrant names and self-descriptions is the name of the copy of their program, DRM900-02220-67204-19336, that executes code on our machine. DRM reads the code we write, the code written by Diva Grace's team, and the input sources or data (video of moving water) driving our work.
The 'reader as commonly understood', the person visiting the installation or screen where the work is running, depends on all of that prior reading and also a current reading of the program by her machine and by another set of communal standards and protocols written and maintained continuously by the World Wide Web Consortium group. [11] To address this reader, the coder must maintain a constantly shifting network awareness, of browsers, platforms, software releases; an awareness of the current state of all constraints that will ultimately affect the code, aware of the state of all its readers; and still an inevitable gap remains—for instance, knowledge of the state of resources on the user's machine.
For a traditional poet, there is a comparable need for awareness of historical, etymological, dialectical, regional, class-based, craft-based and musical aspects of speech and writing. Most poets begin with their mother tongue. Exceptions occur if they are natively multilingual like Gertrude Stein, or have chosen the language of their non-native home, like Beckett in French, or are writing in an ambivalently hated colonial tongue they aim to change from within, like Kamau Brathwaite or James Joyce. But a programmer chooses a language like a composer chooses instruments, for the things it does well or quickly, for its affordances, those fundamental properties that determine just how a thing could possibly be used. The code will only go as far as the programmer pushes it. Expert coders attain effects that artisan coders marvel at, not realizing until then that such work could be done in that particular coding language.
READING LOOPS
People think of going forward in reading poetry, but the very turning of the line is in constant conflict with that goal, as are the triple realms contending for meaning. Neither poetry nor code proceeds by forging ahead.
The machine reads code line by line, all in one frame or on one long page. Code is thus not like video or film frames, even though it can be used to simulate them. As the machine reads, line by line, it may be told to jump its reader somewhere else temporarily before returning to its departure point (as rhyme does, too, in another way). Although the machine reads line by line, all of its reading happens within loops. The largest loop is the 'life' of the program, an infinite loop during which everything happens. That 'everything' is either a block of code, another smaller loop, or a conditional series of instructions.
Object-oriented programming, in addition to jumping, looping readings of the code, has the computer perform a pseudo-parallel series of instructions. A condition in one line of code will trigger a conditional block inside an 'object' (a closed 'black box' of code-plus-data). There will then be multiple places in the code that are being read at the same time—as many places as there are 'objects' listening and waiting for that condition to become true. However, parallel actions can only truly be parallel in a machine with more than one processor. This raises the interesting issue of human perception of machine delays. What may be a quite significant delay in executing code can be imperceptible to the person at the interface.
This imperceptibility is referred to as 'transparence'. Interfaces called transparent allow us to interact/do what we're supposed to do without being aware of how the effects are obtained. We should perhaps speak instead about their opacity, given that we cannot see through them to the machine.
serpent's tongue / serpent stung
It is this transparence (or opacity) that allows a reader to see/hear multiple layers onscreen without considering that this layering is not allowed by code. One cannot program two lines of code and have them run in parallel, which of course the written line of poetry does do, summoning its graphic and sounded aspects together. To do this in code, two lines need to be coded, and called, from one other distinct point in the program so that they can run in (pseudo)parallel.
Though we have spoken, indeed, metaphorically of the 'life' of the program, it is not only metaphor. Mind enters world, not contained within skin, but as a circuit-loop feedback operation. [12] The living, and all living functions, are indissoluble from information-driven environmental loops which alone serve as units of survival. Animal mind, protected from 'real' impact by the physical world, negotiates its circuits by abstract, non-physically locatable, information.
silent speaking / silence speaking
As Gregory Bateson explains, the difference between white and yellow paper, say, is not in them, nor in the space between them, but in the time between them—not their time, our time, our interaction time, our scan time. The eye rubs the world, scanning, and detects a difference, "a bump in time ." [13] Mind works with this news of difference which is one derivative, one dx/dt, away from the signal-emitting world. Thus, to think in loops focused on digital differences, i.e. to code, is to do the writing that sustains the 'life-like'. Its distance from the 'real' does not in that respect make it different from animal mind in its primary (air-linked, water-linked, prey-predator, etc.) circuits.
Despite our belief in the aptness of the 'life' metaphor, it is also the case that programming code is tied to technology and is therefore characterized as either functional or broken. A block of code is broken if its lines are not written following a highly structured, language-dependent, syntax and system.
Several layers of language can be used to write code. The lower-level languages are closer to direct machine instructions and the higher level languages are closer to English. A high-level language, such as Lingo, permits the coder to take one less step of translation between thinking and writing. It should be noted, however, that since most programming languages are developed for English-speaking environments, learners of code find high-level languages easier only if they speak English—otherwise, according to our non-English speaking students, the learning curve for higher and lower level languages is equally steep.
just man justices / just man just is, is
As with poetry, syntax is not enough to keep code going. When code is compiled, it is read through by the compiler and checked mainly for syntax mistakes, but it is only in execution (the behavior, the running, the performance) that the programmer can tell if the code written is, indeed, accomplishing its intent. Only the original coder will be able to judge this, as the code may quite effectively be doing something else. It is the goal-oriented approach with which code is developed that ultimately drives a system of envisioning-thinking-writing-compiling-executing.
However, it is also possible to write code that will compile but not actually do anything, as well as to write deliberately obfuscated code. The simplest form of this is the empty loop—which can take up to 4 lines of code, will compile and execute, but will produce 'nothing'. These possibilities introduce an ambiguity into code and with it a trouble-shooting challenge.
impetuous one / you us one
Given someone else's code to expand or correct, the first thing a reviewer will look for are the comments alongside code in order to learn the originator's intent. Reading through code usually does not offer the logic with which it is structured; for this, there is an in-between language commonly referred to as pseudo-code. It is the highest of the programming languages, yet it has no compiler nor executor. It is usually the first language learned by a programmer-in-training, because it permits her to describe logic without worrying about syntax, since it will not be read by a machine. Pseudo-code can be shared between programmers, because it is in English. It is not just a tool for one language, but a tool to expand the notion of programming. Just as experienced writers may not write an outline before starting to type, programmers with many years of experience rarely write in pseudo-code. Their insights are translated into the comments which allow them to remember what is meant by that specific line, or block.
sense sure you have / censure you have
If code is being read to be understood, coders need to follow the general structure of the program. They first examine the code that sets up the program, the choices made in deciding on the borders of 'objects'; or in selecting variables, parameters and dimensions; or constructing composite entities. Next, they identify the main loop by discovering what actions are happening on every cycle the program runs, every time it 'breathes' or loops; and, finally, they step through subroutines within the main loop. Good coders will use naming conventions that clearly define what a variable is being used for, or what a sub loop should do, in order to help with this process.
After understanding the structure of the code—where it starts, how it continues, and its ultimate goal—it is necessary to have some understanding of the language it is written in to be able to identify if it is written correctly. The code-reader, as compiler, can have the capacity to know if loops are really producing what is intended or maybe just 'nothing'. Reading here becomes virtual compiling and executing: compiling to check for syntax structures and executing to understand the logic behind the code and to ascertain if it is correctly thought out.
That process contrasts with the way coders, or others, look upon, or read, the displaying content of running code. If that content includes text, as in a text machine or piece of digital literature, very often the first impression is not of text, but of visual design, including evaluation of tone. Only then does the text provoke the questions: What is it about? Who wrote it? Do I need to respond? Do I respond regardless? Am I supposed to interact? How? Is it clear? At this level, of the transitory textual display, the human reader's mind's eye/ear is doing 'word processing', just as is the silent reader of poetry lines. In lines on the page, one attends primarily to the work of the space bar, as it enforces turns of verse and inter-word spacing; online reading requires more attention to the cursor, as a "pace bar." [14]
Yes I said yes I will Yes / Yes sigh said yes sigh will Yes
In making a piece of software, one is part of a system. The system functions and—regardless of content—signifies, through the actual processes of coding. Even if code does 'nothing', there is still a lot happening—writing, reading, compiling, executing—that expends machine time and energy. Such signifying is supplementary to the content with which it may or may not be at-odds.
Generative art forms provide another kind of richness. Cycles of actions, like loops in coding, create certain patterns that are often easily identifiable, and this is the case with non-programmed generative art like Sol LeWitt's wall drawings. Code-based generative art can run infinitely, allowing a viewer/reader to find those patterns, cycles or loops. As with reading code, it is much easier to find the larger structures, which are being repeated, and much more complex to understand what coding structures are driving the smaller actions, the subroutines. In work based on cellular automata, like John Conway's Game of Life or Stephen Wolfram's patterns, the generating pattern and rules are remarkably simple but with remarkably complex output displays. They require the extremely long time, or extreme numbers of cycle repetition, obtainable only with code-written processes.
Coding forces us to experience the notion of cycles, the sense that things will not 'run' if they are not in a cycle. A program written for a micro-controller may warn against infinite loops; however, for an interactive art installation, it is important for a machine to be continually/infinitely 'listening' for interactions, which the piece will then respond to. It is the infinite loop that makes the machine able to react to human choice and to movement unpredictable in either space or time.
It is the role of the artistic coder to question the coding languages, both through self-reflection and by using them for unintended purposes. These coders introduce multiplicity where none existed and challenge definitions of intent for the entire environment of programming language, machine and system.
freer agent / free reagent
A coder of language-based work has additional constraints. Assumptions about language presentation, from typography to context, determine coding decisions. For instance, timing to present text is very different from that used for video or image. If we want a viewer to read text, we must consider layered temporalities in which the detail of the detail can begin to resonate. While it is the human reader who brings reading tempo to both printed and onscreen reading, it is the machine that sets the tempo in code. Machine-based pauses or delays will function differently on computers with different processing speeds or slower internet connections.
Code is meant to control time. Animations and interactions would not exist without scripting of time. Coding, without time, is esoteric language on a page, unable, unlike page poetry, to unfold itself to the unwired reader. Time differences ultimately undergird the entire writing-compiling-processing system.
Code is written for a purpose. In rare instances, Brad Paley's CodeProfiles [15]or Eric Forman's Branch/ing, [16] it is written for the sole purpose of its own display. Its use for digital arts is still a rare occurrence, and in these cases some artists make their own software, [17] rather than using a commercial product. Both code and poetry are used mainly to create something that doesn't otherwise exist; but code is also used to optimize performance, or to fix what has become broken due to a modification in one of the elements of the system to which the code belongs.
Code-running is code-read; it is analogous to poetry lines silently-read and performed at the same time, an impossibility for one person. As code runs it writes over itself (unless it is intentionally self-displaying). Code covers its tracks much as consciousness does. Once running, one sees not how it was coded, but what it was intended to do. The actual coding decisions are lost in the final execution-performance: control has been turned over to the readers, again in analogy with written poems. It does not matter whether the code is ideally optimal, or well-commented. What does matter is if it 'makes sense' with respect to the system it is part of.
READING CHREODS
Chreods are a certain kind of loop in the physical world. Some dynamical systems return, not to their same state, but to their 'same flow', reestablishing their pattern, manifesting stability within change. By 1940 the biologist C. H. Waddington had coined the term homeorhesis [18] to describe that behavior in developmental systems, along with the related term chreod, meaning 'necessary path', which is the trajectory to which the system tends to return.
Chreod, as defined by Waddington, was taken up by the mathematician René Thom in his book, Structural Stability and Morphogenesis. Thom affirms the pre-Socratic flavor and informational strength of qualitative dynamics. He uses topology to present qualitative results in a rigorous way. His chreods provide a language of and for transition, a figure for movement designed to aid the intuition of the global coordination of all the partial systems controlling transformations. His "object of study [survival]...is not the isolated individual but the continuous form in space-time joining parents to descendants (the regulation figure)...the union of all the forms associated with each species." [19]
the ear heretical / theoretical
Thom extends his thought about matter to language. For Thom, all creation or destruction of forms can be described by the capture of one set of attractors by another. The set of chreods and the multidimensional syntax controlling their positions constitute his semantic model: "When the chreod...is considered as a word of this multidimensional language, the meaning...of this word is precisely that of the global topology of the associated attractor (or attractors) and of the catastrophes [transformations] that it (or they) undergo." [20] As with the cellular automata patterns, this is not a process that print words alone effectively convey.
Thom quotes Paul Valéry, "Il n'y a pas de géométrie sans langage [There is no geometry without language]." And then replies, "it is no less true...that there is no intelligible language without a geometry, an underlying dynamic whose structurally stable states are formalized by the language...the structurally stable attractors of this dynamic give birth to symbols of the...language." [21]
The videographer Paul Ryan, an ecological activist, videotapes chreods. Our digital poem, slippingglimpse,[22] incorporates Ryan's videos of coastal chreods. In slippingglimpse, the water reads the poem text, the poem text reads image/capture technologies, and Ryan's image capture technology reads the water.
Reading chreods in the spaces of 'network topology' is in some ways like the silent reading of poetry, giving rise to unspoken but experienced spaces of various transversions. We believe it is possible that an expanded sense of 21st -century reading, that is, an expanded appreciation of the resonance in lines of poetry, loops of code, and chreodic patterns, can develop into a practice that allows us to 'read'—and choose among—our generating futures. These are presently read mainly in data and the data displays of scientific visualization. We feel our possible futures need a broader audience, one that can be both warned and heartened, as were people of old by their reading and hearing; an audience themselves equipped to disclose and generate possible futures and, from these, find and choose a life-sustaining necessary path.
And if after so many words,
the word itself does not survive!
If after the wings of the bird,
the standing bird doesn't survive!
—César Vallejo [23]
NOTES
[1] Bateson, Gregory 1991, A Sacred Unity: Further Steps to an Ecology of Mind , ed. R. E. Donaldson, Harper Collins, New York, p. 201.
[2] Stewart, Garrett 1990, Reading Voices: Literature and the Phonotext, University of California Press, Berkeley and Los Angeles. The variant phrases inserted between paragraphs of this paper are largely taken from Stewart's book.
[3] Stewart, p. 4.
[4] Duncan, Robert 1960, "Often I am Permitted to Return to a Meadow," in The Opening of the Field, New Directions, New York.
[5] Oliver, Douglas 1989, Poetry and Narrative in Performance, St. Martin's Press, New York, p. 99.
[6] http://en.wikipedia.org/wiki/Endangered_languages
[7] Foley, J. M. 2002, How to Read an Oral Poem , University of Illinois Press, Urbana and Chicago, p. 25
[8] http://www.oreilly.com/news/graphics/prog_lang_poster.pdf
[9] http://www.processing.org
[10] Mandelbrot, B. B. 1983, The Fractal Geometry of Nature, rev. ed., W. H. Freeman and Company, San Francisco, compare plates 69 and 293 on p. 69 and p. 293
[11]http://www.w3.org/
[12] Bateson, p. 165, 199-202, 261.
[13] Bateson, p. 189, 201, 273.
[14] Stewart, p. 22.
[15]http://artport.whitney.org/commissions/codedoc/paley.shtml
[16]http://www.ericforman.com/assets/installations/branching/branchVideo-m.html
[17] Jim Andrews, Nio, http://www.turbulence.org/Works/Nio/; Jim Rosenberg, Barrier Frames, http://www.well.com/user/jer/j/barrier_frames_4.html
[18]http://en.wikipedia.org/wiki/Homeorhesis
[19] Thom, René 1975, Structural Stability and Morphogenesis: An Outline of a General Theory of Models, trans. D H. Fowler, Benjamin/Cummings Publishing Company, Reading, Massachusetts, p. 281.
[20] Thom, p. 320-321.
[21] Thom, p. 20.
[22] http://www.slippingglimpse.org
[23] Vallejo, César 1980, from "Poem 75" in The Complete Posthumous Poetry, trans. Clayton Eshleman, University of California Press, Berkeley. |