Comment by godelski
5 days ago
Let's just look at Dijkstra's On the Foolishness of "Natural Language Programming". It really does a good job at explaining why natural language programming (and thus, Vibe Coding) is a dead end. It serves as a good reminder that we developed the languages of Math and Programming for a reason. The pedantic nature is a feature, not a flaw. It is because in programming (and math) we are dealing with high levels of abstraction constantly and thus ambiguity compounds. Isn't this something we learn early on as programmers? That a computer does exactly what you tell it to, not what you intend to tell it to? Think about how that phrase extends when we incorporate LLM Coding Agents.
| The virtue of formal texts is that their manipulations, in order to be legitimate, need to satisfy only a few simple rules; they are, when you come to think of it, an amazingly effective tool for ruling out all sorts of nonsense that, when we use our native tongues, are almost impossible to avoid.
- Dijkstra
All of you have experienced the ambiguity and annoyances of natural language. Have you ever:
- Had a boss give you confusing instructions?
- Argued with someone only to find you agree?
- Talked with someone and one of you doesn't actually understand the other?
- Talked with someone and the other person seems batshit insane but they also seem to have avoided a mental asylum?
- Use different words to describe the same thing?
- When standing next to someone and looking at the same thing?
- Adapted your message so you "talk to your audience"?
- Ever read/wrote something on the internet? (where "everyone" is the audience)
Congrats, you have experienced the frustrations and limitations of natural language. Natural language is incredibly powerful and the ambiguity is a feature and a flaw, just like how in formal languages the precision is both a feature and a flaw. I mean it can take an incredible amount of work to say even very simple and obvious things with formal languages[1], but the ambiguity disappears[2].
Vibe Coding has its uses and I'm sure that'll expand, but the idea of it replacing domain experts is outright laughable. You can't get it to resolve ambiguity if you aren't aware of the ambiguity. If you've ever argued with the LLM take a step back and ask yourself, is there ambiguity? It'll help you resolve the problem and make you recognize the limits. I mean just look at the legal system, that is probably one of the most serious efforts to create formalization in natural language and we still need lawyers and judges to sit around and argue all day about all the ambiguity that remains.
I seriously can't comprehend how on a site who's primary users are programmers this is an argument. If we somehow missed this in our education (formal or self) then how do we not intuit it from our everyday interactions?
[0] https://www.cs.utexas.edu/~EWD/transcriptions/EWD06xx/EWD667...
[1] https://en.wikipedia.org/wiki/Principia_Mathematica
[2] Most programming languages are some hybrid variant. e.g. Python uses duck typing: if it looks like a float, operates like a float, and works as a float, then it is probably a float. Or another example even is C, what used to be called a "high level programming language" (so is Python a celestial language?). Give up some precision/lack of ambiguity for ease.
yes, but sadly many businesses don't care about any of that...
It's extra sad because they would be more profitable if they recognized this.
Sometimes I wonder why companies are so resistant to making profits. It can be really strange. To be so profit focused yet throw away so much just because it is a bit more effort or a bit slower. But I guess most people are penny wise and pound foolish.
definitely. its just a guess but probably many businesses look at long-term as unknown risk and would rather have the short-term profits now cause who knows whats happening in 5 years... after working at a few large places thats the vibe i get anyways...
> Vibe Coding has its uses and I'm sure that'll expand, but the idea of it replacing domain experts is outright laughable.
I don't think that's the argument. The argument I'm seeing most is that most of us SWEs will become obsolete once the agentic tools become good enough to allow domain experts to fully iterate on solutions on their own.
> The argument I'm seeing most is that most of us SWEs will become obsolete once the agentic tools become good enough to allow domain experts to fully iterate on solutions on their own.
That’s been the argument since the 5PL movement in the 80s. What we discover is that domain expertise an articulation of domain expertise into systems are two orthogonal skills that occasionally develop in the same person but, in general, requires distinct specialization.
It never worked because a lot of times, domain experts are stuck in their ways of doing things and the real innovation came from engineers learning from domain experts but adding their technically informed insights on the recipe to create novel ways of working.
A Lotus 1-2-3 vibecoded by a Product Manager in 1979 would probably had a hotkey for a calculator.
Yes, 4GL and 5GL failed, but authoring Access applications should be a breeze now.
That is equivalent to "replacing domain experts", or at least was my intent. But language is ambiguous lol. I do think programmers are domain experts. There are also different kinds of domain experts but I very much doubt we'll get rid of SWEs.
Though my big concern right now is that we'll get rid of juniors and maybe even mid levels. There's definitely a push for that and incentives from an economic point of view. But it will be disastrous for the tech industry if this happens. It kills the pipeline. There can be no wizards without noobs. So we have a real life tragedy of the commons situation staring us in the face. I'm pretty sure we know what choices will be made, but I hope we can recognize that there's going to need to be cooperation to solve this least we all suffer.
I know I'm shooting myself in the wallet here, but I honestly don't think that SWE is an "essential" domain. To explain, as one who has taken relational data modeling classes, it's obvious to me that everything that can be spoken about can be treated as a "domain", but if you'll allow me the terminology, I think that some are "essential", and others are "accidental".
I believe that business analysis and computer science are essential domains, of (respectively) properly defining the logical/mathematical constraints of problems, and of understanding what it means to solve such problems. But software engineering is "accidental", in the sense that no one other than us in the industry actually cares about what we do, but rather only about their use-cases implemented; what we do is just implementation details.
I don't have a magic ball, but I wouldn't be surprised if in a century, (human) software engineering goes the way of the switchboard operator, elevator operator or knocker-upper.
How do you get domain experts?
Dijkstra also said no one should be debugging and yet here we are.
He's not wrong about the problems of natural language YET HERE ARE. That would, I think, cause a sensible engineer to start poking at the predicate instead of announcing that the foregone conclusion is near.
We should take seriously the possibility that this isn't going to be in a retrenchment which bestows a nice little atta boy sticker on all the folks who said I told you so.
Given how you're implying things, you're grossly misrepresenting what he said. You've either been misled or misread. He was advocating for the adoption and development of provably correct programming.
Interestingly I think his "gospel" is only more meaningful today.
I think it's worth reading in full
https://www.cs.utexas.edu/~EWD/transcriptions/EWD02xx/EWD288...
>no one should be debugging
He literally said those exact words out loud from the audience during a job talk.
And yeah, the total aim and the reason why he might just blurt that out is because a lot of the frustration and esprit de corps of programming is held up in writing software that's more a guess about behavior than something provably correct. Perhaps we all ought to be writing provably correct software and never debugging as a result. We don't. But perhaps we ought to. We don't.
Is control via natural language a doomed effort? Perhaps, but I'd be cautious rather than confident about predicting that.
4 replies →