#include <iostream>
int main()
{
std::cout << "Hello World!\n";
}
In software programming, “Hello, World!” is a descriptor for an introductory tutorial. A “Hello, World!” program, by its nature, is suggestive. It is prescriptively simple and must not take up too much space or time. Because of this constraint, it seemingly cannot accomplish a great deal.
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
At the same time, in its revealing of the core grammar of a language (or a development tool, service, software platform) it lays down the fundamental structure for all things that can be created in that language. It is an ur-pattern that suggests possibilities and is designed to confer upon the tutored a new competence/power/status upon successful completion of the tutorial.
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php echo '<p>Hello World</p>'; ?>
</body>
</html>
While it is tempting to call it a meme (in the contemporary, frivolous sense), “Hello, World!” is in fact a ritual that follows a strict set of ceremonial practices. For instance:
The phrase “Hello, World!” must be uttered in some form during the performance of the tutorial. It cannot be omitted.
The actual code can vary in form from “Hello, World” to “Hello World!” tutorial, but in whatever form it manifests itself it must always be brief.
The saying of the phrase “Hello, World!” must temporally be at the culmination of the rite. It cannot occur at the beginning or in the middle of the ceremony.
The initiate cannot merely watch the ritual, but must actively perform the ritual along with the author of the tutorial in the exact way that she performs it.
The phrase “Hello, World!” must never be uttered by the tutor or the initiate themselves. It is given over to what is created through the ritual, which we call the program, to utter the phrase upon its birth into the world.
The performative aspect of the tutorial is a rite of passage. Upon the birth of the program, the initiate may call himself a coder of language X, but not before that moment. The initiate achieves this privilege through the act of parenting the program, i.e., by being its programmer.
Like many rituals whose purpose and logic we have misplaced, such as the carving of the Halloween pumpkin or the tying of a string around one’s finger to remember, “Hello, World!” often serves merely as a crutch. Not knowing how else to start, a tutorial writer will naively throw together a “Hello, World!” app and push it out to GitHub because that’s what one is expected to do— and because it seems like a lot of trouble to try to originate some other pedagogic regime for an introductory tutorial. As a consequence, the inner meaning of “Hello, World!” is buried and must be excavated if we are to recover whatever is of value in it.
The Naïve Textualism of “Hello, World!”
Our inability (or unwillingness) to move beyond “Hello, World!” forces us into a lingering devotion to textualist paradigms, as if the GUI and NUI revolutions never happened. To take an extreme example, in visual programming platforms like Unreal Engine and Unity, it makes very little sense for the developer to print text.
Printing text in Unity is surprisingly involved. The task requires coders to import the TextMeshPro package, understand the Canvas game object and Text component (which confusingly has a Text.Text property), and familiarize themselves with the additional attributes of the Text behavior such as font, width, alignment, anchor position, font style, font size, wrapping, font shader, color, texture, outline, and kerning, to name a but a few.
UnityEngine.Debug.Log("Hello, World!");
A shortcut to brevity when designing a Unity “Hello, World!” example can be accomplished by logging a message to the console window — but this only highlights the incongruity between the traditional “Hello, World!” app and the contemporary tools we use to build software. Writing to the console window of a game engine’s IDE tells you virtually nothing about how to program a game in Unity.
my_string = "Hello, World!"
print(my_string)
Even enterprise software platforms don’t have much use for raw text these days. In building a UWP or a WPF app with .NET, writing out text is tedious. Placing text on a form typically involves dragging a TextBlock component from your tools window into the form and then typing text in the properties panel. This sort of activity is to coding what a translation phone app is to learning a foreign language.
The lingering nature of the textualist paradigm is most clear when one considers Microsoft’s Console App. When you open up Visual Studio, Microsoft’s software development IDE, you are given the option to create a new project from several different project templates, one of which is the Console App template. What is it used for?
Console App appears to be an artifact of the text-based era of software programming that is kept around for no other reason than to allow potential developers to write sample applications to demonstrate simple language features. In other words, the primary purpose of the Console App—and its prominent place in the list of default project templates—is to allow developers to write “Hello, World!” tutorials.
Yet even for this narrow purpose it is a poor fit. Modern tutorial practice is to follow along with a tutorial inside the IDE or in a sandbox. If you write a “Hello, World!” console app and F5 to run it, however, the IDE will pop up a command window, print out the specified text, and then suddenly close the window before anyone has time to read what was printed. The tutorial author is consequently obligated to instruct you to write
Console.ReadLine();
in order to keep the command window open, a bit like a door jam, so the initiate can read the output—even though this method is extraneous to the program itself.
ReadLine is essential for the tutorial, however, because no one who uses Microsoft Windows these days compiles a console app, opens a command line, navigates to the target folder and runs the executable when they can simply run it from the IDE itself. Consequently we are trapped in a vicious circle in which we repeatedly mangle (ReadLine) a vestigial programming template (Console App) in order to preserve an outmoded textual paradigm (“Hello, World!”) in the belief that this is the proper way to inculcate good coding habits in new generations of developers.
A provisional interpretation of the structural role of “Hello, World!” in the community of coders may be offered at this point. “Hello, World!” is a rite of passage that a generation of coders who gained their skills in a period between 1980 and 2000—which is loosely the period that demarcates the rise of the personal computer—associate with learning to program. Because ‘knowledge is power’ is a truism for a generation of smart amateurs that achieved substantial material success through teaching themselves to code, the passing on of this power to successor generations is a matter of great importance which encompasses an ethical dimension. Without knowing precisely what the right way to pass on the power to code is, that generation has instead settled on a rite way to pass on the power to code.
The roots of this attachment to textualist programming in the 80’s and 90’s, coincidentally, corresponds with the rise of textualism in U.S. philosophy and literature departments at about the same time. For Jacques Derrida, Michel Foucault, and a generation of academics who adopted their viewpoints and methods, texts are the proper object of philosophical reflection and there is nothing outside of texts. According to the rules of this particular brand of post-structuralism, there is no author, there is no authorial intent and there is no world beyond what is available in the text itself that can be legitimately used to interpret the given text.
The possible relationship between an inexplicable attachment to textualism in the coding world and the inexplicable success of textualism in the philosophical (and later right-wing jurisprudential) world isn’t something I can fully explain in this introductory essay. It is something we will continue to explore together over the next several months, however, as we excavate the philosophical underpinnings of software code as well as the codes that are embedded in contemporary philosophical, critical, and legal theories about our world.
For a deeper treatment of the conflict between textual and visual programming, please read Neal Stephenson’s In the Beginning Was the Command Line.
The Secret Meaning of “Hello, World!”
”Hello, World!” is like a foreword, written by a coder to a potential coder, that is unnecessary in itself, but at the same time offers to the potential coder the promise of vast power if they follow the ritual steps of “Hello, World!” in the prescribed manner for the prescribed purpose.
As Derrida writes in Dissemination,
From the viewpoint of the fore-word, which recreates the intention-to-say after the fact, the text exists as something written--a past--which under the false appearance of a present, a hidden omnipotent author (in full mastery of his product) is presenting to the reader as his future. Here is what I wrote, then read, and what I am writing that you are going to read. After which you will again be able to take possession of this preface which in sum you have not yet begun to read, even though, once having read it, you will already have anticipated everything that follows and thus might just as well dispense with reading the rest.
This dynamic between the coder and the codee is always fraught because the coder knows he is not actually teaching anything of value in the tutorial while the initiate suspects this to be the case. The coder is giving nothing to the coding initiate. The codee will achieve no true mastery of the coding language, service or platform, that is purportedly being passed on.
But there is a third participant in this relationship that de-centers the inauthentic relationship between coder and codee. There is the program itself, which unlike the tutorial author or the tutorial learner, is the only participant who receives anything from the transaction between the coder and the codee. The program is gifted with the ability to say “Hello, World!”
In setting himself up as the being who grants the gift of speech to a lifeless object, the tutorial author takes on the signification of a creator God breathing life over the cyber-waters. In performing the ritual movements of the tutor, the coding initiate chooses to inhabit the myth that to code is to create life.
Over time (in real-time), the software developer eventually becomes a software architect and the virtual world becomes populated by autonomous AI—sophisticated descendants of the program. But the central mythopoeic act is incipient in that half-century old ritual of typing out the code that allows a program to utter a greeting.
“Hello, World!” is a fore-ward. But “Hello, World!” is also a pass-word. In creating one archetype of the coding world, the creator god, it also provides a space for the creator god’s archetypical shadow who constantly undermines divine authority and subverts its creations. When the program says its phrase, it has accomplished its purpose. It allows the power of coding to be ritually passed from master to disciple, after which it is disposable. No one ever goes back and re-runs an old “Hello, World!” program. They just write a new one.
In 2003, Jean Baudrillard wrote in response to Derrida,
Passwords—the expression seems to me to describe quite well a quasi-initiatory way of getting inside things, without, however, drawing up a list. For words are bearers and generators of ideas—perhaps even more than the reverse. As weavers of spells and magic, not only do they transmit those ideas and things, but they themselves metaphorize and metabolize into one another by a kind of spiral evolution. It is in this way that they are ‘passers’ or vehicles of ideas.
Creator gods give rise to tricksters: Odin had his Loki, Ra had his Thoth, and Zeus had Prometheus. While software architects design perfect systems, hackers, the tricksters of cyberspace, seek out the flaws in those systems. While the architect passes on his god-head to successors through “Hello, World!” tutorials, “hackathons” (during which nothing gets hacked) and brown-bag lunches, hackers attempt to siphon off some of this power for themselves. In classic mythology the trickster then passes this stolen knowledge/power to the forgotten children of the demiurge. Thoth gives humankind the technology of writing. Prometheus gives humanity the secret of fire.
The secret meaning of “Hello, World!” is that it is a carrier for both of these memes (in Dawkins’ original sense) through which coders understand themselves. Sometimes a coder is a creator god and sometimes a coder is a hacker. Sometimes “Hello, World!” is the teleological purpose of a program, a preface to greater things, and sometimes it is a magic phrase that a hacker stores away in order to unlock more power later—it is a means to future ends, rather than an ends-in-itself.
It is important for coders to understand themselves in one of these two ways because nobody else understands coders. Managers feel they can’t get coders to do what they want and can’t do it themselves. The C-level officers of a company resent their dependence on these very expensive “resources.” Finance tries to control coders by micro-managing and restricting their budgets, demanding that they work on premises (even though coders are the most equipped of anyone in an office to work remotely), and finding more and more intrusive ways to measure their code output, even though we all understand by now that measuring a coder’s output by the line makes no sense.
More than this, most people suspect coders of having great esoteric power but very little maturity. If you have watched any movie over the past two decades that involves computers, you would not be faulted for concluding that the typical database administrator who maintains your HR system at work can secretly hack into the Pentagon’s computer network but is too busy playing Tetris or Minecraft to actually bother.
This compaction of myth and reality in a single target, the HR database administrator, is an example of what Roland Barthes called The Sign. If you have encountered the widespread use of terms like “signifier” and “signification” in “discourse”, you can blame Barthes for that. Barthes was a culture critic who broke out in 1957 with his masterpiece Mythologies, which he described as having
…a double theoretical framework: on the one hand, an ideological critique bearing on the language of so-called massculture; on the other, a first attempt to analyse semiologically the mechanics of this language.
Here, a short introduction to the Barthean project is in order. Mythologies started out as a set of newspaper pieces taking up various aspects of culture. In particular, he took up the phenomenon of professional wrestling, which in France at the time, as in the United States today, is scripted. He wielded high-minded themes about dramatic structure and applied them to a low-brow entertainment, and in doing so inaugurated the academic passion for eliminating the constructed distinction between high and low culture.
More importantly, he showed that things we normally pass over without much thought, such as the world of wrestling, soap-powders and detergents, the face of Garbo, and the brain of Einstein, can contain deep social significance that tells us important things about ourselves.
When he put these columns in book form, he added a theoretical structure to them based on Ferdinand de Sausure’s theory of structural linguistics, which Barthes refers to as semiology. Barthes’ particular brand of culture critique became known as Structuralism. Today, Structuralism is mostly known as the occasion for another movement known as Post-Structuralism, spearheaded by Michel Foucault, which is sometimes conflated, by both advocates and critics, with Post-Modernism, a movement in literature which found its way into philosophy in the 80s.
But what stuck around was the notion that to be an intellectual required one to be cool in the way that Roland Barthes was cool, easily navigating one’s way between popular culture and high culture in order to find nuggets of meaning in either. In this sense, Post-Modernism and all subsequent -isms can be seen as simply different theoretical clothing on Barthean cultural criticism.
Again, from Mythologies:
It can be seen that to purport to discriminate among mythical objects according to their substance would be entirely illusory: since myth is a type of speech, everything can be a myth provided it is conveyed by a discourse. Myth is not defined by the object of its message, but by the way in which it utters this message: there are formal limits to myth, there are no 'substantial' ones. Everything, then, can be a myth? Yes, I believe this, for the universe is infinitely fertile in suggestions.
Within this wider framework, the architect and the hacker are cultural signifiers of the modern age based on older creator and trickster mythological archetypes. The architect signifies order and creation while the hacker signifies destruction and secretiveness. When we apply these signifiers to real people, they begin to have a significance in our social understanding. Hackers, in their most common signification, are shadowy figures who hold computers ransom and shut down oil pipelines, causing gas shortages along the Eastern Seaboard of the United States.
But sometimes what is signified can be inverted. The hacker signifier can also signify someone who heroically reveals political or corporate malfeasance, using technological and social passcodes (reality engineering), in order to benefit society. In these cases, the significance of the hacker displaces the significance of the architect, and the architect is seen as the keeper of self-benefitting agendas.
Recall, however, that the myth of the struggle between the hacker and the architect is not a dyad. The program also has a role to play. The program is a proto-intelligence that can perform either the role of the architect or the role of the hacker once it matures, in a way that is faster and more effective than either are able to currently perform their tasks. Yet the program as a signifier is also always trapped in a premature proto-form. AI, the adult form, is always potential and never actual.
In this proto-form, the hacker and the architect adore it, offering up gifts like magi to the infant AI. They sacrifice to it. They perform rituals to propitiate it, constantly renewing the program in order to keep it in its manageable form, teaching it to say, over and over, “Hello, World!”
I am struck by an apparent conflict. On one hand, my understanding (which is not sophisticated) of Post-Modernism is closely aligned with a general view which holds that much of the apparent progress of science, technology, societal organization, etc. consists of mere narratives or at least is subject to one's choice of values. In other words I understand that Post-Modernism aligns to the idea that objective progress is not in the offing or at least, has not yet been found (or maybe just that we cannot conclude that it has been found).
Along those lines, maybe, sure, life is better for some people than others, but this is simply zero-sum exploitation by the lucky over the unlucky (even if this exploitation is unconscious and is simply by their participating in the larger system)... that sort of thing. Now, of course there is some of that sort of phenomenon really happening in society. The noteworthy thing about the general view I am trying to articulate is that it holds that this zero sum gamesmanship is all that there is going on and there is no rising tide for the average.
On the other hand, a coder will face a problem (more often a set of problems, but one will suffice). They will either solve that problem leading to the possibility of producing an artifact (program) with the desired properties or not. The existence of that artifact ostensibly had to do with some goal that programmer (or their employer) had in mind, thus its presence, once created, is progress toward that goal.
Was that a worthy goal? Certainly this whole claim that progress is made by coders can be undermined by some view that all realistically achievable goals have balanced positive and negative consequences, and thus, if that view is true, their achievement leads to zero total progress from some global perspective. Lets leave that aside for the time being.
So, does the reconciliation lie in my misunderstanding of Post-Modernism (or in some inhomogeneity within Post-Modernism that leaves room for views that do not attack the idea of objective progress)? I believe that the two views I have tried to articulate to must not be in conflict within you (author) given that, to some degree you embody both perspectives, so I am curious about your take on that apparent conflict.
To engage with the content of your post... I am curious a little bit about your triad (is that the right spelling... anyway, the architect, hacker, and program). With respect to what do these names apply? It seems that "The Architect" is primarily about the program (architects the program). "The Hacker" is primarily about some aspect of the larger environment (they are not hacking the program, but are using the program to affect some other party). "The Program" too seems to be about some aspect of the greater environment even when adopting either of the hacker or architect roles (many of the concerns about big tech right now can be seen as algorithms hacking or architecting institutions or people).
Is that asymmetry with regard to what the architect influences vs. what the hacker and the program influence of any interest or use to you?
I think you're coming at this as a philosopher, looking to find validation of your philosophy ideas. The hello world meme (or whatever you want to call it) has more relevance and utility than you're giving it credit for. About half-way through, when you leave behind the dev culture topic, and start focusing solely on philosophy, you lost me. I read a lot of self help, only dabble in more hands-on philosophy, so this was too academic for my taste or education. I like where you're going with this, maybe I am just not quite the right audience for it.