Note: An LLM was not used in writing this article.
I was reading microgpt1 and found myself brushing up on linear algebra and tensors, and then separately was reading articles du jour about how prompting will replace coding and so on,2 and thought: why might that be? That is, if we are to take all the bold claims of vibecoders at face value. Bear with me.
Dijkstra comments, in various places, that language is important. LLMs by definition provide compelling evidence that language is profoundly important (or that we think it is3). Dijkstra argues quite convincingly that the good thing about abstraction is to let us think clearer, say what’s needed unambiguously, and no more than that. Formal languages can’t say a lot by design, but what they do say is absolutely precise. I’ll add my own observation that this is a humble acknowledgement of the human mind’s limitations.
There are examples of formal languages (notations, DSLs, etc.) that I’d prefer to think in than English (or substitute your own natural language) for certain problems:
f (a -> b) -> f b -> f a (by
people who grok them) tells me quite a lot about what can and cannot
happen.[a-z-]{2,3}$ is both shorter to digest and more precise “a
suffix consisting of alphabetical letters or a hyphen of length between
2 and 3.”That makes me think, for any piece of code in a “high-level” language, if for whatever reason we’d prefer to express that in plain English to an LLM and have the LLM be the “compiler” into some other “lower-level” language (C, Rust, TypeScript), then might we consider that to be a genuine failing of the language, or our abstractions within the language. At least as far as the declarative, “high-level” aspiration and conventional thinking goes.
I’ve been using the term “LLM-Complete”4 for this property: If a language, or certain task within a language, is LLM complete, then it’s easier, more convenient and preferable to simply use the formal language than to ask an LLM to work with it. In this sense, it’s more powerful as a knowledge tool. If a language (this includes notations, DSLs) isn’t LLM complete, it will inevitably be (and is probably already) thought of as “low-level” by the LLM user. Fit only for generating and ingesting, a glorified boilerplate.
Given that we really don’t know how to compute, giants of the computer science field often acknowledge that the field is maturing (sort of5), but still we have a lot of work left to do. There aren’t vocab or algorithms to describe a lot of types of problems, and behaviours we see in nature.
Are the The Next 700 Programming Languages6 going to be about being LLM-Complete?
Quite a good article on building a GPT from scratch in 200 lines of plain Python. Sort of like Norvig’s Lisp in Python in its brevity and implications.↩︎
I believe that regardless of my oscillating mood around LLMs in the current moment, learning how these things work and how services and tools that drive them work, on a technical level, is worth doing. For other thoughts on LLMs, see my diary on LLMs.↩︎
Specifically, the absolute enraptured fascination with LLMs proves that people (informally) equate language capability with intelligence. Sorry, Portia, it’s bad news.↩︎
As a stylistic (not technical) nod to Turing-Complete, this has also been applied in a more jocular way to eso-language capabilities, e.g. Tetris-Complete or Pac-Man-Complete.↩︎
As Alan Kay derides, in so many words, software culture is a pop culture; we don’t know our own history. Myself included. See also Turing Oversold.↩︎
As a reminder, Peter Landin’s paper The next 700 programming languages predicted a move towards a more compositional, denotational set of programming languages.↩︎