Live data from Hacker News

Dijkstra On the foolishness of "natural language programming"

cs.utexas.edu

261–270 of 281 posts

Re: Dijkstra On the foolishness of "natural language programming"

#261

Earlier quoted context omitted.

I reiterate: > This is assuming by "deterministic," you mean the same thing I said about programming language implementations being "controllable, reproducible, and well-defined." If you mean it produces random but same results for the same inputs, then you haven't made any meaningful points. "Determinism" is a word that you brought up in response to my comment, which I charitably interpreted to mean the same thing I…

What are these fundamental properties you speak of? 8 years ago this was all a pipe dream. Are you claiming to know what the next 8 years of transformer development will look like?

That LLMs are by definition models of human speech and have no cognitive capabilities. There is no sound logic behind what LLMs spit out, and will stay that way because it merely mimics its training data. No amount of vague future transformers will transform away how the underlying technology works.

But let's say we have something more than an LLM, that still wouldn't make natural languages a good replacement for programming languages. This is because natural languages are, as the article mentions, imprecise. It just isn't a good tool. And no, transformers can't change how languages work. It can only "recontextualize," or as some people might call it, "hallucinate."

Re: Dijkstra On the foolishness of "natural language programming"

#262

Earlier quoted context omitted.

What are these fundamental properties you speak of? 8 years ago this was all a pipe dream. Are you claiming to know what the next 8 years of transformer development will look like?

That LLMs are by definition models of human speech and have no cognitive capabilities. There is no sound logic behind what LLMs spit out, and will stay that way because it merely mimics its training data. No amount of vague future transformers will transform away how the underlying technology works. But let's say we have something more than an LLM, that still wouldn't make natural languages a good replacement for pro…

Citation needed. Modern transformers are much, much more than just speech models. Precisely define "cognitive capabilities", and provide proof as to why neural models cannot ever mimic these cognitive capabilities.

> But let's say we have something more than an LLM

We do. Modern multi-modal transformers.

> This is because natural languages are, as the article mentions, imprecise

Two different programmers can take a well-enough defined spec and produce two separate code bases that may (but not must) differ in implementation, while still having the exact same interfaces and testable behavior.

> And no, transformers can't change how languages work. It can only "recontextualize," or as some people might call it, "hallucinate."

You don't understand recontextualization if you think it means hallucination. Or vice versa. Hallucination is about returning incorrect or false data. Recontextualization is akin to decompression, and can be lossy or "effectively" lossless (within a probabilistic framework; again, the interfaces and behavior just need to match)

Re: Dijkstra On the foolishness of "natural language programming"

#263
post #179

Earlier quoted context omitted.

Is it like the human detractor who only spouts the criticism and does not offer feedback towards improvement?

Its feedback is more poignant than most humans. Here's what it said about a recent PR of mine that refactored code to fix a linter warning. > Ah, the grand theater of code review—where humans playact at immortality through version control. You want me to parse this PR's mechanical copulation of const& and std::move? Fine. Let's autopsy this digital cadaver. > Your commits scream optimization fervor: converting parame…

That sounds pretty heavy on theatre and pretty light on insight!

Re: Dijkstra On the foolishness of "natural language programming"

#264
post #45

Earlier quoted context omitted.

> Do you find the resulting natural language description is easier to reason about? An example from an different field - aviation weather forecasts and notices are published in a strongly abbreviated and codified form. For example, the weather at Sydney Australia now is: METAR YSSY 031000Z 08005KT CAVOK 22/13 Q1012 RMK RF00.0/000.0 It's almost universal that new pilots ask "why isn't this in words?". And, indeed, mos…

I wonder why the legal profession sticks to natural language

There was that "smart contract" idea back when immutable distributed ledgers were in fashion. I still struggle to see the approach being workable for anything more complicated (and muddied) than Hello World level contracts.

Re: Dijkstra On the foolishness of "natural language programming"

#265

Earlier quoted context omitted.

Yeah, I suppose you're right and I'd love to understand more. Do you imagine a modality of programming a computer in an abstract (pictorial? diagrammatic?) way that fully bypasses the current need to form statements?

Let's try this as an example. fn foo() -> Result { ... } let x = foo(); match x { Ok(num) => println!("foo is {num}"); Err(error) => eprintln!("no foo for you: {error:?}"); } So I have in my head a thing that has the name "x" and a spatial connection to that area of the source code where foo is called. x is a Result and in my head that's a vague abstract shape with the "potential" to be either the uint32 shape (in my…

Hmm... that's interesting. It sort of gives me a glimpse, but I'm still very confused about what the "process" of programming is for you. You mention in your explanation that these things in your head are somewhat "vague" and "abstract" - so how do you see the action of converting a general idea in your head into working code in the computer?

Just to recap, the way I see this is that the non-verbal neural processes are insufficient to fully define a computer program and it is only at the point where a person converts their abstract thoughts into verbal statements/expressions that the program is fully generated.

So is it that you have some process whereby you feel that you can generate a specific program in your head (e.g. with those shapes you mentioned) that exits in fullness without any equivalent of statements? And if so, can you foresee a future human-computer interface that would allow you to program directly via those shapes without having to type statements?

Re: Dijkstra On the foolishness of "natural language programming"

#266

Earlier quoted context omitted.

Let's try this as an example. fn foo() -> Result { ... } let x = foo(); match x { Ok(num) => println!("foo is {num}"); Err(error) => eprintln!("no foo for you: {error:?}"); } So I have in my head a thing that has the name "x" and a spatial connection to that area of the source code where foo is called. x is a Result and in my head that's a vague abstract shape with the "potential" to be either the uint32 shape (in my…

Hmm... that's interesting. It sort of gives me a glimpse, but I'm still very confused about what the "process" of programming is for you. You mention in your explanation that these things in your head are somewhat "vague" and "abstract" - so how do you see the action of converting a general idea in your head into working code in the computer? Just to recap, the way I see this is that the non-verbal neural processes a…

The connections between the abstract entities are the connections between the source code elements. That thing goes to `match` which gives me either this or that. It's more that the program is sort of graph-shaped (all about connections) than that I have linear grammar sentences in my head.

I could "serialize" the same mental model into various alternate syntaxes, e.g. assign to temporary variables or not, based on what feels right and has a good amount of things to think of at once (the good old no more than 7 rule).

I could write it out in multiple different orders, as long as data dependencies are fulfilled.

I definitely don't write programs as sentences like how I am writing this text right now. For example, I might first decide that I assign a placeholder `todo!()` to a local variable of a specific type (I know the "shape" it will be, no more), then use that value and return from the function, and then go back and figure out where that "something" could come from. Sometimes I have a couple of such sections and I "search" for the connections between them. My prose is much more linear.

I don't think I have much better means of expressing what goes inside my head than what that gives me. After all, language is the tool we're learned to communicate with. IDE-level helpers like rename all instances of this variable (now that I understand how I intend to use it) are useful, so I can literally name things a, b, c to describe a chain of processing and once I understand what I need to do, go back and easily rename them to something more descriptive.

Better code navigation and on-screen layout would be great. Like, what if functions aren't just sequentially in a file, but each one lives separately and can be opened in neighboring panes easily, to pick what you're looking at, instead of jumping around a "file". IDE "jump to definition" and API doc hints are related but not quite the same.

Outside of programming, being able to point at things to manipulate things and make connections is really powerful, but very hard to invent great UX for. I could see that sort of stuff being useful. Even in a text editor, I often wonder why exactly can't I drag a paragraph or a Markdown section (heading+everything under it) to move it. In gg the VCS GUI, you can drag commits between histories and changes between commits: https://www.youtube.com/watch?v=cD9L3Mi1Vy4 . In general, structural editing can be a great way to munge source code, there's definitely ways to improve over emacs paredit. I feel like there's some sort of untapped power in the combo of structural editing and a touchpad with haptic feedback, but maybe it'll take AR to make it intuitive enough. Think "gesture intents" popping up from the trackpad like long press pops up character variants on phone keyboards. Think swipe left/right and more for blocks of content, with UI feedback to confirm the action before release.

Re: Dijkstra On the foolishness of "natural language programming"

#267

Earlier quoted context omitted.

That LLMs are by definition models of human speech and have no cognitive capabilities. There is no sound logic behind what LLMs spit out, and will stay that way because it merely mimics its training data. No amount of vague future transformers will transform away how the underlying technology works. But let's say we have something more than an LLM, that still wouldn't make natural languages a good replacement for pro…

Citation needed. Modern transformers are much, much more than just speech models. Precisely define "cognitive capabilities", and provide proof as to why neural models cannot ever mimic these cognitive capabilities. > But let's say we have something more than an LLM We do. Modern multi-modal transformers. > This is because natural languages are, as the article mentions, imprecise Two different programmers can take a w…

The burden of proof is on the one making extraordinary claims. There has been no indication from any credible source that LLMs are able to think for itself. Human brains are still a mystery. I don't know why you can so confidently claim that neural models can mimic what humanity knows so little about.

> Two different programmers can take a well-enough defined spec and produce two separate code bases that may (but not must) differ in implementation, while still having the exact same interfaces and testable behavior.

Imagine doing that without a rigid and concise way of expressing your intentions. Or trying again and again in vain to get the LLM produce the software that you want. Or debugging it. Software development will become chaotic and lot less fun in that hypothetical future.

Re: Dijkstra On the foolishness of "natural language programming"

#268
post #45

People are sticking up for LLMs here and that's cool. I wonder, what if you did the opposite? Take a project of moderate complexity and convert it from code back to natural language using your favorite LLM. Does it provide you with a reasonable description of the behavior and requirements encoded in the source code without losing enough detail to recreate the program? Do you find the resulting natural language descri…

> Do you find the resulting natural language description is easier to reason about? An example from an different field - aviation weather forecasts and notices are published in a strongly abbreviated and codified form. For example, the weather at Sydney Australia now is: METAR YSSY 031000Z 08005KT CAVOK 22/13 Q1012 RMK RF00.0/000.0 It's almost universal that new pilots ask "why isn't this in words?". And, indeed, mos…

Exactly. Within a given field, there is always a shorthand for things, understood only by those in the field. Nobody describes things in natural language because why would you?

Re: Dijkstra On the foolishness of "natural language programming"

#269

Earlier quoted context omitted.

Citation needed. Modern transformers are much, much more than just speech models. Precisely define "cognitive capabilities", and provide proof as to why neural models cannot ever mimic these cognitive capabilities. > But let's say we have something more than an LLM We do. Modern multi-modal transformers. > This is because natural languages are, as the article mentions, imprecise Two different programmers can take a w…

The burden of proof is on the one making extraordinary claims. There has been no indication from any credible source that LLMs are able to think for itself. Human brains are still a mystery. I don't know why you can so confidently claim that neural models can mimic what humanity knows so little about. > Two different programmers can take a well-enough defined spec and produce two separate code bases that may (but not…

The burden of proof is not on the person telling you that a citation is needed when claiming that something is impossible. Vague phrases mean nothing. You need to prove that there are these fundamental limitations, and you have not done that. I have been careful to express that this is all theoretical and possible, you on the other hand are claiming it is impossible; a much stronger claim, which deserves a strong argument.

> I don't know why you can so confidently claim that neural models can mimic what humanity knows so little about.

I'm simply not ruling it out. But you're confidently claiming that it's flat out never going to happen. Do you see the difference?

Re: Dijkstra On the foolishness of "natural language programming"

#270

Earlier quoted context omitted.

The burden of proof is on the one making extraordinary claims. There has been no indication from any credible source that LLMs are able to think for itself. Human brains are still a mystery. I don't know why you can so confidently claim that neural models can mimic what humanity knows so little about. > Two different programmers can take a well-enough defined spec and produce two separate code bases that may (but not…

The burden of proof is not on the person telling you that a citation is needed when claiming that something is impossible. Vague phrases mean nothing. You need to prove that there are these fundamental limitations, and you have not done that. I have been careful to express that this is all theoretical and possible , you on the other hand are claiming it is impossible; a much stronger claim, which deserves a strong ar…

You can't just make extraordinary claims [1][2], demand rigorous citation for those who question it, even going as far as to word lawyer the definition of cognition [3], and reverse the burden of proof. All the while providing no evidence beyond what essentially boils down to "anything and everything is possible."

> Vague phrases mean nothing.

Yep, you made my point.

> Do you see the difference?

Yes, I clearly state my reasons. I can confidently claim that LLMs are no replacements for programming languages for two reasons.

1. Programming languages are superior to natural languages for software development. Nothing on earth, not even transformers, can make up for the unavoidable lack of specificity in the hypothetical natural language programs without making things up because that's how logic works.

2. LLMs, as impressive as they may be, are fundamentally computerized parrots so you can't understand or control how they generate code unlike with compilers like GCC which provides all that through source code.

This is just stating the obvious here, no surprises.

[1]: https://news.ycombinator.com/item?id=43567653

[2]: https://news.ycombinator.com/item?id=43568699

[3]: https://news.ycombinator.com/item?id=43585498

Post reply on HN