Code Smells and Cameras
Most programmers will tell you about code smells, that ick you get from looking at messy code where you can't always say why it's wrong but you know something is off. And the intuition isn't unique to programming either — mathematicians talk about "elegant" proofs, physicists get suspicious when their equations grow baroque, and the whole lineage from Occam's razor to Kolmogorov complexity points at the same thing, which is that compression and understanding are intimately related. If you've actually grokked a problem you can express its solution minimally, and if you can't, you're probably still confused and compensating somehow.
Which brings me to LLMs. I use them all the time and they've genuinely changed how I work, but they still generate code that smells. Lots of bloat, defensive boilerplate, unnecessary abstractions, cargo-culted idioms, code that looks like code because it was trained on code that looked like that.
Venkatesh Rao has this idea I keep coming back to, that LLMs are cameras, not engines. We think they're generating something, but really they're photographing the statistical shape of their training data, and since most code in that data is mediocre, what they faithfully reproduce is mediocrity. So in a way they're succeeding, just at the wrong thing.
The thing I keep chewing on is why. Compression requires a model of the problem, and LLMs have a model of the solution-space, which is a different and orthogonal thing. Code smell lives somewhere in the gap between them, when the solution's complexity exceeds the problem's complexity, and a camera can't see that gap because the problem is not in the picture at all.
I also don't think RLHF rescues this, though I keep seeing people imply it might. To reward genuinely simple solutions, raters would need to deeply understand the problem first, which is the hard part, the part the model was supposed to help with in the first place. So what raters end up rewarding is code that looks clean — good naming, helpful comments, familiar patterns — which is often accidental complexity dressed up to pass for intentional. RLHF just relocates you within the same solution-space.
So the models don't have a representation of the problem. They have a representation of what other people did when they thought they were solving similar problems, which sometimes overlaps with what the problem actually was and sometimes really doesn't.