9 ms·
IMO the argument is sound in one direction: the precision, structure, and unforgiving nature of programming languages is a feature rather than a bug. That said,
by killthebuddha 3y ago
IMO the argument is sound in one direction: the precision, structure, and unforgiving nature of programming languages is a feature rather than a bug. That said, I think this does not mean that there is no benefit to natural language interfaces to machines. I think he goes wrong here:
> When all is said and told, the "naturalness" with which we use our native tongues boils down to the ease with which we can use them for making statements the nonsense of which is not obvious.
I would say that he leaves out a critical detail: the nonsense of which is not obvious _and also not important_.
- jameshart 3y agoExactly. When you instruct a human in natural language you can rely on them to do disambiguating and nonsense filtering, which means you don’t need to take the time to phrase things precisely. If you’re really lucky, when you give them an ambiguous instruction, they will even ask for clarification. And these are precisely the sorts of things LLMs can bring to the table. With the added benefit that they are infinitely patient, and don’t suffer from embarrassment if they get it wrong. As long as anything they produce is reversible and malleable they can be induced to try again or refine their output indefinitely, which helps solve ambiguities and confusions - I don’t have to prematurely jump to precise language if the LLM can figure out what I want from a vague description.
- JohnBooty 3y agoAnd these are precisely the sorts of things LLMs can bring to the table. LLMs have shown some promise here, obviously, but I think at the end of the day you are still going to have to enumerate all of the edge cases and error states w.r.t. a particular segment of code and it's not clear to me that LLMs are going to make this faster in many real world cases. LLMs shine with boilerplate stuff that zillions have done before ("create a linked list implementation for me in language XYZ", "create a dropdown list with these five options", etc) but it is less clear to me that they are (or can be) useful for more custom domain- or application- logic. There are certainly many classes of things for which specialized notation/representations are far clearer than natural language. Imagine describing how to play Beethoven's 5th with [insert human language here] rather than standard musical notation. It's probably a continuum of suitability, and not a binary yes/no thing, but I think even after LLMs really hit their full potential most software development will probably still be best achieved with the precision of specialized programming languages and not natural language.
- jameshart 3y agoWe’re perhaps talking about very different levels of ‘programming’. Just in the sense of ‘expressing what you want a computer to do’, Think about a thing someone needs to do in an office somewhere. ‘Get all the data from the excel file attached to this email, find the CRM record for each company listed and make a list of the ones whose data needs updating’. That’s the kind of thing you can ask John in accounting to spend a day doing. Or you can write a script. Try to express in precise unambiguous code exactly how you want to accomplish it and spend a couple of days debugging it. Or you can ask an LLM with some tool access to do it and maybe it’ll give you a list in a few minutes. And if you need to do that same task every week: either John gets good at doing it, or he gets bored and quits; if you made a script you have to keep bug fixing it and dealing with the changes in the excel file, and eventually someone tells you that it really needs to be implemented in The System so you file a Jira ticket and a product owner comes out and writes down your user story and six months later you get a web form you can upload your excel attachments to that sometimes produces the list of clients to update… But if you asked the LLM to do it… you just ask it do it again the next week. This is the bit that maybe programmers haven’t quite realized yet: if I can get an LLM to just do that task, I don’t need to go and get someone to build some software to do it. I can get the computer to do it myself.
- SoftTalker 3y agoYes, the LLM will give you an answer. Are you verifying that what the LLM tells you is correct? How would you even know?
- taneq 3y agoSame goes for John though, doesn't it?
- SoftTalker 3y agoYes, it does, but John is the subject matter expert and is at least in theory able to verify that the results are correct.
- deleted 3y ago[deleted]
- hinkley 3y agoAnd a frustration of teaching children is their lack of nonsense filtering skills.
- xp84 3y agoForget filtering, i'd settle for less outright nonsense generation.
- agentultra 3y agoTry asking a programmer to provide a formal proof of correctness of even a simple algorithm. Most are not trained to do this. Many try to forget it when they leave academia. Few actually try to use it. Expecting a human to disambiguate and do nonsense filtering is a crap shoot. Usually done through trial and error. We write things we think are correct according to an informal specification and since there’s no way to prove our implementation is incorrect… we review it, wrote a few example tests, and deploy it. Surprisingly this is good enough most of the time because the liability for mistakes lies with the company, most mistakes are benign, and users will tolerate being frustrated to a degree. This is why I’m not optimistic about LLM’s replacing programming. The art and science of programming is rooted in formal mathematics. It takes a sophisticated ability to reason and a certain amount of creativity to write beautiful proofs. And formal maths demands a level of rigorous thinking that even mathematicians balk at. The allure that EWD is writing about here is very much alive. Many people hope to have a genie inside their computer do the thinking for them. It may not be the answer we desire but precise thinking is what we need and I would rather have better tools and languages for doing formal mathematics and programming with them than using a really expensive system to piece together the program I want from other peoples’ code and guessing what I want from an imprecise specification. If the specification itself isn’t precise then any program I give you, by definition, cannot be wrong.
- forgetfreeman 3y ago"When you instruct a human in natural language you can rely on them to do disambiguating and nonsense filtering, which means you don’t need to take the time to phrase things precisely. If you’re really lucky, when you give them an ambiguous instruction, they will even ask for clarification." I have several friends and an entire career worth of coworkers on the spectrum who would unintentionally challenge the shit out of that statement.
- jazzyjackson 3y ago> When you instruct a human in natural language you can rely on them to do disambiguating and nonsense filtering, which means you don’t need to take the time to phrase things precisely. This relies on a feature of human communication that the LLMs do not have an approach for: empathy. I am able to discern meaning from ambiguity because I can put myself in your shoes and decide what you probably meant. Computers can probabalistically guess what was meant in natural language, but it will be missing out on enormous context of who the speaker is and what they're attempting to achieve (granted, you could provide this context in text form to the LLM, but then you are no longer taking advantage of the human ability to disambiguate, instead relying on verbosity and redundancy to constrain the LLM to catching your drift)
- PartiallyTyped 3y ago> IMO the argument is sound in one direction: the precision, structure, and unforgiving nature of programming languages is a feature rather than a bug. If we have learned anything from the previous decade in terms of programming is that strong (and static?) types, strictness, and compiler feedback to the developers are features that nearly everyone appreciates. We see this in the popularity of Rust, and TS, static type inference tools and linters like eslint, mypy, ruff and on.
- andrewmutz 3y agoI think it depends on the system you are building. If you're building system software that must be reliable, then precision is fantastic and mandatory. But if you're building some light weight automation that will have enough human oversight that it can tolerate a bit of failure, it's very powerful to open up the implementation to a layperson.
- romwell 3y ago>I would say that he leaves out a critical detail: the nonsense of which is not obvious _and also not important_. Not important to whom? Strongly disagreeing with you here, because misleading is a thing that is quite important to people that carefully manufacture nonsense. And if it's not important to you, you're helping them reproduce it. For further reference, I direct you to one of the best (in my opinion) essays of all time: Orwell's "Politics and the English Language"[1]. Like no other, this essay illustrates how harmful the critical flaw Dijkstra pointed out is if we aren't careful enough about how we use our "natural" language. I put "natural" in quotes, because something like Google's press release on any given matter is anything but natural, and yet it's this kind of language that both sticks around and is deliberately used to create non-obvious nonsense. [1] https://www.orwellfoundation.com/the-orwell-foundation/orwell/essays-and-other-works/politics-and-the-english-language/ https://www.orwellfoundation.com/the-orwell-foundation/orwel...
- killthebuddha 3y agoI think you might have committed a straw man error. My point is not that approximate or vague language is always good, it's that it's sometimes good. Sometimes imprecise communication is good and useful, sometimes it's doublespeak.
- ethanwillis 3y agoJust so people who are unaware know.. Dijkstra would never use the word bug like this.