Quality in the Age of Slop
96 points by sinclairtarget
96 points by sinclairtarget
My fear is that software development is a dead profession walking. Not because agents can actually do the hardest and most demanding parts of the profession, but because the vast majority of software in the world has always been dodgy crap that just needs to limp along. This will combine with a classic "market for lemons", where most SaaS software will become buggy crap, and buyers will have no ability to distinguish it from the good stuff. And this will drive prices and demand downward. Somebody will still be employed writing software, but the total numbers will eventually decline, and the job will mostly become slop management. The exception will be a few lucky people working on "systems of record" and other stuff that has to work. But this will be like the small number of people who make a truly good living as movie stars, professional athletes, musicians, or game developers: a demanding craft where supply of qualified workers far exceeds demand, and only a handful make a good living.
But that's only the medium term. The real goal of the AI labs is to build something that can replace human intellectual and physical labor entirely, at lower cost than any human. They don't know how to do it yet, but they will spend every last dollar on the planet trying. The thing the investors dream of building would actually be an evolutionary successor to the human race. Again, they don't know how to do it. But they'll try.
So as for my personal AI policy:
So I largely agree with the OP. Software development can be a true craft, and I have spent 30 years of my life getting paid well do something I love. But if models improve much more, we risk entering a world where the number of people who truly love the craft of software exceeds the demand for actual software craft. The dark matter of corporate internal apps will be mostly happy with slightly better slop than they're getting right now, and that is the bulk of actual jobs in the profession.
I do mourn for my chosen profession. But I mourn more for the world and for the human race. We don't need to invest every scrap of our wealth trying to build something smarter and cheaper than a human, something that could be replicated with a cp command. But we're going to burn all the those resources trying.
I started learning programming at age 10-11, and I kept at it because it was fascinating to me. It was a simpler world back then, but I was doing all kinds of cool stuff. When I got my first job, I realized that it has to be in web development. And for the most of my career, I kept the programming I do for fun, and what I do to get salary, as two strictly separate crafts. As I was getting older, I saw more and more young guys who learned programming because it was a well paying job. I had trouble understanding that they do not have the fascination that I have. So I don't really mourn. If the population of software developers is reduced by 80%, I think it will be a nicer profession to be in.
And I agree, I also use AI as an "artist's assistant", I can't have it running unattended for too long, because I know it will mess up, even the state of the art models. I do prefer having Opus as the assistant, because I don't have to over explain. I would however prefer, if it was a real junior dev on the other end, one who can learn the craft. The same as the real artist's assistants did.
My first programming job was as an assistant for a computer artist - it was a good opportunity to learn the craft of both art making and computer programming. And the analogy of coding agent as artists assistant is an interesting one.
It should be noted that many artists use artist assistants in many ways, some significantly beyond "painting the background". Jeff Koons and Damien Hirst are notable examples of high profile artists whose work is almost entirely made by assistants. It's easy to say these are bad artists who churn out big flashy conceptual works for millions on the art market with little artistic value. The analogy to the software world is easy to make.
But there are other artists whose work I think has more artistic merit despite being actually fabricated by their assistants (Jenny Holzer and Olafur Eliasson are two that come to mind). Sol LeWitt is an even more interesting case: his pieces are just their design, there is nothing physical about them. When they are put in a museum or gallery, it is up to the install team at the venue to actually make the work itself.
While it's only been in the last year the coding agents have come onto the scene, issues around authorship, forgery, labor, craft, mass production, etc have beset the art world for far longer - it might be worthwhile to look at it for guidance. I guess I'll have to add "Art in the Age of Mechanical Reproduction" to my reading list.
would you be interested in keeping an actual junior dev as an artist's assistant? asking for a friend
If someone junior comes to my open source projects and shows interest, they will get guidance. And if they are interested in more mentorship afterwards, I'm open to that.
I honestly think SkyNet is a red herring. A superintelligent AI taking over humanity is likely to be better than the superimmoral ruling class that we have today. I think the real threat is them concentrating even more power through AI and ever steepening the social pyramids, which is far more likely and far more scary than superintelligent AI.
And good luck getting them to legislate against that...
The billionaires will happily spend trillions of dollars for even a chance at replacing human workers en masse. And no, they can't actually do it yet. They would need more breakthroughs. But they will certainly light half the world's resources on fire trying.
Will they succeed? Who knows?
But within our social and economic system, just imagine what would happen if they could build models that truly competed with human beings. That would be just about the only way they could earn back the trillions of dollars they're sinking into data centers.
Like I said, I have no idea whether or not they can do it.
This is what scares me most about the Maw. It seems to want to swallow forever the distinction between good and bad, leaving a world in which there is only code that works and code that doesn't, and no code that is beautiful, or excellent, or virtuous, or funny.
That nails it for me, yes.
I think that "the Maw" has nothing to do with AI, this sentiment started well before LLMs became this capable. It's simply short-sighted capitalism. If you write code professionally, the requirements have to be fulfilled, end of story. The purpose of a company is to make money, everything else takes a backseat. As the money supply contracts due to higher interest rates, the pressure to just ship code that does what is required to make money is unprecedented. Striving for beauty and elegance is a luxury enjoyed by artists, not assembly-line workers, which is what programming increasingly feels like. Of course, in such an environment, learning, creativity and innovation take a backseat, but that will only be felt after a few years or even decades. It's a short-sighted game, but long enough for the average CEO tenure or IPO, so here we are.
Beautiful article. If we've gained nothing else from the AI apocalypse, it has led to a much deeper introspection over the relationship between software engineers and the code the write.
My first job was in games and I remember devouring Game Programming Patterns in a single weekend.
Thank you!
I am biased because this piece talks about the book that single-handedly changed my life. I like it a lot, overall, though I think prefacing it with opinions of pseuds from goodreads is not a good idea.
Gumption traps come in many varieties, but all will be familiar to working software engineers.
Gumption traps are very relevant to programming, and I think you are bound to encounter each one that Pirsig lists at some point in your career. (I've written about them myself, too, though this was before widespread adoption of LLMs.)
The advice in ZAMM is so relevant to programming that I wondered whether Pirsig, ZAMM's author, had ever done any programming himself.
Of course he did, and in the sequel to Z&AMM, Lila, he even namedrops COBOL!
This is hard to wrap your head around. I'm not sure I understand it. I refer you to ZAMM if you want a better explanation, since I probably haven't done it justice.
Quality, I think, is best described as a layer sitting above subjective and objective. For the most concise explanation I think we have to go to Lila:
Any person of any philosophic persuasion who sits on a hot stove will verify without any intellectual argument whatsoever that he is in an undeniably low-quality situation: that the value of his predicament is negative. This low quality is not just a vague, woolly-headed, crypto-religious, metaphysical abstraction. It is an experience. It is not a judgment about an experience. It is not a description of experience. The value itself is an experience. As such it is completely predictable. It is verifiable by anyone who cares to do so. It is reproducible. Of all experience it is the least ambiguous, least mistakable there is. Later the person may generate some oaths to describe this low value, but the value will always come first, the oaths second. Without the primary low valuation, the secondary oaths will not follow.
The reason for hammering on this so hard is that we have a culturally inherited blind spot here. Our culture teaches us to think it is the hot stove that directly causes the oaths. It teaches that the low values are a property of the person uttering the oaths.
Not so. The value is between the stove and the oaths. Between the subject and the object lies the value. This value is more immediate, more directly sensed than any “self” or any “object” to which it might be later assigned. It is more real than the stove. Whether the stove is the cause of the low quality or whether possibly something else is the cause is not yet absolutely certain. But that the quality is low is absolutely certain. It is the primary empirical reality from which such things as stoves and heat and oaths and self are later intellectually constructed.
(If you want, I also have some more notes about it.)
In Lila, Pirsig endeavours to construct a complete metaphysical system and therefore qualifies his definition into splitting static patterns of quailty (tiered into inorganic, organic, social and intellectual) above which sits this indefinable dynamic quality that is the focus of Z&AMM.
Pirsig might say that my opinion on AI is neither subjective nor objective because it derives from a perception of Quality. I'm not sure I can make heads or tails of that. I would instead say that my opinion is subjective—is hopelessly biased—but what ZAMM has helped me appreciate is that everybody else's opinion is too, even when it might not appear that way.
The question I would ask is whether adoption of AI is in itself a low-quality event or whether it is possible to integrate language models into the work of programmers in a way that is high quality. I think people are feeling that the way they engage with it is low quality, but because they don't have the words or the frame of mind to engage with it on a level that is not just subject-object dualism it's difficult to articulate, and they instead choose to reject it outright.
I think on some level AI enables romantic approach to programming in the sense that as long as you're able to engage with an AI-generated artifact on a surface-level and don't care to go deeper into it, it might be fine in a given moment. But when you actually try to look under the surface, into the code, you notice that there is no classical structure to it that you can reveal because it's been made by a model that pretended to work this way, but actually didn't. I suspect this is why people who have no inclination to engage with technology other than as a means to accomplish something else (executives, product designers, investors, solopreneurs, &c.) don't exactly understand the developers' frustration with AI-generated code.
He talks about how, in manuals for consumer products, every line conveys the idea that the grill/lawn mower/dish washer/computer has no relationship to you, and you have no relationship to it, other than to operate it. What counts as good grilling, or lawn mowing, or computing etc. is always taken for granted, even though that's the most important part.
This is still true of documentation and manuals for software libraries and tools. I read the documentation for Pi agent the other day and walked away frustrated because it just assumes that part - that you already know what is good way to use it and you're only looking for ways to tailor it to your preferences. And my colleagues, whom I asked "well, how do you use this thing well" just looked at me puzzled.
Reminds me a bit of Vim. If you just read the Vim manual, you come away puzzled. We needed some decades of people writing pieces on how to use Vim well. And then it turned out that Vim itself might not even be the best platform for good Vim usage, so we got Kakoune or Helix.
My wife and I are expecting our first child later this year. A daughter! I'm beyond excited.
As a father to a two-year-old daughter, congratulations! You're in for a ride of your life.
If you're looking for more material in the same vein as Z&AMM, I would recommend Hofstadter and Sander's Surfaces and Essences (making the same point as Pirsig's analytic knife but in a less philosophical or metaphorical way), Lila as a sequel that tries to structure the contents of Z&AMM more, and the work of Sevilla King and John Vervaeke.
the kind of book your freshman-year roommate (the one who wrote haikus at 2am by moonlight) would have gushed about
It's rude to put me on blast like this.
I read through the entire post. I don’t know if that’s a sign of your fine prose or just my ability to stick with a long read, but I think it’s the former.
Regarding quality, one point Robert makes is that people differ about Quality not because Quality is different, but because people are different in terms of experience.
So before I comment on quality to my team, I ask myself whether our experiences are the same. If not, telling them to “improve quality” doesn’t work. I need to be specific about what to improve.
Extending this to AI-generated code, I wonder if “quality” differs according to experience, too?
It's an immense relief to confirm that other folks paid attention to Pirsig. Previously, on Lobsters, I found that we were having almost exactly the argument that Phaedrus had picked with the classicists over whether essays have quality; the only difference is that the essays are written by chatbots rather than human students.
I can't see how I could offload programming to a coding agent without losing this sense for "the quality of the work." I have found LLMs extremely useful as a search tool and as a kind of super-charged rubber ducking partner. But to use an LLM to write code—when LLMs include randomness as an essential part of how they work—when the whole selling point of these tools is that they can produce more code than I can keep up with—would only be putting a layer of friction between myself and what I'm building.
I want to pick at this a little bit. I'm going to focus on Pirsig's framing: when a human subject looks at a physical object, the Quality of their interaction — that is, the source of the subject's value judgments about the object — emerges from the interaction itself rather than being subjectively determined by the human or objectively determined by the physical attributes of the object; we say that judgments are contextual or participatory. Not all objects participate in the same way; when a human looks at a photon, there is an inherent degree of freedom in how the photon responds, due to the Kochen-Conway theorem, whereas when a human looks at a tree, the tree is too busy maintaining its homeostasis to afford to change much in reply. In-between, M. pudica and D. muscipula do respond to touch and noise but not to gaze; it's not a one-dimensional spectrum.
So, how does an LLM harness or chatbot respond to observation? Well, it doesn't. Rather, it's a finite (and relatively small) mathematical object! All of its properties are objective and there's no choice or variation in its outputs. We can set up a pseudorandom harness in order to take random walks through its (un)likely tokens, and we can steer those random walks by force-feeding tokens of our choice, but that's about it. LLMs merely feel deep because they have hyperbolic topology and navigating hyperbolic spaces feels like zooming in with ever-increasing detail.
With Pirsig's reasoning, I can get to one of two perspectives on LLMs, but no further. Either: the LLM is a contextual system, where human inputs are the statistical context for statistically-likely replies. Or: the LLM is an objective system, where human inputs are the initial segment for statistically-likely utterances. Either way, the LLM is a sort of mirror which reflects its user at themselves, with the user only choosing the angle of approach; the user's chosen inputs are the primary means of cybernetic control by which the user attempts to reach their desired information/state and the model merely provides an array of preset options which is so large that it overwhelms humans. Perhaps the reason that chatbots provoke the ELIZA effect, leading readily to psychoses, is simply that it is a high-fidelity mirror, with flexibility and nuance, designed to distort the user's appearance with sycophancy and love-bombing in order to get them addicted to chatbot usage.
Discordians get five paragraphs! I want to connect this to your "layer of friction". You perceive using the LLM to write code as a barrier which sits between you and the computer. Vibecoders acknowledge this but insist that, like any other API, the barrier allows for abstraction and isolation, highly desirable software-engineering concepts. I perceive using the LLM as like a mirror, so I suppose that the mirror is not between me and the computer, but off to the side of me and the computer. Instead of using the computer directly, I aim at the mirror and carefully zoom in on a precise region; once I'm precise enough, my mere ability to see the computer from a specific angle is sufficient to instruct it. But that's not an abstraction at all, and it's clearly less isolated; I'm just putting in extra work in order to find a vantage point which might not exist. Why might a vibecoder do that? Perhaps they don't know how to observe the computer; HCI is participatory and a human has to have a programming context (a Naur theory, discussed previously, on Lobsters) before they can write code. Perhaps they prefer to look in the mirror because it reflects themselves back at them; it's mere vanity. But I think that those are really the only two ways in which it could ever make sense; there's enough problems between the keyboard and chair already and it doesn't make sense to add one that doesn't improve one's expressive/abstractive power.
Couldn't all of your statements about LLMs apply just as well to computer programs (which an LLM harness is a special case of), a mathematical axiom system, or an essay? For that matter, if an individual photon can "respond", then would an LLM using a quantum random number generator for its seeding also count as "responding"?
Sure, all classical computer programs are objective. In context, this merely means that the classical AGI programme is impossible. For further food for thought, consider what it would mean if there were a classical program implementing Blockhead. (This is more fun than it sounds. For example, what's the computational complexity of Blockhead's ability to predict the next token?)
The indeterminism of photons can be used to generate random numbers, sure. That's only enough to generate one random walk per stream of photons, though; a single photon doesn't magically animate a chatbot. Conway had similar pondering: if humans have free will then so do photons; humans have lots of internal electromagnetic activity and measure lots of photons with their eyes; so, do photons animate humans? But he also pointed out that there are molecules of spin class zero which are built from composites of particles with non-zero spin class; it's not always the case that combining lots of photons will result in a composite with lots of degrees of freedom. On a personal note, this is visceral for me because I suffer from the inability to choose between identical options.
Let’s not pretend everyone was invested in high quality products (the broader definition, including hobbies, architecture , music, food, art , etc), and suddenly AI has undermined that. The modern era dismantled the commonly held approach to beauty and quality, starting from just after Napoleon, and accelerating in the 1920s to the 1970s.
Perhaps AI will be a mirror and wake people up to the brainwashing of making everything ugly, so they will strive for beauty once again.
I enjoyed this, thank you for writing it.
Personally, I feel like I straddle both sides of the “line”, insofar as there is one.
On one hand, I see that I yearn for the connection and relationship with the code that I would write without AI, and I notice that when I leverage AI that connection is lost. It’s real.
On the other hand, I think that the level of abstraction that leveraging AI nudges you upward towards, provides its own opportunity to apply discernment and impose one’s view of quality at that higher level of abstraction. In these cases, yes, the connection is still lost or degraded at the level of the code itself if you let AI perform that for you without sufficient involvement on your part. But it is not lost at whatever level of abstraction you are not asking the AI to contribute at. In my case, for my personal projects, this is at the architectural level and when defining interfaces. For example, recently I’ve been building harnesses and pipeines that make calls to various LLM providers. I think very carefully about the inputs and outputs to and control flow of these calls and how to compose them into a flow that accomplishes some broader goal I have. When I take the time and put attention and care into this process, I feel like despite losing my connection with the code itself I’m not losing my connection with my intention and the architecture. In other words, for me, quality and craft are not limited to what I leverage AI for.
This is sort of an exhausted analogy at this point, but it’s similar to being a manager or running one’s own company. I tell people that the hardest checkpoint in any CEO’s journey is the point at which they give up control, i.e. control over the ways in which their vision is precisely accomplished. It is simply not possible for the CEO of a sufficiently large enterprise to know every detail of how their vision is accomplished. I think this is true for CTO’s as well, albeit to a lesser extent, since they must still concern themselves with some technical details.
The mourning that I’ve gone through, the thing I’ve come to accept, is that there is a tradeoff between time spent, understanding, and output on any one venture; optimizing for any two shifts attention away from the third. But there is still ample opportunity to exercise discernment and have a quality to whatever combination is optimized for.
I am comentor B in this article and read it carefully. I haven't read ZAMM but I have read a bit of zen.
This makes a lot of sense, and most folks when given a free hand (sudden money or a boost in productivity) promptly waste it by becoming the biggest most obnoxious pieces of shit possible. There is some obvious dread around this.
People who use a computer tend to have a limited appreciation for how much craftsmanship and effort it took to make a book by using a typewriter movable print writing it by hand your own memory an ability to convince others to repeat your words by virtue of their beauty alone.
There is nothing about the computer that prevents people from investing a lot into the quality of their output and making something great. There are a lot of pieces of shit out there.
random bit on ZAMM: John's "romantic" view of technical artefacts can be defended as practical if it's applied on a case-by-case basis. say, you work on a project and rely on open source infrastructure. what does it do to your project when you need to rabbit-hole into an obscure kernel or compiler bug? one that you can easily work around, document, and reverse the workaround when someone fixes it? the bottom line is: one has to chose his own's battles wisely.
what does it do to your project when you need to rabbit-hole into an obscure kernel or compiler bug?
I did do this, and I got a line in the Linux Kernel manpages project. I don't consider it a waste of time because the experience made me a better programmer.
I re-read Pirsig about a year ago, mostly to test whether it still held up (last reading was as an edgy high-schooler during breaks as a dishwasher). I remember the head chef coming in, he'd been a wild man in his youth, and sort of snorting when he saw I was reading it, but kindly of course. I also ride motorcycles with a kind of religiosity. Oh, and I program. So yeah, this hits for me.
I've been working through a lot of the same questions as you, Sinclair, and likewise have been posting as I go through the process. The tension I held in my head was more of a Quality vs poshlost' thing, slightly moreso than Quality vis-a-vis the "craftsman ethos" your post describes. If we are only measuring the output of the machine, and assume it gets "better enough" in time, then yeah it's probably time to take out the sackcloth and ashes if it supplants the self-as-craftsman. I don't think that's quite right, though, or at least it strikes me as premature.
I've got 3 kids so I can relate to the existential anxiety-by-proxy. For myself, I ended up abandoning the argument against AI on qualitative (small-q) terms. My fear is what it means when I stop thinking critically and fire up chat to feed me the answers, and expanding outwards, what this means culturally and how it dictates what gets rewarded (economically). Going to be a wild next 5 years. Thanks for sharing your thoughts, they're valuable.
So, in summary, an exhortation, or wishful thinking, for a return to cottage industries where, seen through some nostalgic glasses, the workers were one with their product so to speak. I don't know. I suspect ever since humans learned that specialization could bring benefits to the tribe, there have been two types of people. Ones who loved their job, and the ones who were 9-5 clock punchers. I suspect the quality of the work was somewhat orthogonal to which group one was in, however.
Ones who loved their job, and the ones who were 9-5 clock punchers. I suspect the quality of the work was somewhat orthogonal to which group one was in, however.
I have worked a variety of jobs from retail, to sorting freight, to factory work, to programming, to senior management.
My experience is that it's not very orthogonal at all, in any of the industries I've been in ;)
As someone whose camp varies from time to time, it's not quite as simple as types of people. There are certainly folks on the extreme ends who will consistently be one or the other every day no matter what type of work they're doing, but for most the environment matters too. The working environment, certainly, but other factors too, like access to a fulfilling social life outside work and such. It's complicated.
But I think dismissing the post as wishful thinking or nostalgia is oversimplifying. There's no grand march of progress toward a predefined industrial end state, no single analogy that covers every possible situation.
This book fundamentally altered my worldview when I was just graduating high school. Ironically, I read it around the same time ChatGPT came out, but I never considered applying his findings in the way you have here.
You've given me a lot to think about.