Take fuckin two. I'm not going to retread how much I hate AI--just read above--but let me just say, being forced to use it for several months has made me hate it even fucking more.
The above post is one of "don't throw the creative and fair use rights-baby out with the AI-flavored bathwater."
Now we've gotta talk about: you don't understand AI, and the things it's actually good at. Yes, it is good at things.
This is a necessary post because you can't fight something you don't understand, and if your reaction to every single AI thing is "AI sucks, it's so bad at literally everything," you have a losing stance, and you're going to lose, and you're going to lose because you're wrong.
Disclaimer: if you come into my mentions to gaslight me about what's happening to me, preemptively fuck off. I will block you without comment. We can have even a contentious debate as long as you don't tell me what's happening in my own god damned life and at my own god damned job.
Got it? Good.
First of all, "AI" is a garbage marketing term, and we have to unpack that a bit. Back in my day, "AI" was what a video game boasted about its enemy behavior. Then, as statistical machine learning and genetic algorithms got a little useful, people started calling that AI. Now, it really seems like if a computer does it, some company's marketing department is going to call it "AI".
And here's the real big problem about being mad at an "AI" technology: LLMs? Generally considered the most ridiculous, wasteful, and harmful of the "AI" technologies? I'll bet you right now you use exactly the same technology on your phone every single day. When people call LLMs "fancy autocomplete", we're not exaggerating. LLMs are--literally--the same technology that gives you texting autocomplete, just MORE--more training, more compute, more energy, more output.
And nobody really has a problem with texting autocomplete, right? Like, it's the butt of "it keeps changing fucking to ducking" jokes, but that's not the same as having a problem with it.
So before we even really get into what I want to talk about, we already have a huge problem with "AI" criticism: what the hell are we even criticizing? To be clear: this is a deliberate problem created by the AI industry and its boosters, on purpose, to create exactly this confusion. People say, "AI sucks!" and the boosters can then point at three things some unrelated technology actually does well.
So, step 1: actually know what you're criticizing, and what's bad about that specific thing. And, when some AI booster is pushing their nonsense, pin them down on what exactly they're talking about.
Now for the real stuff. Now for talking about LLMs, and what they're good at. Yes, I realize this is going to be controversial. But, again, the point is that you can't actually fight what you don't understand. You need to understand this.
Obligatory reminder: fuck LLMs, fuck every LLM company, I hope every one of their graphics cards spontaneously combusts with no evidence for why. I fucking hate this shit.
LLMs are extremely complicated and sophisticated statistical algorithms that are quite good at predicting the next most probable token/word in a chain given some input context. Even "quite good"--when it comes to the whole of human language input possibilities--is actually quite bad. And, since it's not actually thinking, and doesn't actually know anything, it doesn't know whether or not it's bullshitting, or wrong, or to what degree it should be uncertain. People talk about "AI hallucinations" like they're a separate thing; the reality is that every response from an LLM is a "hallucination", and it's just that sometimes the hallucination matches reality.
However.
What if we weren't talking about the whole of human language? What if we had a constrained language set? What if the language set was constrained not just in possible words, but also in specific and regular grammar and syntax? What if we had the ability to automate testing the correctness of this language?
That's right: I'm unfortunately here to tell you that LLMs are really good at programming. Actually, I don't know that I can say "LLMs" broadly are really good, since most of them seem to unbelievably suck. But, what I can tell you is that Claude is really good at programming, and if Claude can be good--and it is--that means it's not a problem in the same way that trying to flap my arms is a "problem" for my ability to fly; if Claude can do it, that means any of them have the technical capability if they're trained, configured, and run properly.
"But all the code slop!"
Yeah, the slop is bad. There's lots of it. It's overwhelming open source maintainers, creating bugs all over the place, and convincing non-programmers--especially managers--that anyone can instantly become a programmer. It's really bad.
But slop is just the dumbass's way to program with an LLM.
Let me walk you through what people are calling "spec-driven development". See, the ultimate problem of LLMs is the "context window". RAM is limited--technologically, not just monetarily--so an LLM can only process a certain amount of data at a time. The model is the shed full of tools, the context window is the workbench: the shed stores more tools than you can work with on the workbench at a time. As a "conversation" with the LLM drags on, the context window fills up, and the LLM is forced to "compact" its context window to continue. You know those "AI summaries" that browsers have been pushing for a while now? And how they tend to suck and often don't summarize accurately? Yeah, that's what the AI is doing to "compact" its context window.
In practical terms, what does this mean? It means when someone tells the AI, "Make me an app that does X," the AI says, "Okay!" and then it churns. For hours. Filling up its context window, compacting it, filling it up again, and compacting it again. Over and over and over in the worst "copy of a copy of a copy" chain since Multiplicity. It can't hold the whole program in its context window, and it doesn't even really know to try. It builds six ways to do one type of thing, uses only two of them, and the two it picked have inherent bugs to them. This is slop coding.
LLM coding is an exercise in managing the context window--or failing to--and the solution seems to be spec-driven development. Because here's the thing: LLMs are really bad at "make me the whole thing!" but they're really good at "make me exactly this one class that does exactly these four things". It can fit "one class that does four things" easily into its context window.
So, what's an LLM coder to do? We write specs. We create specs for how a program should be structured, where different classes will go, what third-party libraries will be used, what algorithms will be used, what the API is going to look like, how each piece is going to be tested, etc. etc. etc.
Then, with all these specs, you tell the LLM, "split the specs into logical work items, and run agents in parallel to complete the work items in order until they are complete". Since the work items are split across the agents, each agent has a big enough context window to handle its specific job. You don't get spaghetti code. You don't get 6 ways of doing the same thing. You get a program structured exactly how you told it.
"If you have to write specs with that amount of detail, doesn't that take as long as just writing your code yourself?" No, actually. First of all, most competent teams are already halfway to a spec with Jira stories. Converting a Jira story to a technical spec--which is something that the LLM will also accelerate--takes little time at all. It's not the "100X PROGRAMMER" nonsense that boosters are yelling about, but many teams at my company have seen 3x to 4x speed increases, with no drop in quality. In fact, some minor bugs and annoyances that have been sitting around for years are getting fixed because they're small enough for their Jira story to be thrown whole at Claude, and Claude will spit out a working solution some time later--nobody cares how long later, because they're busy doing something else. Unit tests--considered by many programmers to be the worst part of their job--can be generated by Claude on simple descriptions, so code coverage is increasing. Overall, code quality is improving as we use more AI.
Especially since all engineers review their own code, and any good team was already doing peer code reviews as part of their PR merge requirements. This means the AI's mistakes are unlikely to actually get released, and are corrected like any other bug found during development.
Oh, and the LLM will review your code, also, and catch any number of stupid mistakes or maintenance issues it made before you even need to push the code up for peer review.
Note: don't rely on just the LLM code review. Have real engineers review that code.
So. LLM programming is 3x to 4x as fast as manual programming. I've seen this reliably across my whole company for six months now. This isn't just my opinion; we measure this shit. We have been building more tooling and knowledge on how to get better, so we'll likely get even a little faster than that, but I doubt we'll ever hit the 10x that most AI boosters are trying to convince people is real.
But 3x or 4x? This is a result that every manager drools over. My managers are--literally! They've said so directly!--willing to pay more than my whole salary to keep me on an LLM. And why wouldn't they be? If I'm getting 3x the work done, my salary x2 still puts them 1x my salary in the black vs. hiring another person as qualified as me.
And this is why you'll lose the "AI coding" argument if your stance is "AI code sucks and will always suck, just don't use it." Because in real, immediate, practical terms, it doesn't, especially if you're a manager, not a coder. Don't get me wrong, it sucks in so many ways, and I will get into that. But you can produce good AI code, and it can be much faster than hand-coding, and it can result in a higher code quality than hand-coding.
I will not argue about this reality. This reality is what I said I'd block people for gaslighting me about. Anyone who wants to just stick their head in the sand is welcome to do so without personally insulting me. I'm yelling that the wolves are in the fields, and I'm not going to accept you telling me that I'm The Boy Who Cried Wolf even though I've never falsely cried wolf before.
"But I read a study that said--"
First of all, that study said something about the state of AI coding from last year or the year before, and this shit has changed, fast. I was able to push back on LLMs last year when people were just messing around with Copilot and Codex and even Claude, and the whole workflow sucked and it produced bad output, but Claude Code this year is a whole different beast. I don't know what they changed, but I know that it changed.
Secondly, so many people and companies think they can get away with slop coding for 100x development, and a lot of what gets measured by these studies is either entirely slop coding, or a mixed bag of slop and spec. LLM coding only "works" with disciplined and experienced engineers writing specs and checking every single line of output. The existence of people chopping off their foot with an axe doesn't mean a lumberjack can't chop down a tree.
Now, let's get into the real reasons why AI coding sucks. Because, oh Lord does it suck.
The thing I liked about programming was the programming.
I'm currently stress-programming Rust in my evenings because I don't get to program at my job anymore. I'm literally damaging my already-fragile health staying up too late programming because it's the only thing that relaxes me.
This is actually something I didn't understand about my coworkers until this year: most of them fucking hate programming. I thought we all liked it, and that's why we got into programming and made it our careers. Guess not.
I've started thinking about it like this: I thought we were carpenters, but it turns out most of us just wanted to assemble Ikea shelving.
Earlier, I'd been wishing that we'd had a union so we could just put an end to this. Now, I've realized that a software engineers' union would have embraced AI.
Reviewing code sucks.
Reading someone else's code is the bane of every programmer's existence. "Someone else" in this case includes "me from three months ago".
Guess what? This is most of my job now. The LLM spits out code, and I review it, and iterate with the LLM, constantly reviewing its code until my vision gets blurry and I want to die. Right at that point of despair, what do I do? I push up my code for my coworkers to review it, and then I REVIEW THEIR CODE.
Programming is an exercise in problem-solving. Reviewing code is a sisyphean hell.
Every coder you know that's being forced to do this shit? Yeah, we're all going to burn out this year. Yes, even the ones who like it. I'm serious. I swear, as things are lining up, I think the AI bubble is going to pop at the same moment that a couple million programmers check themselves into psychiatric wards.
Reviewing code sucks, and also humans are really bad at it.
Oh, yeah, did I mention that humans are really bad at reviewing code? Always have been. To know what a program does, you have to build a whole logical mental model in your head about it. Not just the parts that changed, git, but the whole thing. Half the value of experienced engineers is that they already have that model in their head for the systems they've work on, which means they can pretty effectively write and review code for those systems. It takes weeks or months to get that model into someone's head, for each system. And the only way I know to get that model into an engineer's head?
Have them program on that system. That's it, that's the secret. "Reading the code" to learn a system is about as good as "reading a script" can tell you what the experience of a movie is like. It doesn't do it nearly well enough: you've gotta write that code.
To effectively review code, you have to already have the mental model in your head, then review the code to see what the changes do to your mental model.
With LLMs doing the coding, every engineer is slowly losing their mental models of these systems. When they get on a new system? They aren't building a mental model of the new system, at all.
If the two big parts of a programmer's job are writing code and reviewing code, we've traded away the one that lets us be even halfway decent at the other, and tripled the amount of reviewing we have to do.
New programmers are fucked.
Yeah, remember about mental models and experienced engineers? Imagine being a junior engineer and just... never developing mental models for any system, ever.
These kids are fucked. They're never even going to learn how to program, not really, unless they make a concerted effort to do it on their own.
We're going to have a generational gap in programmer skill. I honestly don't know how--or if--we can recover from this.
Every other complaint you have against LLMs.
I want to be clear: you're only wrong about LLM effectiveness, and only under very constrained circumstances. There's still many, many ways that they suck that you were already right about:
- Environmental destruction
- Workers' rights
- Sycophancy and how that psychologically fucks up people who use them
- The economic bubble
- Etc.
- Etc.
- Etc.