In my second year of graduate school I completed an (unofficial) thesis on the history of programming languages and intellectual property policy. The infographic below was initially to be published in the appendix of the paper, but as the research evolved the information in the graphic grew less relevant to the central arguments of the paper, and it was therefore omitted. As a result this graphic never received final aesthetic touches to make it suitable for publication. I post it here because it does represent a complete design vision (see below) and a significant amount of research that was invaluable to me in understanding the evolution of programming languages over time that may be useful to other programming language researchers. Much of the data below was adapted from this wikipedia page, Wexelblat’s History of Programming Languages, and Jean Sammet’s Programming Languages: History and Fundamentals. A full list of references can be found in the bibliography of my thesis.
Although there are many other excellent history of programming languages timelines available, many of them featuring more detail than this, I felt that the design of those timelines did not effectively express the nature of programming language development over time. A quick image search of “history of programming languages” will show that almost all designs of this sort are linear, either horizontally or vertically. Often these diagrams are simple one directional timelines, occasionally with aesthetic and semi-contextual designs like a “tree” structure, hearkening to similar linguistic maps. These designs undermine the serpentine evolutionary lines of these languages and perpetuate a sense that the most recently developed languages are in some way the best, when in actuality many of the most widely used programming languages in use today (C++, Perl, Ruby…) were developed decades ago.
What I sought to accomplish with this design was an infographic that gave chronological context and showed similarities or connections between languages without playing into a uni-directional development narrative. New languages are influenced by old languages, but many old languages still in use can be modified to incorporate traits of “newer” languages. These technologies, while in many ways distinctly not like actual languages, do share the characteristic of constantly evolving and being re-invented as they are used.
The challenge that arises when attempting to design a map that highlights complexity is, of course, that one’s map becomes much more complex. Following an evolutionary path on the above map is challenging because of the number of connections and overlapping lines. While this is representative of the complexities inherent in language development, it is not the most desirable trait in graphic design. One solution would be making the map interactive, so that particular evolutionary lines could be highlighted with a mouse click. Another more involved solution that I explored with several classmates was turning this entire visualization into a multi-level video game. A version of the above map would serve as the “overworld” map which the player could explore, tracing the lineage of different languages. Below is a draft design I created for such an overworld map in the style of an 8-bit microchip. Yellow wires represent “roads” upon which the player could travel and different languages would be included as text on different components on the board. Upon discovering particularly important or influential languages, ALGOL 68 for example, the player would enter a sub-level where s/he could interact with language designers and play missions.
My work on this game only reached the very preliminary prototyping stages, using the Gamemaker software to create the basic mechanics. At some point I would like to continue work on the project, as I believe this game would be an interesting way to teach both children and adults about the history of programming and programming languages.