In 1991, the year I received my doctorate, I was discussing my thesis topic with the dean of a top-three research department in Computer Science. He remarked, “I don’t see what the issue is. The programminglanguage problem has been solved; the name of the solution is C.” Several years later, I reminded him of this claim, and, suitably chastened, he amended his point of view, saying, “OK, Java.” So it does not surprise me that the importance of programming languages, as a field of study within Computer Science, is not understood as well as it should be. My belief, on which I’ll expand in this essay (or, more accurately, this collection of mini-essays), is that the study of programming languages (PL) is central to the study of Computer Science. I would go further, in fact: not only is PL a core component in the curriculum for students specialising in Computer Science, it is an important element of a general, liberal-arts education. Consider other major elements of a liberal-arts education. We do not think it’s important for college students to study Physics or History because they plan to become physicists or historians. We wish students to have knowledge of Physics, because it illuminates the world in which we live and informs our experience in that world—when we skid a car, for example, or pick up a heavy box, or vote on government proposals to fund ethanol fuel production. We could say the same of History, or Literature, or Economics. . . or, for that matter, Computer Science: it is important for students to understand something about computation, as this also illuminates the world in which they live, a world whose connective tissue is increasingly composed of pervasive computational systems. The mechanisms of programming languages, in turn, inform a student’s understanding of computation itself, its power and its limitations. Studying these mechanisms, and—critically—putting them to work to design and implement programs, is the fundamental means by which students grapple with the nature of computation. The only way to really understand computation is to write programs; students can only write programs by means of programming languages.
Read full abstract