AI Engineer World's Fair 2025
The Many Ends of Programming
Read the talk
The Many Ends of Programming
AI can generate more code without resolving the hardest parts of software engineering. Six possible futures reveal where responsibility, reliability, and human choice still matter.
From a talk by Ray Myers
Before you start: Familiarity with source code, pull requests, and basic software maintenance will help; no Haskell experience is required.
Can we replace even one mainframe?
What would it take for AI to replace the software in even one mainframe? Ray Myers, introducing himself as chief architect at All Hands AI, maker of OpenHands, approaches that question as both an AI builder and a frequent skeptic. His starting point is empathy: the future of programming is difficult to discuss if the people building it cannot listen to one another.
The mainframe question was Myers’s response to a prediction by Anthropic CEO Dario Amodei. In the Council on Foreign Relations interview Myers cites, Amodei suggested that AI might write essentially all code within twelve months. Software engineers hear something narrower in that prediction than a general audience might: writing code is only part of the job. Myers proposed a friendly challenge—replace the software in one mainframe—to bring the discussion back to the difficulty of changing an existing system.
His recurring concern is that LLMs break old code. Maintaining working software already receives less attention than creating something new; in Myers’s view, the gap between AI’s ability to generate new code and its ability to edit existing code receives too little attention as well. A convincing account of software’s future has to include the systems we must keep alive, not just the programs we can now produce.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Getting past inevitability
Questions about limitations do not always receive technical answers. Myers describes being called a Luddite, told his head is in the sand, and accused of missing the big picture so completely that reading his post physically hurt. Those responses are unpleasant, but they also obscure the issue under discussion. Telling someone they will be left behind substitutes a threat for an explanation; to Myers, the phrase evokes the Kirk Cameron religious-apocalypse films more readily than a nuanced engineering conversation.
Another response, “Resistance is futile,” sends him to Star Trek. It is the Borg’s slogan, and the captured Picard speaks it as Locutus under their control. The Picard Myers admires stands for resisting in defense of truth. But following that analogy, Myers catches himself: he is now answering emotionally charged rhetoric with emotionally charged rhetoric of his own. It is not helping him listen. Having chosen to engage, he has a responsibility to hear people out and make the exchange productive.
There is a substantial shared question underneath the conflict: what can we make the future of software become? AI has brought people into a common conversation about the craft, even when they disagree about its destination. Myers separates that conversation into six scenarios: extreme completion, devocalypse, abstraction leap, uncharted waters, the review economy, and the infinite pile of garbage. They describe different mechanisms and outcomes, rather than six mutually exclusive predictions.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Extreme completion: more work within an engineer’s control
Extreme completion is the most conservative scenario because it already exists. Cursor and GitHub Copilot help engineers do more of the typing. The open questions concern how far that assistance will go and what impact it will have. Even an agent that performs several steps can remain closely supervised, leaving the engineer’s underlying responsibility largely intact.
The editor demonstration makes that boundary concrete. In Cursor, a VS Code fork, Myers uses Control+K to open an inline prompt. An existing Haskell function, cleanPrime, removes trailing whitespace. He asks for cleanPrimePrime, which should remove both leading and trailing whitespace, and Cursor generates another function from the example. The demonstrated transformation can be expressed in Haskell as follows:
haskell
import Data.Char (isSpace)
cleanPrime :: String -> String
cleanPrime = reverse . dropWhile isSpace . reverse
cleanPrimePrime :: String -> String
cleanPrimePrime = dropWhile isSpace . cleanPrime
example :: (String, String)
example =
( cleanPrime " hello "
, cleanPrimePrime " hello "
)
-- (" hello", "hello")
Reversing the string lets dropWhile remove what was originally trailing whitespace; reversing again restores the remaining text’s order. The second function additionally drops whitespace from the front.
Haskell is a deliberate choice. Myers sees its strong type system, and type theory more broadly, as a promising source of certainty around uncertain LLM generation. Types can constrain the shape of acceptable programs before someone reviews them. They do not, by themselves, establish that a function with type String -> String implements the intended whitespace behavior; the useful direction is to add machine-checkable constraints around generation.
A second demonstration moves from the editor to an experimental Slack interface for OpenHands. Myers points the agent at an existing pull request where he has added information to a log statement, then asks it to find other places that need the same addition and open a new pull request. Myers reports that the experimental Slack workflow returned a 48-file pull request a few minutes after he delegated the logging task.
That is a substantial amount of grunt work to delegate. It is also a bounded task: a person supplies the example, identifies the intended change, and retains the expertise needed to judge where it belongs. Myers treats this as extreme completion too. The agent can shovel through technical debt without demonstrating that it can independently own the surrounding system.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Devocalypse or innovator’s paradise?
The devocalypse goes much further: people no longer depend on software developers to turn ideas into working software. From a developer’s perspective, that can look like an apocalypse. From the perspective of someone waiting for developers to build an idea, it looks like an innovator’s paradise. The same capability has very different meanings depending on who currently bears the dependency.
Myers considers a feasible version desirable. Removing that dependency could represent programming fulfilling its purpose, even finishing the project of computer science. The important objection is therefore feasibility: can the proposed approach actually deliver and sustain the promised software? He acknowledges wanting his friends to keep their jobs, while rejecting the idea that every engineering objection is merely job protection. A prediction of developer replacement needs a mechanism for getting there. Expertise about unsustainable systems remains relevant to evaluating that mechanism.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Abstraction leap: can prompts become the source?
An abstraction leap offers one possible mechanism. Today’s Java or Rust could become tomorrow’s assembly language, JVM bytecode, or LLVM bitcode: still present underneath the system, but manipulated directly mainly by specialists. Most people would work through a higher-level representation that is more pleasant and productive. The underlying computation would remain recognizably code-like.
In the prompts-as-code version, natural language becomes the principal artifact humans edit. Scaling beyond a single prompt might mean organizing small requirements into interconnected folders and supplying tests. The hard question is whether this constitutes a dependable abstraction. If changes have unpredictable effects, a team may be unable to compose the pieces into a large, long-lived system. More structure or additional controls might compensate, but that reliability has to be demonstrated.
Parsel supplies a concrete example of the idea. Myers describes a Parsel example in which 61 lines of structured prompts and example inputs and outputs generate a 220-line Python Lisp interpreter. The specification describes multiple functions, while examples constrain what those functions should do. This is a more structured relationship between intent and implementation than a single open-ended request.
Producing an interpreter is an impressive demonstration, but operationalizing the approach introduces another question: can structured prompts become the basis of a real product that is better than its alternatives? Myers regards that as unresolved. The existence of a successful generated program does not settle how a prompt-based source representation behaves as requirements and implementations evolve.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
A specialized language can make the leap smaller
Myers finds domain-specific languages, or DSLs, a more promising route. They are already familiar: CSS expresses page styling, SQL expresses queries, and regular expressions express text patterns. Other languages target business domains; even Excel can be understood this way. Instead of asking a general-purpose language to express everything, a DSL makes the recurring ideas of a particular domain easier to state.
An organization adopting this approach invests in a specialized programming environment. That upfront cost can pay back through reliability, quality, and productivity because the environment is designed around what its users usually need to express. It can also backfire. Myers describes the trade-off as improving over the preceding two decades as tooling has made these environments easier to create.
The tooling landscape includes JetBrains MPS, Xtext, and LionWeb, with LionWeb more precisely serving as an interoperability initiative for language-oriented modeling components and specifications. Racket belongs in the discussion as a Lisp dialect and language-oriented programming environment. These are different ways to support specialized languages, rather than interchangeable products.
Language models could improve the economics on both sides of a DSL:
- Building the environment: Generate some of the implementation code that processes the specialized language.
- Using the environment: Offer editor suggestions that help business-domain users learn and express themselves in it.
In this arrangement, AI assistance can make a structured language easier to build and easier to navigate, without requiring natural-language prompts themselves to become a predictable programming substrate.
Myers has made this a focus of his Craft vs. Cruft channel, declaring a year of DSLs, and recommends Markus Voelter’s talk Empowerment of Subject Matter Experts for a deeper exploration. The defining boundary remains the same: beneath this abstraction, the system still follows familiar computational rules.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
What if computation stops being code-like?
Uncharted waters names a more radical possibility: the foundation itself changes. Myers distinguishes two versions:
- Direct model inference: Models act like processors, with inference becoming computation itself, rather than models merely appearing inside programs or generating their source code.
- AI-invented paradigms: A superintelligent system develops a way of programming that we cannot presently conceive.
Both move beyond the abstraction-leap scenario, which retains conventional code underneath a new human-facing layer.
Possibility alone does not provide a planning method. To plan around these futures, engineers must discover what works and what scales—in effect, chart the waters. Myers does not consider either possibility to have proved itself at the time of the talk.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
When generation outruns review
The review economy returns to a familiar workflow. Extreme completion makes pull requests cheap to produce, but their output is not reliable enough to approve automatically. Humans remain responsible for checking it. The logging pull request illustrates the upstream capability; this scenario asks what happens when a team receives more such changes than it can confidently evaluate. For developers who already find review the least enjoyable part of the job, making it the entire job is a dismal prospect.
Myers has seen versions of this situation in companies, but considers it a possible pit stop rather than an inevitable end state. It is a bottleneck-management problem. Eli Goldratt’s theory of constraints, introduced through The Goal, offers a body of thinking for systems held back by one choke point. Here, that constraint is manual developer review. Producing more work upstream does not remove it.
Two interventions address different causes of the queue:
- Prevent errors earlier: Shift checks left, including the type-theoretic controls discussed in the Haskell example, to reduce the burden placed on later review.
- Prioritize what deserves review: Select the changes with the greatest value instead of treating every generated pull request as equally worth shipping.
Myers illustrates prioritization with a hypothetical: shipping one-third of the items could deliver 90% of the value if the team chooses the right items. The point is to manage useful output through the constraint, rather than maximize the volume waiting in front of it.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
The infinite pile of garbage
The final scenario is worse than a review queue. In the infinite pile of garbage, coding assistance makes developers feel more productive while accumulating technical debt faster than they can manage it. Eventually, even AI cannot dig the system out. Products deteriorate instead of improving. This is a failure of the resulting software, regardless of how quickly its code was written.
Uplevel’s investigation of coding-assistant adoption provides one warning. Myers cites Uplevel as finding a higher bug rate with coding-assistant access and no throughput improvement. The study announcement describes a controlled observational comparison using matched groups and measurements before and after adoption; it does not state random assignment. Its efficiency measures concern pull-request throughput and cycle time, rather than issue throughput.
GitClear’s code-quality report supplies a different warning. Myers reports that 2024 was the first year in GitClear’s observed dataset when the share of copy-pasted code exceeded the share of moved code. Moved code serves as a proxy for refactoring, so the crossover raises a maintenance concern: repeated code can create more places where a future change must be made consistently. The observational trend does not isolate AI as the cause. If AI changes the usual relationship between duplication and maintenance risk, Myers argues that the new relationship still needs evidence.
GitHub’s Does GitHub Copilot improve code quality? points in the opposite direction. Myers cites GitHub as finding improved code quality with Copilot in a controlled experiment on a fixed task. That task-based result differs from the real-work observations discussed earlier; it does not directly answer what happens to long-term maintenance or production defects. Differences in task, setting, and outcome measures matter when interpreting the apparent contradiction.
Myers also points out that all three sources have something to sell. His preferred next step is stronger independent evidence, ideally a meta-analysis of multiple academic studies examining results in the wild. The useful questions are conditional: which uses improve outcomes, which worsen them, and how much depends on the task or the way a team uses the assistant? Better models do not automatically produce better products. Improving the products requires deliberate choices about what to build and how to build it.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
The scenarios can combine
These futures interact. A team might invest heavily in extreme completion, aiming to remove its dependence on developers, before it can handle the output. The intended destination is devocalypse; the actual destination could be the infinite pile of garbage. Increasing generation capability without developing the capacity to maintain its results can change which scenario unfolds.
Myers’s preferred direction combines extreme completion with an abstraction leap: a well-designed DSL, or a specification system grounded in formal methods, supplies structure while AI assistance makes it easier to navigate. The structured environment constrains what can be expressed; the assistant improves the ergonomics of expressing it. That combination connects the earlier interest in type theory with the economics of specialized languages.
There need not be one winner across the entire industry. Several endgames can occur at once, and two people predicting different outcomes may both be right about their own domains. Video game programming and healthcare technology should not be expected to experience identical effects. Their futures can diverge even while using related tools.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
We get a say
AI coding is sometimes described as a meteor arriving from outside the solar system while everyone watches helplessly. Myers rejects that picture. People are actively building these tools and the systems around them. We therefore have a say in what happens—and need to decide what we want from software.
Wanting no one to be a programmer is different from wanting everyone to be able to program. Wanting higher-quality software is different from wanting more software regardless of quality. Those goals can lead to different engineering and organizational decisions, even when both are described as progress.
The same choice applies to people whose required skills change. An organization can discard workers who diligently learned what it needed yesterday, or it can find ways to continue developing valuable relationships with them. Myers closes with a goal that includes both the artifact and the people around it: software should work well, provide value to its users and builders, and be made by people who treat one another well.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Resources
From the talk
Public repository for the OpenHands coding-agent project.
Tools for creating domain-specific languages with projectional editors and integrated editor assistance.
Specifications and components for interoperable language-oriented modeling tools on the web.
A language-oriented programming environment with macros, DSL-building facilities, contracts, and optional typing.
Study announcement reporting bug-rate and pull-request efficiency findings from 800 developers before and after Copilot adoption.
February 2025 report examining code-change patterns across 211 million changed lines from 2020–2024.
Read the complete timestamped transcript
- 0:00
Hi, I'm Ray Myers. I'm currently chief architect at All Hands AI, makers of the leading open source coding agent called OpenHands. But I'd like to talk about something different today, and I'm, I'm proud to be presenting at the online track for AI Engineer World's Fair.
- 0:17
But I feel like I've actually snuck in the back door today because this is not an AI talk. Perhaps this is not even a programming talk. This is a talk about empathy.
- 0:32
This is a talk about listening to each other. But if those things are uncomfortable for you, don't worry, because we will have the pleasant, comforting backdrop of AI and programming.
- 0:44
For starters, let me take you through a day in the life of an AI skeptic, which is the role I so often find myself in. What happens is someone will say something provocative in public, like you may have seen, uh, the CEO of Anthropic, Dario Amodei, say a few months ago at, uh, a Council on Foreign Relations
- 1:03
interview. Um, many interesting things in, in that interview, but a quote that we saw got shared around a lot was, "In 12 months, we may be in a world where AI is writing essentially all the code."
- 1:16
Right, now he's speaking to a general audience. Uh, as software engineers, we hear a little bit different, uh, when you're saying the part about writing the code 'cause we understand that, uh, the job contains, you know, other, other factors.
- 1:29
But regardless, um, I posted a, a friendly challenge in response to that, uh, to do with, like, could you replace the software in one mainframe? Can we kill one mainframe even?
- 1:43
How difficult is that right now with these, uh, AI tools that are soon to supposedly write essentially all the code, right? Um, and the specifics of my challenge are not really that, that relevant right now.
- 1:56
Just over the past two years, I have repeatedly said different forms of this. LLMs, large language models, break old code. I, I say that a lot because I think it is ignored.
- 2:14
Simply the importance of maintaining old code and keeping it alive, that already is ignored, and the extent to which, uh, these AI tools are performing much better on writing new code than in editing code that already exists, I feel like that's sort of doubly ignored as a result.
- 2:32
I feel like I raise pretty basic questions and point out pretty obvious limitations a lot of the time and get somewhat extreme reactions, honestly. You know, I've been called a Luddite.
- 2:44
I've been told I have my head in the sand. I've been told I'm missing the big picture. In the case where I posted that challenge, actually, the, the full quote was, I was completely missing the big picture, so much that it physically hurts to read my post.
- 3:01
Um, and you know, if my posts have hurt you, I'm, I'm sorry. Um, it- honestly, it doesn't feel good to be talked to in any of these ways, right?
- 3:12
So y- you may have had to feel that way at, at some point as well, or maybe you've been told this. You've been told that you'll be left behind.
- 3:21
Um, I struggle with this one, honestly. I, I feel that left behind is verbiage better suited for, you know, some post-apocalyptic religious prophecy in the form of a B movie franchise starring Kirk Cameron than in some sort of nuanced technical discussion.
- 3:45
Um, I heard this one recently from someone who, um, was saying it with a straight face and is someone whose work I, I respect, you know, goes back a long time.
- 3:56
They said, "Resistance is futile." Uh, again, I, I cannot comprehend what would make someone want to say things like this. For all the money in the bank, do you recall what that quote is from?
- 4:10
Was it from the hero of that story? No. It's a quote from the Borg from Star Trek, one of the most notorious villains in the entire science fiction genre.
- 4:24
If we find ourselves quoting the Borg in earnest,
- 4:29
maybe we should reassess what side we're on. When Picard was captured and being mind-controlled by the AI, he said, "Resistance is futile," as Locutus, but the real Picard would never say, "Resistance is futile."
- 4:44
Picard would say, "If you're on the side of truth, you should resist to the last breath." He embodied that again and again. Um, but we need to breathe. Um, I'm responding to emotionally charged rhetoric, and now I've just started spewing out my own emotionally charged rhetoric in response.
- 5:03
This is not helping me listen to these people. They're, they're... They mean well. You know, I've chosen to engage. I made the decision to engage in these conversations, and I need to be able to try to do that productively.
- 5:17
I need to be able to hear people out. I think we need to back up and decide what are we even talking about. It is something very important. It makes sense that a lot of us feel strongly about it, which then leads to us being in conflict with each other because we're, we're pondering what is the future
- 5:35
of software? What is it going to look like next? What can we make it? I mean, that, that is deeply interesting. If there's one thing I am grateful to AI for is probably, uh, even more than the technology, the opportunity for us to have all be thrown into this one conversation about the future of the craft.
- 5:59
It's a very difficult conversation to be in of late, and I'm gonna try to make it a little easier with this, but I think it is an important one worth having.
- 6:09
I've identified six scenarios that seem to be embedded in the views people have been putting out over the last few years, and I'd like to share them with you for the remainder of this talk.
- 6:21
Let's get started. These are extreme completion, the devocalypse, the abstraction leap, uncharted waters, the review economy, and the infinite pile of garbage. We will discuss each of these briefly.
- 6:38
Now, extreme completion is probably the most conservative of these views because it is, is already happening. We can just see it happen. There's no real doubt about whether this one will happen.
- 6:51
It is just a matter of, you know, how much with what impact, and that is simply the, um, autocomplete style editors like Cursor, like GitHub Copilot, are just going to continue to help us type more of the typing and, uh, be a great convenience, right?
- 7:14
So in that scenario, in extreme completion, our job doesn't fundamentally change. Even as they progress to these agents that can take a few more steps, you can still have, you know, a fairly extreme completion with it still needing to be on an engineer's leash most of the time, such that you could argue our, our role is not
- 7:34
changing, like, a great deal. So pretty much everyone agrees this at least is happening and, and is a somewhat significant shift, right? This is what this looks like. If you're at this conference, you've surely seen it.
- 7:46
This is an example of using the Cursor IDE, which is a fork of VS Code with a lot of AI, uh, features built in. So there's a function called cleanPrime to remove trailing white space, and I've prompted it here in this little pop-up thing that happens when I, uh, hit Control+K.
- 8:06
Make the function cleanPrimePrime to remove both leading and trailing white space, and sort of based on that example, it's going to make me another Haskell function pop out. There it is.
- 8:16
It's pretty cool. By the way, the reason I happened to pick the programming language Haskell for this example is that it has a very, uh, strong typing system. I think that type theory is a very promising counterbalance to add more certainty into the flow when we have the uncertainty of, of LLMs doing codegen.
- 8:36
Regardless, uh, here's a- another example that, that is maybe a little more, uh, where, where we think things are going, where I have, uh, delegated an entire task via Slack.
- 8:46
So I'm just in my work chat here, and this is a, a new experimental way of interacting with the OpenHands agent. Uh, said, "Hey, there's, uh, this pull request here where I've added this, this thing to a log statement, and probably some other things ought to have that too.
- 9:02
Could you just, uh, poke around and, and make a PR that's adding that where, where it ought to go," right? And a few minutes later, boom, comes back this 48-file pull request.
- 9:14
Like, this is really cool. You show this to me, like, a couple years ago, I would go, "This is unreal" that we have this. No- nonetheless, it is a fairly discreet, you know, uh, task.
- 9:25
Not a lot of, quote-unquote, you know, thinking needed to be done here. But there, there is a lot of grunt work that's, that's been taken up by being able to do stuff like this.
- 9:32
This sort of, you know, all-purpose tech debt dirt shoveler. Really neat. Still, I file it under extreme completion. Uh, it, it is on a, a very short leash. A lot of expertise still involved.
- 9:44
Much more extreme is the scenario of the devocalypse, the developer apocalypse. At least, um, that's what it is to us as software developers. If you're not a software developer, if you are dependent on software developers, actually, they don't see this as an apocalypse at all, right?
- 10:03
They see this as the innovator's paradise scenario because they're no longer dependent on us to bring their ideas to fruition. It sounds very nice from their point of view, and I- I'll say this.
- 10:15
Even, um, though we, we benefit from this not happening at the moment, um, if it actually is possible, if we can deliver it, I think it is desirable. Like, we should do that.
- 10:27
I think really that would be programming fulfilling its destiny. It would be finishing the project of computer science. You know, the objection to it wouldn't be, "This isn't desirable."
- 10:39
I think the objection would be, "It's not feasible to do." But of course, because of these different incentives, someone who sees us objecting to it can always say, "Hey, you just want to keep your job."
- 10:54
And, like, I do want my friends to keep our jobs, right? Of course I want that, but I just don't think that's why I'm saying the things that I'm saying about, um, how some of these, these solutions look unsustainable.
- 11:08
You know, I, I think we have real expertise that these critiques come from. So if you're going to predict the devocalypse, uh, you still must say how we are going to get there, right?
- 11:19
And abstraction leap is one of those ideas. It has a few flavors I'll talk about. But basically, if you're a believer in abstraction leap, you think that what we currently think of as code will no longer be the, uh, kind of level of abstraction, the, the substrate in which we do our main work.
- 11:40
Uh, doing something like Java code or, or Rust code today, you know, that, that will eventually be in the position of assembly language or JVM bytecode or LLVM bitcode or something to that effect.
- 11:56
Only highly specialized people would need to do that. Most of us can just live up here, uh, doing something more, uh, pleasant and, and productive, whatever that may be.
- 12:07
But internally, it's ultimately code-like a- as we currently understand it, right? So- How does that happen? One way people say this will happen is with the prompts-as-code flavor of the scenario, as I call it.
- 12:22
So natural language instead of source code becomes the main human-facing artifact that we manipulate. So how does that scale? Well, maybe it gets some kind of structure, right? Maybe there are a bunch of little requirements inside, uh, folders that are interconnected.
- 12:41
I don't know. It, it is structured somehow. It is tested somehow. The objection to this, other than maybe, uh, you know, vagueness, would be predictability. There is serious reason to doubt that LLM prompts constitute an abstraction, at least as far as something that you're able to really build on, because, uh, of how unpredictable it
- 13:06
is. Perhaps in order to build really large, long-lived projects, uh, this just is not a sturdy enough foundation. It's not a clean abstraction.
- 13:16
You could say that it will become one. Um, we have to see that happen. Or, you know, some people believe that it's possible to make up for that unpredictability with some sort of control.
- 13:30
Here's an attempt to do this, right? This is actually from, uh, a few years ago now, the Parsl paper, and you can go to this, uh, GitHub repo if you like, or you can read the, the, the paper.
- 13:41
And this is an example, for instance, where they've got 61 lines of just these text prompts and example input and output of all these different functions. And from these, uh, prompts and examples, it, it generates a 220-line Python program that functions as a Lisp interpreter, right?
- 14:01
So they've, using these structured prompts, generated an entire Lisp interpreter. Like, that, that's pretty neat, right? Um, and yet, you know, we largely don't believe structured prompts as code as a way to build real applications ha- is a solved problem still.
- 14:20
Uh, so you know, when you try to operationalize this, are we going to be able to make this into a, a real product that is, is better than its alternatives?
- 14:28
I think very much still up in the air. Another flavor of abstraction leap I think personally is a little m- more promising is domain-specific languages, or DSLs. Now, if you believe you're unfamiliar with DSLs, actually you probably are familiar with them, because in programming there, there are many of them that, that occur, right?
- 14:46
So, uh, CSS, right, the, uh, that you use to style web pages are an example, or SQL queries, or regular expressions, right? And these are a domain-specific language for particular programming tasks.
- 15:00
And then you also have ones that are made for particular business domains. Even things like Excel, uh, you know, arguably are a domain-specific language. So th- these are very prolific, very successful, uh, oftentimes.
- 15:15
Um, and what you do if you're operationalizing this, you know, in an inter- enterprise scenario is you ultimately are investing in creating a particular specialized programming environment that, you know, optimizes for the kinds of thoughts you usually need to express i- in your business domain, right?
- 15:34
And, uh, that is this upfront investment that can yield great reliability, great quality, uh, great productivity, you know, wh- when it works well. Uh, it can also backfire of course.
- 15:47
And over the last 20 years, the, um, kind of risk-to-reward trade-off has been steadily improving with lots of tooling that's made it easier to create these specialized environments s- such, such as language workbenches, right?
- 16:02
So, uh, examples of that are, uh, JetBrains MPS, right, um, one called LionWeb, one called Xtext. There's one, uh, you could call it a language workbench, they would say it is a language-oriented programming environment, called Racket, which is a very interesting Lisp dialect.
- 16:20
And there is every reason to believe that language models in various ways would even further improve the costs, uh, you know, risk-reward trade-off of creating these, these specialized environments.
- 16:32
Can they help us generate, you know, the, some of the code to process these DSLs, or can they help on the, uh, side of the editor, giving the, the, you know, business domain users suggestions to, to allow them to more quickly adapt to these languages?
- 16:50
So, um, I think this is a very promising area. I've actually declared it the year of DSLs on my YouTube channel, Craft vs. Craft. On the right you can see, uh, my announcement of that.
- 17:02
There's a recent video if you wanna dive a little deeper, or better yet, you could watch this talk called Empowerment of Subject Matter Experts by, uh, DSL aficionado Markus Voelter.
- 17:15
But again, an abstraction leap scenario, ultimately what's underneath that abstraction is still fundamentally code-like. It is still basically following the rules as we understand them today. Next, we have uncharted waters.
- 17:29
Many people argue that the future, the foundation will not even be code-like. It will be like nothing we have seen before.
- 17:40
So what does that mean? Um, some say that it will be direct model inference, so you will be not just using LLMs in code or using LLMs to code, but LLMs will be like the processors themselves, that model inference will simply be the new computation.
- 18:00
Um, or maybe the AI becomes super intelligent and it invents a new programming paradigm we can't even conceive of, right? And, um, I don't know. Uh, I think- Uncharted waters are certainly possible, but in order to plan for them, in order to take these possibilities seriously, we need to chart them.
- 18:23
We need to really see what works and, and what really scales, right? And I, I don't think we've, um, we've seen anything like this really prove out yet.
- 18:36
Getting back to the mundane, we have, uh, the next to last scenario, the review economy, right? So in this one, this is created, for instance, by the extreme completion, and we have very cheap to create all these pull requests, like the one I generated, you know, in that, in that previous slide, and we're still stuck
- 19:01
checking their output because they're not good enough to just completely approve. So ultimately, we are just reading pull requests from these AIs slinging them at us, you know? Many people find this to be kind of a dismal scenario.
- 19:17
Like, the least fun part of the job has just become our whole job. Kind of depressing. I don't see this so much as an end game, but maybe it will be a pit stop.
- 19:28
There are certainly companies that I've already seen. You know, this is some kind of reality, but I think it's a pit stop along to something better. I think it is a sign that you're not managing your bottlenecks well.
- 19:38
Pro tip, there's a body of knowledge called theory of constraints, um, introduced by Eli Goldratt starting in the, uh, novel The Goal, but there's a lot of work in its sense.
- 19:50
But the thinking processes in theory of constraints are really helpful whenever you're in some situation that it looks like this, right? Where everything's held back by this one choke point, like in this case, manual developer review.
- 20:06
Examples of what, uh, you know, improving that can look like are shifting further left. Like I mentioned with type theory, like any number of, of things, how can we reduce the error rate such that we're less bound by, uh, needing to review these?
- 20:23
Or maybe it's just a matter of prioritization. Maybe we need to pick and choose which of these things we're even gonna try to review and, you know, by shipping a third of those items, we get 90% of the value, 'cause we're doing a good job of picking the, the right ones, the ones that, that, that really are
- 20:42
going to give us something. Last scenario, and the most dismal, is the infinite pile of garbage. In this scenario, coding assistance made us feel more productive, but ultimately just exploded tech debt and dug us into a hole that even the AI could not dig us out of.
- 21:04
The quality of our products gets worse over time instead of better. Uh, ultimately, it's a world of hurt. We hope that this doesn't happen, of course, and there's reason to think it may already be starting to happen.
- 21:20
This is, for example, um, a group called Uplevel, which did some investigation in which they did this controlled trial and they found that developers who had access to a coding assistant were, uh, putting out a significantly higher bug rate and, and not even having better throughput on their issues.
- 21:42
That's pretty dismal. GitClear also has a white paper, and they have a number of interesting things in that, one of which is that this was the first year, 2024, this past year, was the first year they've seen where the percentage of code that was copy-pasted exceeded that which was moved in a refactoring.
- 22:04
If you know your way around code quality, that's a big red flag. Lots of copy and paste creates a lot of risk. Some people could argue that with these AI tools, the practices, our intuition for, for what is a good thing or not may need to change, but that needs to be borne out.
- 22:21
You need to prove that. Unsurprisingly, GitHub actually had the opposite finding. They did not find that their Copilot tool that they sell, um, decreases quality. They found that it increases it.
- 22:36
Now, they were doing a controlled experiment involving a fixed task. It was not like these other examples, um, you know, an example on, on real work code, but there's any number of factors that could impact this.
- 22:49
So they, uh, have a blog, uh, does GitHub Copilot improve code quality? Admittedly, much better graphic design. They say, yes, it does. So what do we make of this?
- 22:58
I mean, these results are obviously, you know, contradictory and ambiguous, but, you know, even more importantly, they're all from sources that have something to sell. You know, I, I have seen some more rigorous academic work start to come together.
- 23:14
I'd love next year to be talking about not some white papers and a blog, but, you know, uh, maybe a meta-analysis of multiple different, you know, independent academic studies of, uh, what results we have in the wild with AI coding assistance.
- 23:31
Will we be able to, to do that? I mean, I hope so. But one way or another, you know, um, do these make things better under certain circumstances and worse under other circumstances?
- 23:44
Does it matter how we use them? Does it matter what we use them on? These are all things we need to understand so that we know we're making the situation better and not worse.
- 23:55
People will say the models will get better, but the products we use them to build will get better only if we make them better. We need to be deliberate.
- 24:04
Again, these are the scenarios: extreme completion, Devocalypse, abstraction leap, uncharted waters, review economy, and infinite pile of garbage. Now, these interrelate in various ways, right?
- 24:19
So for example, by doing extreme completion- Many fears I just mentioned that we will try to get to Devocalypse, but actually we will over-invest in them before we're capable of dealing with their results, and we'll slide right past Devocalypse and into the infinite pile of garbage.
- 24:40
Some think, this is maybe the closest to my point of view, that a really promising area would be to combine abstraction leap with maybe domain-specific languages, combine that with the extreme completion.
- 24:52
We have a very nice, uh, DSL or say a formal methods, uh, base, you know, specification system, and then we combine that with the extreme completion to, you know, you know, help us navigate it ergonomically.
- 25:06
Th- this could work very well. So there are these multiple different end games, and if someone believes in a different one as you, you might both be right because many of them are gonna play out.
- 25:17
The industries are vast. This is going to, um, impact different areas very differently. We wouldn't expect the, uh, AI coding impact on, like, video game programming to be the same as in healthcare tech, right?
- 25:34
And lastly, I wanna leave us with this. We get a say. People have spoken about AI coding as though it is some meteor from outside the solar system just coming at us to hit us, and we're these, these passive observers.
- 25:53
We get a say on what happens. This is something that we are actively building together. So I think we need to ask ourselves, what do we want from software?
- 26:04
What is the goal? Do we want there to be no programmers, or do we want everyone to be a programmer? I don't think those are the same thing. Is it somewhere in between?
- 26:17
Where? Uh, do we want software to be better, of higher quality, or do we just need more software and we don't care about the quality? Again, not the same thing.
- 26:31
As the skills required to do our jobs change, what do we want to happen? Do we think it's a good idea to just let people go who have diligently learned what yesterday was the thing we needed, or are we going to figure out how to, uh, continue to develop a, a valuable relationship with those people?
- 26:53
I want many things from software. I want it to work well. I want it to provide value for the people who use it and for the people who build it, and I want people who work together to treat each other well.
- 27:07
Well, thank you very much for having me, and I look forward to your questions