Top Five Results of the Past 50 Years of Programming Languages Research

Over the past 50 years, which result from programming languages research has had the greatest impact on working programmers?

The center of the universe for a working programmer is the language (or languages) they use. Fundamental results in programming languages (PL) research can re-shape this universe.

In HOPL two weeks ago, Matthias claimed that type soundness is the most useful and influential result to flow from PL research to PL practice in the last 50 years.

But 50 years is a long time, and there are many serious contenders for the title of greatest PL result. Here are my (alphabetized) picks for the top five:

Abstraction

My goal in library design is this; I want to have a precise, elegant, re-usable abstraction —Conal Eliott, BayHac 2014 (00:01:55)

By abstraction, I mean anything whose interface is not just “read the implementation”. Could be a tuple, module, object, structure, semaphore, macro, etc. Even the memory hierarchy pyramid in your operating systems textbook is an abstraction. They are everywhere, and they are what separates computer science (it’s about ideas) from electrical engineering (it’s about transistors). Thank you Peter Landin and J.H. Morris.

Generational Garbage Collection

I don’t know much about garbage collection. I do know that I want it, and I’m pretty sure that I wouldn’t have it (outside of research languages) without generational garbage collection. Thank you David Ungar.

Generic Programming

a.k.a. the mainstream interpretations of parametric polymorphism

The thought of programming in Java 1.4 is terrifying. Thank you Jean-Yves Girard and John C. Reynolds and Gilad Bracha and Martin Odersky and David Stoutamire and Philip Wadler.

Modularization

How can humans understand large software systems? By organizing the systems into smaller components (modules, objects) with well-defined interfaces. It’s hard to imagine, but once upon a time the question of how to divide a system into modules was a new research problem. Thank you D.L. Parnas.

Type Soundness

Let me make two modest claims:

Soundness (with respect to a dynamic semantics) is a desirable property for a static type system.

A large number (at least, thousands) of working programmers agree that programming in a language with a sound, static type system is “a good thing”.

Neither of these claims were true 50 years ago. They are definitely true today. And the slogan “well typed programs do not go wrong (up to a well-defined set of runtime errors)” has become the catchphrase of PL research. Thank you Robin Milner.

Honorable Mentions

If you liked this post, you may also be interested in: