2016 was an inconspicuously transitional year for the information space once commonly referred to as the World Wide Web. Those [End Page 47] attentive to linguistic usage will recall that the 2016 edition of The Associated Press Stylebook and Briefing on Media Law released in June recommended that the words "internet" and "web" no longer be written with initial capital letters,1 in a sign that the propriety marked by their referents' novelty had finally settled, or worn off. For those more attuned to matters of technical infrastructure, what may come to mind instead is the announcement by Oracle Corporation that its Java web browser plugin would be deprecated in the forthcoming ninth version of its Java Development Kit (JDK), a platform for writing and packaging software applications in the Java programming language.2 Taking these two real, if lesser milestones together, it seems safe to say that for anyone who remembers the original promise made for Java applets as a common WWW technology, at their moment of emergence in the mid-1990s, this was a chapter of recent technological and cultural history quietly coming to an end.3
To be sure, Oracle's hand had been forced by Microsoft, Google, and Apple, who had either reduced Java plugin support in their browser products or removed it entirely. And yet embedded Java applets had long since become a legacy technology, still useful for some computationally intensive graphical visualization tasks (disproportionately in scientific applications), but no longer in wide use outside that domain. Whether or not they are old enough to remember the role originally imagined for Java in the browser, in particular, most of those who design websites and program web applications for a living today would be unlikely to regret their eclipse. Even before the emergence of personal data security as a substantive public issue in 2012, Java applets presented grave, often intractable security risks that web developers had had to learn how to manage, or ignore. A more general reason for the irrelevance of Java browser applets by 2016 was a historical one, linked to changes in the profile of the Java programming language and Java programmers in the software development industry as a whole. When Fredrick P. Brooks Jr. chose for the seventh chapter of The Mythical Man-Month: Essays on Software Engineering (1975) the title "Why Did the Tower of Babel Fail?," he [End Page 48] was reflecting on the biblical story of Babel as a fable of engineering (the hubristic or merely presumptuous construction of a tower tall enough to reach heaven), rather than a fable of language (divine punishment imposed in the form of linguistic difference and permanently impaired communication).4 Nevertheless, The Mythical Man-Month, the first widely read and still the most celebrated reflection on managing large software projects, was also an informal study of communication, not excluding the metaphorized communication that a software programmer struggles to achieve with a machine.
The present essay is about the negotiation of technical expertise, specifically the technical expertise involved in software programming, and in particular that involved in programming websites and applications—that is, what is today called "web development." I take my bearings from the present historical moment, understood as an interval of continued economic recession (or, if one insists, "uneven recovery") shaped by both economic and political investment in "coding" instruction as job retraining for unemployed and underemployed US blue- and white-collar workers alike. In recent years, sociologically oriented cultural studies scholars like Adrian Mackenzie have produced valuable work on cultures of software development, work that is laudable for being simultaneously technically informed and socially focused.5 While it has been receptive to such research in so-called software studies, scholarship in humanities disciplines has not displayed a proportionate interest in the specifically social and cultural dimensions of the specifically linguistic history of computing, and this is the case especially where individual programming languages and their development and usage cultures are concerned.6 The broad exception is, of course, the historiography of [End Page 49] computing, and science and technology studies more broadly. But even here, Mark Priestley is surely right to suggest that early, purely technical histories of programming languages have been followed by socially attentive histories of software as a general object and domain, leaving individual languages behind as objects of potentially equally both technically and socially focused study.7
Granting that no duplication of the early, narrow technical histories is necessary—they were meticulous, if unsurprisingly disproportionately anecdotal in character8—how can we describe the humanities research space separating an early historiography of programming languages that is as old as the Fortran, Lisp, Algol, and Cobol languages themselves (which originates, that is to say, in the late 1950s), and recent social histories of the software concept as Martin Campbell-Kelly's From Airline Reservations to Sonic the Hedgehog: A History of the Software Industry?9 A clue is to be found, I would suggest, in an essay by William Paulson entitled "For a Cosmopolitical Philology: Lessons from Science Studies,"10 insofar as in that essay, Paulson suggested the value of bringing science and technology studies (STS) scholarship into contact with an older literary humanist tradition of philology: a tradition whose methodologies were globally comparative and multilingual, whose mode was the study of texts in multiple languages (which required intensive study of the languages themselves), and which was rooted in a specific Western intellectual-historical tradition, the tradition of secular or historical humanism. If we set aside this latter tradition (one that STS scholars would surely understand themselves as sharing with "philologists," that is, with [End Page 50] language and literature scholars), philology's characteristic mode of focus, grounded as it is in the mandates of linguistic specificity, even incommensurability, cannot be described as a great strength or even necessarily a normal characteristic of scholarship in STS.
From a position close to Paulson's own, then, one might invite software studies and so-called critical code studies, as well as STS itself, to establish an as-yet imagined contact with philology. What, we might ask, would a philological study—that is, a minimally both technically and socially oriented historiography—of a specific computer programming language look like? For an example of how this question might be posed within the disciplinary context of the information sciences, rather than within that of the humanities (as I shall do here), we can consult recent work like Andrew J. Ko's "What Is a Programming Language, Really?" "In computing," Ko remarks, "we usually take a technical view of programming languages (PL), defining them as formal means of specifying a computer behavior. This view shapes much of the research that we do on PL, determining the questions we ask about them, the improvements we make to them, and how we teach people to use them. But to many people, PL are not purely technical things, but socio-technical things."11 Still, essays like Ko's are quite remarkably few and far between, in the domain of the technical sciences as much as in the social sciences and the humanities—and often, as in this particular case, perhaps unavoidably perfunctory. Regardless of how we choose to explain it, Ko's conclusion in 2016 that "[o]ther agendas, particular those that probe the human, social, societal, and ethical dimensions of PL, are hardly explored at all"12 is certainly warranted.13
System and Scripting Languages
Efforts to make programming accessible to nonprofessionals did not, as one might expect, lag behind the effort to make programming more convenient for professionals; rather, they were coterminous and developed in parallel, not without significant overlap. At Dartmouth College, John Kemeny had devised DARSIMCO (DARtmouth SIMplified COde), "Dartmouth's first crack at a simple computer language,"23 a year before the appearance in 1957 of FORTRAN, the first widely adopted and lasting example of a higherlevel or "third generation" language.24 "Dartmouth students," Thomas E. Kurtz recalled in 1978, "are interested mainly in subjects [End Page 57] outside the sciences," and most of the future "decision makers of business and government" among them were not science students.25 The rationale for Dartmouth BASIC, or "Beginner's All-Purpose Symbolic Instruction Code," was to provide such students with experience in writing programs (rather than merely learning about computer use) without having to understand operation codes "or even FORTRAN or ALGOL" (the latter another higher-level language developed in the 1950s), which Kurtz and his colleagues considered "clearly out of the question. The majority would balk at the seemingly pointless detail."26 But the growth of Dartmouth BASIC into an entire family or class of languages represented its dissemination not only as an instructional language, but also in some lines of development (such as that which produced Microsoft's Visual Basic) as "a production programming language for professionals" as well.27
Today, terminological usage more or less clearly distinguishes "scripting" languages from "system programming" languages. System programming languages like C and C++ were designed to abstract away much of the detail of assembly-language programming (that is, programming in operation codes) while still leaving the programmer facilities for manually allocating and de-allocating memory and thus staying "close to the metal," as programmers like to say, while enjoying the benefits of higher-level abstraction where that was preferred (for example, in syntax for iteration, branching and other control structures, function calls, and creating and managing collections of items of data). Managing memory efficiently involves distinguishing clearly among different data types (primarily, between mathematical and textual data types) as one makes use of them, so that no more memory than is needed is allocated for storing an item of data, and compilers for system programming languages typically enforce such discipline in the programmer—for example, by refusing to compile a working executable otherwise. Scripting languages, by contrast, abstract away and automate both data typing and memory allocation and deallocation, for the convenience of the programmer. This is partly because they can take for granted the presence of an underlying system programming language and its libraries, for whose components they serve as a kind of adhesive or connective tissue, and in which they themselves are implemented (that is, the interpreter that provides a scripting language with its execution environment is itself a system-level language program). [End Page 58]
Since the 1990s, however, various factors, including the accelerating sophistication of hardware and innovations in programming language design, have eroded some difference in the performance of scripting languages relative to system programming languages, at least in specific environments and for specific applications, and significant gains have arguably been made in some measures of programmer productivity. The economy of expression made possible once memory allocation and data typing are abstracted away can be fairly dramatic. If code in a system programming language like C is three to six times shorter, in countable individual instructions, than its equivalent in assembly language code,28 the same instructions in a scripting language like Python might be half as long as their equivalent in C, C++, or Java syntax, and depending on the task possibly much shorter than that.
The opening of securities markets to a new class of investor whose expertise was improvised, at best, was not the only significant economic event of 1995 and the years following it. It was in February 1995 that the 233-year-old Barings Bank, one of the world's oldest surviving financial institutions, collapsed due to losses incurred by a single Singapore-based derivatives trader who relied on the global [End Page 61] distribution of Barings's operations help him evade scrutiny of his activities. Billionaire business publishing executive Steve Forbes launched his campaign for the 1996 Republican presidential nomination, refusing matching funds from the US Federal Election Commission to avoid any obstruction in expending his personal wealth, a decision that would change US national electoral campaign financing for good by removing the relative financial restraint imposed by FEC funds matching. Also in 1995, a new, fully formalized international institution, the World Trade Organization (WTO), replaced the treaty structure known as the General Agreement on Tariffs and Trade (GATT) that dated to the end of the Second World War—an event that might be understood as economically stabilizing, were it not for the prompt eruption of disputes between developed and developing-economy members (the as-yet unresolved "Singapore issues") and the attention of antiglobalization activists, which would culminate in violent street protests at the 1999 Seattle conference.
1995 was not an uneventful year politically, either. US national political volatility increased as Speaker of the US House of Representatives Newt Gingrich, capitalizing on Republican success in the 1994 midterm elections, finished crafting the insurgent conservative legislation known as the Contract with America and forced the first of a series of US federal government closures in a dispute with President Bill Clinton. The nearly two-decade-long bombing campaign of Theodore John "Ted" Kaczynski, a former University of California, Berkeley mathematician who had simultaneously renounced modern technology and taught himself to construct primitive explosives (and who had targeted academic scientists and computer stores in particular) culminated with a series of explanatory letters and the publication of the so-called "Unabomber Manifesto" by the New York Times and the Washington Post. And Timothy McVeigh and Terry Nichols destroyed the Alfred P. Murrah Federal Building in Oklahoma City with a truck bomb in the United States' most significant act of domestic terrorism then and since.
[W]hat people wanted back then (and still want) is the ability to go one step beyond HTML and add a little bit of code that makes a web page dynamic—that makes things move, respond to user input, or change color; that makes new windows pop up; or that raises a dialog box to ask a question, with an answer necessary to proceed—things that HTML cannot express. That's really where you need a programming language, but something simpler than Java or C++. Content creation should not be recondite. It should not be this bizarre arcana that only experts and gold-plated computer science gurus can do.38 [End Page 65]
I have already mentioned the first edition of ECMA-262 (ISO/IEC 16262), Ecma International's specification for ECMAScript, which described ECMAScript as a scripting language "intended for use by both professional and non-professional programmers."39 There exist seven published editions to date (ECMAScript 1, 2, 3, 5, 5.1, 6, and 7, excluding ECMAScript 4, which was abandoned), and the first edition's emphasis on design for nonprofessional users was retained all the way through the fifth edition published in 2009. The third edition published in 1999 included minor changes to the initial paragraphs of the section entitled "Overview" (section 4), changing "A scripting language is intended for use by both professional and non-professional programmers, and therefore there may be a number of informalities built into the language" to "A scripting language is intended for use by both professional and nonprofessional programmers. To accommodate non-professional programmers, some aspects of the language may be somewhat less strict."40 The fifth edition published in 2009 deleted the latter sentence, leaving only "A scripting language is intended for use by both professional and nonprofessional programmers."41 [End Page 66]
Click for larger view
View full resolution
In 2014, Brendan Eich's resignation as CEO of the Mozilla Corporation, only nine days after taking the position, was described by a writer for the New Yorker as "the least surprising C.E.O. departure ever," given that Silicon Valley was "a region of the business world where social liberalism is close to a universal ideology."52 (Eich's having donated to an anti-marriage equality campaign supporting California's ballot Proposition 8 in 2008 was a fact known beforehand, which became newly controversial upon Eich's appointment.) It might be more accurate to say that in a broader context, the episode reflects the fundamental confusion of the specifically cyberlibertarian politics of Silicon Valley investment and management culture, which borrows ideas freely, but mostly unreflectively and unsynthetically from both statist left-wing and anti-statist right-wing political platforms, in ways that seem to reflect the startup culture's ambivalence about its own expertise. Though a great deal of work remains to be done to articulate the meaning such contexts lend to topics such as my own, in this essay, such social dynamics cannot be delinked from the technical history of the artifacts designed and produced in contexts determined by them—even, or perhaps especially, such an artifact as a programming language. [End Page 72]
Brian Lennon is the author of In Babel's Shadow: Multilingual Literatures, Monolingual States (University of Minnesota Press, 2010) and Passwords: Philology, Security, Authentication (Harvard University Press, forthcoming 2018). He is currently working on a study of programming languages and cultures of software development entitled "Autologies: Software Language Culture."
1. Davey Alba, "The AP Finally Realizes It's 2016, Will Let Us Stop Capitalizing 'Internet,'" Wired, April 2, 2016, http://www.wired.com/2016/04/ap-finally-realizes-2016-will-let-us-stop-capitalizing-internet/.
2. Tom Warren, "Oracle's Finally Killing Its Terrible Java Browser Plugin," Verge, January 28, 2016, http://www.theverge.com/2016/1/28/10858250/oracle-java-plugin-deprecation-jdk-9.
3. Some readers may also have thought of the acquisition of Yahoo Inc. by Verizon Communications, announced on July 25, 2016, several months after an initial draft of this essay was completed.
4. See Frederick P. Brooks Jr., The Mythical Man-Month: Essays on Software Engineering, 20th anniversary ed. (Reading, MA: Addison-Wesley, 1995).
5. See Adrian Mackenzie, Cutting Code: Software and Sociality (New York: Peter Lang, 2006).
6. A partial exception is Nick Montfort, Patsy Baudoin, John Bell, Ian Bogost, Jeremy Douglass, Mark C. Marino, Michael Mateas, Casey Reas, Mark Sample, and Noah Vawter, 10 PRINT CHR$(205.5+RND(1));: GOTO 10 (Cambridge, MA: MIT Press, 2013), seven of the eleven main chapters of which focus on the BASIC programming language. Only one of these seven chapters could reasonably be called a study of the BASIC language, however, with the remaining six devoted to explaining very simple command sequences and very brief programs to readers who are assumed to have no knowledge either of BASIC or any other programming language. The book's eighth main chapter, entitled simply "BASIC," does discuss language design and syntax variation in some detail, but is otherwise given over to reviewing BASIC's implementation and usage history, again for a reader assumed to lack elementary knowledge of the subject. As of this writing, 10 PRINT CHR$(205.5+RND(1));: GOTO 10 is the only book-length publication to have emerged from "critical code studies," an undertaking that Mark C. Marino attempted to distinguish from "software studies" more than a decade ago. See Mark C. Marino, "Critical Code Studies," Electronic Book Review, December 4, 2006, http://www.electronicbookreview.com/thread/electropoetics/codology.
7. Mark Priestley, A Science of Operations: Machines, Logic and the Invention of Programming (New York: Springer, 2010), p. 2.
8. See Jean E. Sammet, Programming Languages: History and Fundamentals (Englewood Cliffs, NJ: Prentice-Hall, 1969); Donald E. Knuth and Luis Trabb Pardo, "The Early Development of Programming Languages," in Selected Papers on Computer Languages (Stanford, CA: CSLI Publications, 2003), pp. 1–94; Richard L. Wexelblat, ed., History of Programming Languages (New York: Academic Press, 1981); Thomas J. Bergin and Richard G. Gibson, eds., History of Programming Languages II (New York: ACM Press / Addison-Wesley, 1996); Thomas J. Bergin, "A History of the History of Programming Languages," Communications of the ACM 50: 5 (May 2007): 69–74.
9. See Martin Campbell-Kelly, From Airline Reservations to Sonic the Hedgehog: A History of the Software Industry (Cambridge, MA: MIT Press, 2004).
10. William Paulson, "For a Cosmopolitical Philology: Lessons from Science Studies," SubStance 30:3 (January 2001): 101–119.
11. Andrew J. Ko, "What Is a Programming Language, Really?," in Proceedings of the 7th International Workshop on Evaluation and Usability of Programming Languages and Tools (New York: ACM Press, 2016), 32–33, at p. 32.
12. Ibid., p. 33.
13. The "politico-social history of Algol" promised by R. W. Bemer, for example, turns out to be a bibliography with abridged extracts from various primary sources (letters, meeting minutes, committee resolutions, and so on), many relating to the famously fractious negotiations of the specification of Algol 60 in particular. It is to that history of conflict to which the term "politico-social" presumably refers; still, this document is entirely descriptive and offers no analysis whatsoever. See R. W. Bemer, "A Politico-Social History of Algol (with a Chronology in the Form of a Log Book)," Annual Review of Automatic Programming, Annual Review of Automatic Programming 5 (1969): 151–237.
15. Designed by Bjarne Stroustrup while working at AT&T in the late 1970s, C++ was originally called "C with Classes," marking Stroustrup's intention to "superset" the C language (that is, to remain completely compatible with it) while also improving it. See Bjarne Stroustrup, "Bjarne Stroustrup's FAQ," Bjarne Stroustrup's Homepage, October 1, 2017, http://www.stroustrup.com/bs_faq.html.
18. In response to such claims, Java programmers often point to Java's leading position in the TIOBE Programming Community Index compiled by the software services provider TIOBE Software BV, or similar rankings aggregators like the PYPL Popularity of Programming Language Index—leaving unmentioned such rankings' historical "trend" indexes for Java's position, which are frequently negative. See Robert McMillan, "Is Java Losing Its Mojo?," Wired, January 8, 2013, http://www.wired.com/2013/01/java-no-longer-a-favorite; and David Cassel, "Evolve or Die: Java, C++ Confront Newcomers on the TIOBE Index," The New Stack, March 14, 2016, https://thenewstack.io/evolvedie-popular-programming-languages-confront-newcomers-tiobe-index, both of whom argue that TIOBE data itself shows Java's position "slipping" and "trending down" (McMillan also quotes Paul Jansen, managing director of TIOBE Software, as stating that "Java is falling down"). In any case, at any point in the history of a programming language past the point of its initial adoption, a language's reputation—as expressive or otherwise pleasant to use, as adaptable to ongoing hardware evolution, as usable in solving newer computational problems—may diverge from its market share or other measures of usage quite radically, if only because once they are in place, large industrial software infrastructures are kept operating for as long as possible. It is the incongruence of Java's reputation with its market share, today, that animates nonmeaningless if possibly glib comparisons of Java to Cobol, such as that made by Bill Snyder in "Java Is Becoming the New Cobol," InfoWorld, December 28, 2007, http://www.infoworld.com/article/2650254/application-development/java-is-becoming-the-new-cobol.html. The inclusion in Java version 9 of a REPL (Read-Evaluate-Print-Loop) feature for exploratory programming is a concession to the encroachment on Java's position of both scripting languages and newer functional programming languages, languages in both categories of which have offered REPL-type features—whose purpose and usage are fundamentally incompatible with Java-style object oriented programming—for many decades. Arguably, the rise of Scala, Clojure, and other languages designed to run on the Java Virtual Machine (JVM) and provide access to Java standard libraries, but otherwise breaking either partly or completely with Java's imperative syntax and its enforcement of an object-oriented paradigm, marks the endurance of the JVM as a platform but the eclipse of Java as a (paradigmatic) language.
19. The difficulties of larger-scale software production are documented by a management-oriented literature stretching back to the 1970s. The canonical text, mentioned previously, is Brooks Jr., The Mythical Man-Month (above, n. 4). See also Robert N. Britcher, The Limits of Software: People, Projects, and Perspectives (Reading, MA: Addison-Wesley, 1999); Scott Rosenberg, Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software (New York: Three Rivers Press, 2008); Gerald M. Weinberg, The Psychology of Computer Programming, silver anniversary ed. (New York: Dorset House, 1998); and, for useful counterpoint, Ellen Ullman, Close to the Machine: Technophilia and Its Discontents (New York: Picador / Farrar, Straus & Giroux, 2012).
20. ECMAScript: A General Purpose, Cross-Platform Programming Language. Standard Ecma-262, June 1997 (ECMA, June 1997), p. 1, http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%201st%20edition,%20June%201997.pdf.
21. Ibid., p. 2.
22. Ibid., p. 1.
23. Thomas E. Kurtz, "BASIC Session," in History of Programming Languages, ed. Richard L. Wexelblat (New York: Academic Press, 1981), p. 516.
24. The most widely used term in both professional software development and the discipline of computer science is "higher-level language," a spatial metaphor used to describe abstraction from the "lower" level of hardware operation codes. Academic researchers use the historical metaphor of the generation in a similar, if perhaps also more sensible way: a first generation of purely numerically represented instructions ("machine code") is followed by a second generation of mnemonic abbreviations ("assembly language"), followed in turn by compiled, hardware-independent algebraic syntaxes and keywords and phrases in the English language ("programming language" as we use the term today). The classification includes a fourth and a fifth generation, which is beyond my purview here. See James Martin, Application Development without Programmers (Englewood Cliffs, NJ: Prentice-Hall, 1982).
25. Kurtz, "BASIC Session" (above, n. 23), p. 518.
27. Ibid., p. 547.
28. J. K. Ousterhout, "Scripting: Higher Level Programming for the 21st Century," Computer 31:3 (1998): 23–30, at p. 24.
29. See Alison Lee and Andreas Girgensohn, "Developing Collaborative Applications Using the World Wide Web 'Shell,'" in CHI EA '97 CHI '97 Extended Abstracts on Human Factors in Computing Systems (New York: ACM Press, 1997), pp. 144–145, at p. 144.
33. See Walter Hamilton, "Hooked on Speed: How Day Trading Works," Los Angeles Times, February 21, 1999, http://articles.latimes.com/1999/feb/21/business/fi-10174.
39. ECMAScript (above, n. 20), p. 1.
40. ECMAScript Language Specification: Standard ECMA-262, 3rd ed. (ECMA, December 1999), p. 1, http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf.
41. ECMAScript Language Specification: Standard ECMA-262, 5th ed. (ECMA, December 2009), p. 2, http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262%205th%20edition%20December%202009.pdf.
44. See David Nofre, Mark Priestley, and Gerard Alberts, "When Technology Became Language: The Origins of the Linguistic Conception of Computer Programming, 1950–1960," Technology and Culture 55:1 (2014): 40–75.
46. Jeremy Ashkenas, "List of Languages That Compile to JS," GitHub, 2016, https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-JS.
47. "Computing Conversations with Brendan Eich" (above, n. 36).
48. See, for example, George P. Landow, Hypertext: The Convergence of Contemporary Critical Theory and Technology, Parallax (Baltimore: Johns Hopkins University Press, 1992).
52. James Surowiecki, "How Mozilla Lost Its C.E.O.," New Yorker, April 4, 2014, http://www.newyorker.com/business/currency/how-mozilla-lost-its-c-e-o.
1. Daniel P. Friedman and Matthias Felleisen, ·The Little Schemer, 4th ed. (Cambridge, MA: MIT Press, 1996).