Thoughts on Amy Ko’s “PL as …” keynote
Amy Ko had a great presentation at a conference on programming languages (PL), that he also video taped for a wider audience.
I’d always thought of PL as “things”, or material. The program was the interesting bit; the PL was the material that constructed it. But I guess as I extend that metaphor, it seems clear that it falls short. Cedar, for instance, is a material, and the building is the interesting thing. But cedar has intrinsic properties as well. You can bend it without cutting it to make a box.
It weathers beautifully due to the oils it contains, so you can make shingles and siding out of it. It burns very easily. If we extend the definition of cedar to include the tree itself, we can make canoes, rope, hats, spears, and so on. Cedar was a crucial part of Northwest aboriginal culture.
And so in translating that thought back to the PL world, it seems clear that PL also has this. The syntax of Java vs C in ease of learning the language. The ecosystem of Javascript vs Clojure in building apps. The culture of web programming languages vs scientific programming languages. And so on.
The one quibble I have—clarification, to be more accurate—is the slide on definitions, values and community weighting toward the end. The implication → goes one way for a reason. That is, because we chose to focus on PL as math, we have, as a result, a lot of focus on the value of certainty. But that isn’t to say because we value certainty, we focus on PL as math. In fact the reason for ‘valuing’ this value are complex and systemic: most CS departments started with math graduates, most CS departments still contain math-heavy disciplines like theory and machine learning, we want to show correctness and soundness, and math is the way to do it. So it isn’t to say that PL community does not value equity, or the others, but rather that equity is hard to prove, and PL academics function in a math world.
Finally, Amy had this great list of what form PL takes, and associated research questions, which I’ve shamelessly duplicated here so people can more easily copy it.
Programming languages as ….
- power
- what responsibilities does knowing PL come with?
- how does PL corrupt?
- should democracies distribute it?
- design
- what tradeoffs are made?
- what is a “good” PL design process?
- how can we rapidly prototype PL?
- what are PL aesthetics?
- media
- what message is enabled by PL?
- how does PL facilitate expression?
- notation
- what can PL not model?
- what info can PL not share?
- what makes a PL learnable?
- interfaces
- how can PL convey what is possible?
- how do we make PL usable?
- what feedback must a PL provide?
- math
- what does PL correctness mean
- how to prove PL correct?
- what in PL is equivalent?
- language
- do PL have ambiguities?
- do PL shape how we computationally think?
- communication
- Should PL model developer intent?
- should PL express intent to developers?
- glue
- what makes a PL a good adhesive?
- what materials do PL adhere to?
- legalese
- who should interpret code legally?
- are programmers lawyers?
- who should interpret code legally?
- infrastructure
- how do PL decay?
- how should we maintain PL?
- is PL a public good?
- path
- should gov’t create the path?
- how do we make PL equitable?
- who should go down this path?