Cultures of programming Understanding the history of programming through controversies and technical artifacts

Tomas Petricek

Unpublished draft

Programming language research does not exist in isolation. Many programming languages are designed to address a particular business problem or as a reflection of more wide-ranging shifts in the computing community. Histories of individual programming languages often take their own contexts for granted, which makes it difficult to connect the dots and understand the history of programming in a holistic way.

This paper documents the broader socio-technological context that shapes programming languages. To structure our discussion, we introduce the idea of a culture of programming which embodies a particular perspective on programming. We identify four major cultures: hacker culture, engineering culture, managerial culture and mathematical culture. To understand how the cultures interact and influence the design of programming languages, we look at a number of historical strands in four lectures that comprise this paper. We follow the mathematization of programming, the development of types, discussion on fundamental limits of complex software systems and the methods that help make modern software acceptably reliable.

This paper makes two key observations. First, many interesting developments that shape programming languages happen when multiple cultures meet and interact. Those include both the development of new technical artifacts and controversies that change how we think about programming. Second, the cultures of programming retain a strong identity throughout the history. In other words, the existence of multiple cultures of programming is not a sign of an immaturity of the field, but instead, a sign that programming developed a fruitful multi-cultural identity.

The methodology used in this paper is inspired by historically grounded philosophy of science. We look at the four aforementioned historical strands and find a conceptual framework capable of effectively explaining the key historical developments. Using the prism of cultures of programming to look at the history of computing sheds a new light at the controversies and the development of technical artifacts that we discuss in this paper. It provides an explanation for a number of, otherwise hard to grasp, historical developments and it explains why certain debates keep recurring over the history. For a programming language researcher, the paper might also point at new, yet unexplored, intersections between cultures.

Draft and more information

Comments are welcome!

If you have any comments, suggestions or related ideas, I'll be happy to hear from you! Send me an email at or get in touch via Twitter at @tomaspetricek.

Published: Tuesday, 2 April 2019, 12:00 AM
Author: Tomas Petricek
Typos: Send me a pull request!