This afternoon I had the immense privilege of speaking at Code Mesh V: The Alternative Tech Conference. In their words:
We bring together a unique mix of programming language inventors, developers, innovators, researchers, and visionaries to help solve real-world problems using innovative, non-mainstream tech.
Below I’ll share the video recording of my talk, “What Counts as a Programming Language?” Before I do, I want to note that this conference nailed the switch to a virtual event.
The organizing team specifically encouraged person-to-person interaction by having speakers introduce other speakers at the beginning of the talks. Speakers also proctored guest questions and interviewed other speakers after their talks. They used a tool called Whova to manage online speaker, guest, and sponsor interactions. If you’re looking to take your conference online, I highly recommend talking to these organizers.
I titled the talk “What counts as a programming language?” but it’s actually about a broader concept: assumed context. This is the phrase I am using to name all the situations where we think, speak, and learn from a perspective that we have arbitrarily assumed to be the default perspective, without necessarily considering other different but equally informative perspectives.
There’s a warning word that tends to hang around assumed context situations, the way a raccoon hangs around piles of trash that need to be taken out. The word is “generally.”
That’s what you see in the thumbnail on the video, where it says “Generally, it is better to optimize our code for legibility than for speed.” That concept exemplifies how the use of the word “generally” elides away information about the specific circumstances that govern whether it’s better to optimize for legibility or for speed.
Most programmers do most of their work on teams that maintain end user applications. In that specific context, other programmers need to read that code, but they probably don’t need it to be super optimized. Why: if you’re live-crunching so much data that you need optimizations, it’s probably too much data to expect an end user to grok on one screen anyway.
But Code Mesh V is a conference full of programming language designers. For a PL designer, speed matters a ton. If the programming language is slow, no one will use it. End user app developers have the luxury of prioritizing legibility because the programming language is fast enough on its own, without their help. The “general” case (end user application developers in teams) works because a “specific case” (programming language developers) didn’t follow it.
We go through a couple of examples like this in the talk; then, we broaden our examination to programming languages. In particular, we discuss what we mean when we talk about a “general programming language.” There’s that raccoon again: “general.” Where is the pile of trash this time? What are the circumstances under which we need a “general” programming language instead of a domain-specific one? In fact—put more bluntly—what arbitrary default domain is a “general” programming language specific to?
I won’t write down the answer and ruin the talk for you. Please enjoy!
Links to resources I mention in the talk
I mentioned several resources in this talk that I’d like to make easy for you to find. To wit:
- Crafting Interpreters, by Bob Nystrom
- What can Technologists do about Climate Change? by Bret Victor, which discusses the specific domain of so-called general programming languages
- What Regex Teaches Us About DSL Design, by Betsy Haibel
Fun easter eggs in the talk
- A hint about the next conference I’ll be speaking at
- A hint about the next class I’ll be teaching
- A hint about an upcoming project
And, not so intentionally, I also included a glimpse of my favorite Oscar the Grouch pajama pants.
I hope that you enjoy the talk, and please remember to keep social distance and wear a mask in public places.
If you liked this piece, you might also like:
The Raft series, of course!—Learn to implement a distributed system from the comfort of your home, complete with gifs and smack talk!
Lessons from Space: Edge Free Programming—about what launchpads have in common with software, and what that means for you and your work!
Some Were Meant for C: On the Endurance of an Unmanageable Language—in this paper, Stephen Kell defends the utility of C in modern application and systems programming. He proposes that its keystone status comes from its permissive approach to integration (rather than, as commonly rumored, its speed). Part of his argument relies on the idea that the design of C does not technically prohibit fixing many issues in its implementation. In my view, that’s shaky ground given that empirical evidence demonstrates that updates to C are few, far-between, and more focused on backward compatibility than meaningfully addressing long-standing implementation conventions. It’s weird to name a paper after lyrics that romanticize practicality and then turn around and make an argument that kinda depends on all of us living in an alternate timeline. Nevertheless, a good read, and easily clears the 99th percentile of papers I’ve read on its writing quality.