I don’t mean my job in particular, I mean programming in general. For those that wonder what programming is, actually, I usually use a cooking recipe metaphor. Programming is like writing a really really detailed recipe. A lot of them, really. Maybe a whole cookbook worth. I’m going to stretch that metaphor beyond the breaking point in this post and say that programming is like writing detailed instructions for a feast and then also preparing it.
AI has changed my job. Let’s say that started about a year ago. And it started out small. “Look me up a recipe to do this or that.” And it did – and it was helpful. Very soon after that it was also doing minor prep work: “dice the onions.” And more often than not it would. For a while I’d have to yell at it and tell it I said diced, not chopped. These are things that amounted to a single line of code that I would have had to look up the details for because the syntax was tricky; not complicated, just tricky. And it would get it right or mostly right and it did it way faster than I could look it up and type it in. For reference, software of any size is 10’s of thousands of lines of code. Large programs are millions.
After a few months it got better and it became clear that starting with a plan could get you a pretty good result a lot of the time. “Write me a recipe for making a cake.” And it did. “No – I mean a black forest cake.” Updated. “Yes, but I want the frosting to be cream cheese based with some chocolate curls on top.” Updated. “No, you idiot, not plain cream cheese – chocolate icing with a cream cheese base.” Updated. “Great – now execute.” And the AI would then generate a pretty solid bunch of code and do a pretty good job integrating and smoothing the edges.
That was a month or two ago. Now it’s “Make a plan to do a 5 course meal with a German theme.” “No – a little fancier – think less beer and more liquor.” “Great. Do it.” AI generates the code. It does the integration. It writes the tests. On a good day it even cleans up some of the adjacent code. When it’s done it points out areas that it was not sure about or decisions it made that it thinks I might not like and maybe it should change. And maybe it’s not as nice as if I did it – it used pre-made bread crumbs instead of starting from scratch. Do the folks eating care? Probably not. A lot of programmers probably lean more into the Gordon Ramsay persona when talking about code. Mostly it’s more than good enough for the user.
As a programmer, I no longer write the recipe. I don’t chop the onions. I don’t fry the wiener schnitzel. A while ago (months) my boss asked me what I thought of all this. I told him I don’t mind because I’d been tech lead before and I didn’t mind doing that. And that’s still mostly how it is. Or at least somewhat how it is.
Here’s the thing: the only difference between you and me is that I know how to order a meal and I have a kitchen. That is to say that I have a development environment on my computer and I know how to tell AI what I want out of a program. The other thing is that about a year ago I would not trust an AI to dice an onion. A year.
Probably back in the aughts my father asked me if I thought it would be possible in our lifetime to ask a computer to write a program and have it just do it. I thought about it and told him not in his, but maybe in mine. Maybe.
Here we are. If you know what you’re doing you can tell AI to write software for you and it will do it.
I like the idea of a 5 course meal with a German theme, but can you get it to deliver? That’s the question.
Mom
Yes. It will do delivery.
This is very apt, and I absolutely agree. A year ago (was it only a year?) I tried out Copilot in Visual Studio Code and it would consistently just flat out make up nonexistent API calls. “Write a function to sort this big bag of JSON objects,” and it would be all, “Sure thing! Here you go, a function that straight up will not compile!” Today, I ask, “How would we go about listing all the fonts the user could use, to populate a UI element,” and Claude comes back with, “I see what you’re doing and we could do that, but would you be interested in reading Truetype fonts also, and sticking that capability underneath the existing font registration and reading API?” It’s gotten ever so much better, and it’s absolutely a time saver. No, I don’t happen to know the nitty gritty details of Truetype fonts, and maybe that means I’m missing out on some hidden technical joy, but I’ve got sheet music printing the way I want it to look and I still get to have time for stuff that isn’t programming.
Ah – actually it’s more like 2 years. Even so.
Is this post missing the punchline?Because if you’re getting an actual German Feast out of what AI can do at your job, why is Mark is getting something that looks like a German Feast and tastes like freshly poached skunk.
‘Cause he’s doing something super unusual. He’s making Venutian feast.
I think the “weirdness” of what I do (cybersecurity software on the Mac, for those who don’t know me) is an important part of it, for sure. If you want to do something that isn’t “common”, the LLM really struggles with it, having had no examples to fit the solution towards.
I also believe, based on the results that I get for what should be well-trodden territory, that there is a tendency for LLMs to write excessively-complex and/or fragile solutions to even very simple problems. Actual research tends to support this idea, as well.
When you think about how the coding agent loop works, it’s not really surprising. The overall code-generation loop in an agent looks something like: Generate code, evaluate whether it does what the human prompt asked for, modify it if not, and repeat.
This is obviously prone to “just twiddle knobs until it works”, which is also how some of the worst human-generated code I’ve ever had to work with came into being. You could think of it as getting stuck in a local minimum while descending the gradient towards “good code”.
Regression tests are a good way to at least keep the LLM from breaking anything else while it fumbles its way towards an answer. And of course, all of the legacy projects that I work on have excellent test coverage. Of course.
Great post Kurt, I feel the same. Only recently our workplace allowed us to connect our email and Gdrive to our GPT. This morning, it noticed I registered for something, but hadn’t put the event on my calendar. It literally wrote me a nudge as if it were me, right under the area where you go to chat like usual. It made perfect sense so I clicked it and then it responded that it took care of it and put it on my calendar with the event login info. It tells me when my boss emails me and literally says “remember to reply quickly!” Hahahaha!