The Value of Things
49 points by cgrinds
49 points by cgrinds
This is a beautiful post; thank you for sharing.
One thought that strikes me (and I can't recall where I read this) is that GenAI excels at programming because code is better if it's more idiomatic, more predictable. Whereas with art/music/writing/etc it's often the opposite: the more spontaneous or surprising it is, the better. So I wonder if our field is uniquely vulnerable to GenAI, and the analogy with other fields doesn't fit as well.
Interesting observation! I have very complex feelings about this.
I work on Dart, and I both wrote "Effective Dart" and maintain the automated formatter. So much of my job is directly focused on making code more idiomatic and consistent. And by that exact same token, the resulting code is less novel and has less information entropy. That probably does make it more amenable to AI generation.
Another larger part of my job is designing new language features. Lately, many of those features revolve around brevity — giving users a more concise syntax to express the same semantics. Those features exist to increase the density of the code, to eliminate the boilerplate so that what's left is closer to the novel semantics.
Lately, I find myself wondering how much the latter part of my job matters if an AI can just easily pump out the more verbose boilerplate anyway. I believe it's still important for humans to be able to read and understand the code, so brevity still matters there. But people are also increasingly relying on AI to read the code and explain it to them.
I keep reading accounts where someone has entire programs where they haven't read any of the code and are completely delighted by that fact, and I just can't relate to it at all. So much of my love of programming comes from the joy of actually writing the code and understanding what it does.
But people are also increasingly relying on AI to read the code and explain it to them.
At least today, I feel like reading code has become more important.
Since code depends on other code, there's a vast difference in usability between something that's 90% right and 99% right, or even 99% vs 99.9%. And I don't think we get those last few 9s without humans in the next 5 years – LLMs reading code aren't much more accurate than LLMs writing code. My team has actually shifted towards stricter requirements for making code easy to review.
if an AI can just easily pump out the more verbose boilerplate anyway
were this true, the logical conclusion would be to have LLMs generate assembly.
caveat: i don't use LLMs, but the abstractions we make in language and library design are just as valuable, if not more, when using them. i see three major points:
training data and output are both much less verbose, making training and inference cheaper
syntax more closely matches semantics, and relationships between tokens are stronger, giving more bang for your buck in terms of model size to output quality
the guardrails that language abstractions provide are necessary for the reinforcement learning tricks to work. for a simple example: rust's borrow checker provides efficient and reliable feedback if you want to RL a model for memory-safe code (not to mention GCed languages removing the need entirely), but if you wanted to do the same in C, let alone assembly, the best you'd have is a very expensive and leaky loop with valgrind
based on point 3, lean has a lot of potential, and should be a point of interest.
Yes! If you really don't care about reading the code, then you shouldn't care if you're generating Assembly, Python, C or Rust
But we will come around to the fact that we do care, because humans need to collaborate. (Not just write, but debug, optimize, explain, etc.)
If you can't read the code, then there's nothing to collaborate on! If it's say 10,000 lines of assembly rather than 200 lines of Python
The complement to writing is reading -- when writing code becomes cheaper, then reading (and explaining) code becomes more valuable
(I also think language design becomes more valuable. Right now we are using machines to exploit inefficiencies in our abstractions/languages. But if we can write code faster, then new languages actually have more leverage. Again, if the language didn't matter, then you could generate assembly or C instead of Python. But we don't do that -- LLMs are better at Python. They are language models and not models of computation)
If you can't read the code, then there's nothing to collaborate on!
Depends on who the "you" is here. One could have the LLM read it and explain it in a way suited for your understanding. I assume thats partially the idea behind stuff like opencode
Time will tell, but I don't think that will be a good way of working ... i.e. the people who maintain readable code (with or without LLMs) will be able to build better / more interesting things than the people who can't read the code and need an LLM to explain it to them
Indeed, time will tell. But, as someone who likes writing readable code (often to the point of grouping things like paragraphs and avoiding formatters), some of the people I've seen who use LLMs to write & interact with code they dont read directly have gotten it to make some interesting things still.
Contrary to what I believed when using it to hack together some js, LLMs when used correctly can generate actually readable code (even if the one who prompted it doesnt understand just how impressive it is for it to do that).
But we will come around to the fact that we do care, because humans need to collaborate. (Not just write, but debug, optimize, explain, etc.)
Aren't LLMs already capable of debugging, optimizing, explaining, etc? If the majority of activity is writing prompts, then why even bother learning how to read code? The majority of programmers today don't bother looking at the assembly compilers produce, why should they? All you need to do is read the prompts.
Compilers are among the most robust, trustworthy software we have. When we compile a given piece of source code, we can trust that we will get identically functioning machine code every time. Note: I say identically functioning, not identical, because compiler optimizations can and do change over time, but we still trust that the functionality of the resulting code will remain identical. LLMs aren't nearly that trustworthy.
I'm ... not optimistic about programmers having come across a few ... interesting ones over my career. The one who's C code wasn't indented at all, with one, maybe two letter variable names (there, it was quicker for me to rewrite the damn thing than to try fixing it). Another one who refused to use a keyboard and would use the mouse to cut-n-paste the code. I don't think it was anything to do with motor skills as he was quite proficient with the mouse. Another one who write a signal handler for SIGSEGV that would try an operation using a second method if the normal code segfaulted---and it segfaulted enough to warrant the signal handler but not enough to do a root cause analysis? Yet another one who wrote a wrapper around syslog(), called Syslog(), that literally called syslog() after calling vsprintf(), at the same time #define all the string literals used for Syslog(), such that the compiler could no longer catch format mismatch errors. For a system that was every only going to run on a POSIX system.
It's these types of programmers that I'm thinking of who don't care about code quality (well, maybe the cut-n-paste one does) that would most likely prompt an LLM and if the resulting code even barely works, calls it done and moves on. They would probably ask the LLM about the code base instead of reading the code directly. I think these type of programmers are larger in population than we might care to admit (yes, I know, "citation needed"---it's a gut feeling I have).
Yeah I'd say it's similar to the difference between:
I'd be interested if anyone would actually do the first thing rather than the second
You can do it, but it may get bogged down in errors / context length. The program is sort of invisible / opaque / untrustworthy
The second way is better because you can look at the logic of the script.
I'm pretty sure somehow has written about this difference ... maybe it has a name
But there are many ways of working with LLMs, some better than others ... I don't think generating masses of unreadable code would be a good way. But sure, let's see -- I'm glad people are trying the other way :-)
I recently wanted an LLM (Opus 4.5) to do a variation of 1 (the cases were too complex to automate and required contextual analysis).
Let me tell you, Opus went for 2 straight away about 5 times simply refusing to do it manually after “seeing the pattern” 🫠
I ended up replacing the 150 print statements with logging by hand.
So why would someone not comfortable with programming use the second prompt? Isn't the first prompt what the pro-AI crowd is going for? Democratizing computing power?
Lately, I find myself wondering how much the latter part of my job matters if an AI can just easily pump out the more verbose boilerplate anyway.
I've been on a little spree reading about Gas Town and other vibe coding topics. Steve Yegge and team generated 189k LOC for Gas Town in about a month. It makes me wonder if there is a ceiling on how large these codebases can get before the AI starts to get confused about how they operate. After all, they only have so much context and you can only carve this information up so many ways. If there is such a limit, you could start to see large AI projects start to shit the bed.
Even if there isn't a limit on how big those vibe coded projects can get, I think producing more concise representations of information is useful for people to keep up with the AI generated code. Sure, the AI could generate a bunch of boilerplate, but would people try to review it? People might try to review the code if it was small enough to understand it.
Finally, there's the less meaningful, but still utile matter of managing context, which effectively manages cost. So anyway you shake it, I think there is value here.
I used to work on a JavaScript framework (Lightning Web Components), and I suspect that both language design and framework/library design will change a lot in the future. For example LLMs seem much better at dealing with Tailwind than CSS – which makes sense: they don't need to cross-reference a CSS selector in one file to map it to an HTML tag in another file. Your point about concise syntax is another case where it just doesn't matter much to the LLM; they will happily repeat boilerplate without extracting a shared function.
Then again I find it interesting that a lot of the bad habits of LLMs (e.g. verbosity, not sharing code) are exactly what makes it hard for the next LLM to read the code (more tokens to process). So there may end up being a happy middle that actually isn't too far from the optimal thing for humans today.
WRT
Lately, many of those features revolve around brevity — giving users a more concise syntax to express the same semantics
I think that part of Software engineering will gradually be reduced in importance. I remember a number of libraries, such as Butterknife and others, when I started working on Android -- they helped to reduce the boilerplate, but looking at it now, it was a waste of cognitive cycles on my part and now additional work to remove them.
I am sure the decay of importance for these boilerplate abstractions at a language level is going to be much slower than at the library level -- but I think those will still persist.
What I would say, however, is that language syntax abstractions that correspond to a particular and effective architectural design pattern, or an implementation pattern, will continue to be important, and even more important in the age of LLM coding.
So my advice would be to focus Dart feature engineering on elements that correspond to strong architectural patterns, rather than boilerplate reduction. Those features will continue to be a valuable investment to learn by users of the language and for the tooling that generates/maintains code.
Prompted by these recent developments, I have been thinking lately about climbing upwards the programming abstraction ladder, in further consolidation and preservation of meaning; where syntax, semantics and runtime of languages can be freely and arbitrarily fine-tuned and adapted to the circumstances——whether it is meaningful to develop ecosystems powerful enough to realize that. It'll require developing substantial amount of theoretical machinery, due to the need of (including, but not limited to) generic representations and compositions of programs across semantics(es?), of which I am able to estimate (with my limited knowledge and understanding) some areas of interest: semantics schemas and ontologies, type theory and category theory, domain theory and (finite?) model theory and so on. While scouring through literature, I even found out about some recent research articles in and around this direction:
Evidently, the bar of intelligence and ingenuity, not to mention mathematical aptitude, of future professional programmers will be raised higher and higher, in competition with synthetic intelligence, until human limit is surpassed. Where does this leaves the rest of us is worth pondering upon.
I was listening to a podcast this morning on an area outside of programming and one of the guests was an excited person who discovered GenAI and he used one of the "apps" on his phone to create music (lyrics and music) about the interviewer. The app came up with music that sounded very similar to something else I heard. I only have a passing familiarity with western music (but I am very familiar with the eastern classical music, so take this with a pinch of salt!), I think the "western" pop music has a lot of repetitive sequences, this mostly comes from my observations on computer generation of music where you can actually program and compose (as in "merge") many parts of individual sequences that fits in a framework into one big sequence in time. I think this probably makes it a lot easier for GenAI to create it. This may not apply to all forms of music, of course.
The clarity of thought and expression in this post really shines. I plan to share it both with friends who use AI in an anti-social way (by sending senseless slop they "made" but haven't even read themselves), and with friends who think that any use of AI whatsoever is inherently bad or unethical.
Using the framework from the post, I think there is a new opportunity to deliver both meaning and utility with AI: LLMs make it possible to do (some) programming projects with non-technical loved ones. In other words, AI can turn programming into a group activity with friends or family.
In the past, my non-technical fiancée has tried to sit with me and work on coding projects. She's interested in learning about my hobbies, and programming is how I spend an inordinate amount of my time. But while working, we inevitably hit a situation where I can't explain my thought process and solve a problem at the same time. Either I am able to stay in the flow, but I get silent and it's boring for her; or I can explain myself, but I lose my focus.
AI completely changes this, and makes it possible for us to work together effectively. We discuss what we want to do, write a prompt together, chat with each other while the LLM is producing output, I (optionally) explain the code diff, we decide if the change is good, and the loop continues. We're producing something of value, and by virtue of spending time together, the act of creation can have meaning, even if the resulting output wouldn't have meaning if I had vibe-coded it alone.
I don't think your friend who thinks any AI use is unethical will be much impressed by a blog that does not in any way mention the environmental impact of AI.
In the article, I do say:
The global effects of AI are just as if not more important. But I haven’t sorted out my feelings around that to have any idea what to say here.
Not talking about a thing is not saying it's not important. When I write about my dog, that doesn't mean I don't love my kids more. It's just that in that moment, I have something I want to say about my dog and not my kids.
Oh, no, absolutely. That wasn't dig at your post, but instead at how I don't think it's likely that a person who is opposed to AI on ethical grounds would be at all affected by it.
The ethical position would (usually) be that even if LLMs were undeniably a net positive downstream of the prompt, using them still would not justify the negative environmental impact upstream, at the datacenters.
In fact, they would probably be worse, since utility begets adoption, begets capacity extension.
Yes, I agree 100% that the weight of the externalities can dominate if you're trying to answer the overall question of whether LLMs should be used at all. But calculating all of the weights on both sides of that scale is very hard. I don't think we can even state confidently whether, like, combustion engines are a net good and we've had over 200 years to ponder that question.
The consequences are so indirect and long-term that I suspect that even if we could correctly add up everything today, the answer may still change in the future as the repercussions on society continue to unfold. (Combustion engines probably seemed like a much better idea before we learned what they do to the environment.)
In the absence of clear answers at that scale, we still have to decide on a day to day basis what to do with our lives. My hope with the article is that it can at least usefully answer (in the negative) for some uses of LLMs even when we don't know whether they are a net good.
(let me start by saying this website is beautiful)
This article resonates a lot with me. I’ve been going through the same questioning, complicated nights, etc. and i’ve made a similar move (writing a blogpost about how i feel about LLMs) though i’ve yet to publish it (I’m not sure how it could be received).
Is it just me, or does the agents/GenAI hype train has become so much more prevalent and hard to miss in a matter of weeks? In December 2025, I wasn’t asking myself these questions, but now it’s 2026 and it looks like the shift is here and inevitable.
Is it just me, or does the agents/GenAI hype train has become so much more prevalent and hard to miss in a matter of weeks? In December 2025, I wasn’t asking myself these questions, but now it’s 2026 and it looks like the shift is here and inevitable.
A lot of people seriously tried out agents for the first time over Christmas break. The providers also gave a lot of free usage, increased usage limits which got a lot of new users.
(let me start by saying this website is beautiful)
Thank you! I put a lot of work into the new design.
or does the agents/GenAI hype train has become so much more prevalent and hard to miss in a matter of weeks?
In my corner of the tech world, it's been steadily ramping up over the past year. It does feel a little fever-pitched these days.
This is so kindly written that it makes me jealous, I'd read more of this any day!
Today, with the help of ChatGPT, I could probably put together a feature-length screenplay in a tenth of the time. It might even be an objectively better screenplay for a better movie.
I like to do game development as a hobby, and this is where this kind of sentiment really hits hard. A game where I did the graphics poorly means a lot more to me than where an LLM did most of fun-but-difficult work. And it carries over when deciding to purchase a game as well.
I used to make videogames for a living and still tinker on them as a hobby, so this is an area where I feel particularly conflicted with AI.
I certainly don't want to use AI for my writing where the AI output would be directly read by someone. I feel the same way about using AI to generate game art assets. On the other other side (ignoring externalities for the moment) I can see good justification for using AI to accomplish utilitarian goals like writing software to solve real-world problems.
But game code is somewhere right in the middle. If someone was using AI to help them code their game, I don't know if I would judge them. I don't think I would end up using AI there myself. But that's largely because I want to enjoy the process when I work on my game too, and I like writing all the code myself.
I did not know who was the author, I've enjoyed the whole article, and at the end I wanted to know who was the writer before I go back to reading my current book, crafting interpreters, and oh. He is consistently interesting.
Anyways, that's a good point made here. This is also an interesting basis of "the autrichian school of economy" as we learned that is economics if I recall well.
10 references to "generative ai" whatever it means, back in the days people cared about grammar or citations, nowadays it's about throwing things on LLMs..
the value of things went down thingnifically, but those not are the things to optimize value of