Picture Emily Dickinson standing in a window in Amherst, gazing out at nineteenth century America, trying to figure out how to phrase her latest poem. Now, fast forward a century and a half. Picture a computer science undergraduate at Amherst College churning out hundreds of lines of code at four in the morning, fueled by an almost manic energy derived from coffee and energy drinks in order to finish their degree. It would seem that these two scenarios are dissimilar similar, and in part this is true. However, while at first glance Emily Dickinson’s poetry and computer programming seem to have nothing in common, they do share some common properties and themes.
One of the common properties shared between programming and Dickinson’s poetry is the use of symbols to represent ideas. One common theme throughout Dickinson’s poetry is the use of the dash to indicate a break. An excellent example of this is in her poem “Come slowly - Eden!”:
Come slowly - Eden!
Lips unused to Thee -
Bashful - sip thy Jessamines -
As the fainting Bee -
Reaching late his flower,
Round her chamber hums -
Counts his nectars -
Enters - and is lost in Balms.
The dash is used in this poem to indicate a break and effectively fragments the poem into discrete elements. The dashes provide a unique reading experience, and it is possible this is how the poems would be read aloud. In most programming languages, a similar construct is used. Consider this simple program in the C++ programming language:
#include <iostream>
#include <string>
int main() {
std::cout << “hello, world!\nwhat’s your name? ”;
string name;
std::cin >> name;
std::cout << “hello, “ << name;
return 0;
}
Here, the semicolon is used to break up the program into individual lines so that it can be processed by the compiler into assembly and eventually a binary image. Another similarity is the use of the symbol. In C++, the semicolon only sometimes used in accordance with the constructs of the language (only to be used after statements, definitions, and calls but not after preprocessor directives). In Dickinson’s poetry, the dash is used to break up the poem into exclamatory segments.
Another way that Dickinson’s poetry is similar to programming is the concept of subtly hidden complexity. This is the notion that on the surface poems and programs alike appear simple, but can reference incredibly complicated concepts. The first stanza of Dickinson’s poem “I know that He exists” demonstrates this complexity:
I know that He exists.
Somewhere - in silence -
He has hid his rare life
From our gross eyes.
Here, Dickinson uses references to faith and God to proclaim that even while God has gone into hiding from the human race, she remains convinced of his existence. This is obviously a nuanced topic, as many scholars have differing opinions. It calls to mind images of churches, spirituality, and faith. Similarly, a short program can call into action an incredibly complex process. Consider this short chunk of HTML:
<html>
<head>
<title>Example essay website</title>
</head>
<body>
<p>please send help it’s five in the morning</p>
</body>
</html>
This relatively simplistic code defines a simple web page with a title and a paragraph element. When you navigate to this site, a chain of events are kicked into motion. Your processor begins screaming away at billions of cycles per second frantically running the XNU kernel, which in turn is churning through the POSIX spec-related abstractions to create the Darwin system, which in turn is running OSX. OSX in turn is rendering the WebKit engine, which is being controlled by Chrome, which is also controlling the network card (through OSX) in order to download the page. Once it downloads the page, it steps through the file and builds a document object model (DOM) which is passed through WebKit where it is transformed into a renderable object. This object is passed to the GPU along with some drawing information which draws it to the screen. All of this is referenced in those eight lines of code.
One area where Dickinson’s poetry and programming languages differ greatly is the flexibility of their interpretations. In Dickinson’s poetry (and in many other poet’s poetry), a large amount is open to the reader’s interpretation. Consider Dickinson’s poem “ ‘Faith’ is a fine invention”:
“Faith” is a fine invention
For Gentlemen who see!
But Microscopes are prudent
In an Emergency!
This poem is open to interpretation. Is she referencing some scientific event? Is she talking about the practice of ignoring reality for faith? It is up to the reader to decide. On the other hand, programming leaves little room for interpretation. Computers are notorious for doing exactly what they are instructed to do, leaving many users wishing for a “do what I mean, not what I say” button. Computers, and particularly compilers, will completely fail when dealing with unspecific input or undefined behavior, often refusing to work at all in the presence of these conditions.
There are some (albeit few) similarities between computer programming and Dickinson’s poetry, however, the differences far outnumber the similarities. Poems rarely control robots and drive cars, while programming does both. On the other hand, poems can control people.
I found the connection you drew fascinating; I never would have thought to compare programming and Dickinson's poems. I found your second body paragraph especially interesting. It is awesome how both poetry and programming can appear simple, but are in fact extremely complex. When you started detailing all that the seemingly simple HTML code puts into action, I was completely lost, but totally intrigued.
ReplyDelete