6 ms·
One other connection between these two is the fact that for AI assisted coding you can only get the AI to write you code that has broad adoption on the internet
by awongh 2y ago
One other connection between these two is the fact that for AI assisted coding you can only get the AI to write you code that has broad adoption on the internet. Otherwise the AI doesn’t know the standard libraries and conventions.
I worry overall that this could signal the complete end of new programming languages except in a few special cases. (Which I think was already a worrying trend before AI- see Bret Victor’s “The Future of Programming” talk).
- mewpmewp2 2y agoI'm wondering if there's going to be an initiative for a new programming language that is specifically intended for AI usage. E.g. AI has some statistical patterns built in that it would naturally guess what the method names should be or the API package names, and then we would just invent a programming language based on what is most natural for AI for any sort of use case. So even if AI "hallucinates" it would likely be the right guess since all the API and syntax is picked by AI in the first place.
- hakanderyal 2y agoI would be very surprised if there aren't any serious efforts on this already underway.
- Cthulhu_ 2y agoThat sounds like the inverted world though, as in, AI is imperfect and makes mistakes, let's try and work with and around those mistakes instead of making AI better.
- mewpmewp2 2y agoI think it makes sense to go at this problem from multiple different angles. One is making the AI better, the second angle is making the World easier for AI. We learn from both approaches. And you can try to make a really good AI that is very good with the current World, but at the same time an AI that is maybe much faster and efficient will still be very valuable if there's a World that is made easier for them. Because there will always be a trade off to an extent with accuracy vs speed. It could be even something that the larger and slower AI model is defining and implementing the APIs and smaller and faster is the one who will actually make use of those. Or some variations of those combined, where it's a single AI model with a capability to select between the 2. If it's complicated APIs, it will try to crawl the docs for accuracy and make "AI intuitive" wrappers around all of the APIs and their edge cases, and making it easier for the fast model.
- RobertBobert 2y ago[dead]
- awongh 2y agoDoesn't the AI do that pretty well already? Not sure what other language features you would need to improve on the way the AI writes code.
- mewpmewp2 2y agoSome LLMs do it well, some do it worse, and are better at certain things, worse at others. I think there's a balance to be found, e.g. you could have a very small and fast model perform better if the coding paradigm was specifically dedicated to the AI. E.g. right now I think AI is excellent with JavaScript/TypeScript, but worse with some other languages like e.g. Rust or Scala.
- jobigoud 2y agoA related concept is LLM-driven API design. First write the comment of what the API function should do, then let the LLM write the function call, it will pick the most expected naming and argument order, then you write the API using this function prototype. And maybe if the LLM sometimes tries to use different naming, you could add an overload of the same API end point, as long as it doesn't clash with an existing one. So in the end for anyone using your library with an LLM it would appear to just work.
- andai 2y agoI experienced this in my automated GPT-4 programmer project. This was 1.5 ago back when prompt size was very limited. I couldn't put a large programs entire source code in the prompt so I auto-converted it to stubs. I noticed that letting GPT-4 write more of the code had the advantage that it understood it better and less context was necessary. Now when I design systems for GPT-4 itself to use, I just let GPT-4 design them. Ask it to use an imaginary system, and what it comes up with (consistently) should be the API.
- itsdavesanders 2y agoOnce AI is fully writing software autonomously and humans don’t need to see that code anymore, then why not just have AI write iteratively more efficient assembly? (Meaning make the software work then turn it over to an optimization agent that can drive out all inefficiencies until perfection.) Those efficiencies will eventually be driven into all parts of the system. AI will be able to run the most efficient code on the most efficiently designed processors, that can be designed with the knowledge that only AI is going to use them. And then we can remove ALL the weird abstractions and accommodations we had to make for human brains. I’m not saying it will happen tomorrow but language choice is just a temporary concern.
- croes 2y agoSince when is AI code efficient? It’s based on human code, most of that isn’t efficient.
- n_ary 2y agoI welcome the death of Framework-of-the-month and hip-language-of-the-month plague. The fragmentation is just irritating at this point and demands too much effort and time waste adapting and promoting yearly re-writing of everything because management want to cut cost and hire more cheap desperate devs.
- zelphirkalt 2y agoSo are we supposed to stick with the clumsy inelegant languages that have become mainstream forever, or can we hark back to more elegant designs? I mean, by that logic, languages like Rust and Golang should never have taken off. Yet we see improvement due to their invention and adoption. Limiting programming language design and theory will rob us of a lot of potential improvements we could achieve at some point.
- kaba0 2y agoI mean, what does go actually bring to the table? That's a modern language only in release date, it is absolutely not worthy of being next to rust in terms of novelty. Also, old languages can be improved still. Java has some gotchas that will probably forever be fossilized into the language, but it still managed to get algebraic data types, proper pattern matching, virtual threads, etc. Also, add to it Brook's famous paper and we can see that "new, modern" language will fail to account for even single digit productivity improvements, let alone order of magnitude differences. Me adding an already working, battle-tested dependency is the only real productivity booster. (Nonetheless, I'm absolutely not against change, and I absolutely love language design as a topic. I just think that any language that wants to live in its own hermetic world has to give a really good reason for that choice)
- Animats 2y ago> I mean, what does go actually bring to the table? Good libraries for everything commonly done server side in web dev. Google people write the libraries, and they're used within Google, so even the obscure cases are executed frequently. If your problem is a variation on a common theme, not only can Go probably do it, common LLMs will know how to make Go do it. Go gives up a little performance in exchange for simplifying some problems that give many programmers trouble. It's garbage collected, which simplifies ownership, and its goroutines can safely block, so you don't have the async/sync distinction. Since LLMs don't really understand either of those issues, this makes LLM-driven coding work better. Remember, LLM based coding is about as good as copy-pasting from Stack Overflow. It only works well in areas where there's something it can copy and mod. Usually, if you search for names in LLM-generated code, you can find where it located a prototype to copy from.
- ozgrakkurt 2y agoYeah sure llms that can’t write quicksort half the time will end the creation of new languages. They might also end home cooking because they’ll cook all the food right?
- jobigoud 2y agoIt's not the LLMs doing it, it's the people using LLM with languages that work well with LLMs vs with new languages. To your point, it can write quicksort in python easily but maybe not in some esoteric language.
- awongh 2y agoTo be more specific, new languages will be created, but if people get used to using AI to help them code a new language might not have enough internet discussion around it to enable the AI to write good quality code in that language. It's a self-enforcing negative feedback loop. One that already exists, but could be accelerated when AI assisted coding becomes more and more commonplace. I do think that an LLM today could understand the basics of a language it's never seen before (as long as it's at least somewhat related to a current language). But the AI's code writing abilities will be limited. For example I can ask ChatGPT to tell me if a code example is Pythonic. A slightly different extension of your example would be to ask if recipe writing will be ended forever. The AI basically understands the rules / patterns of how food ingredients are combined together with which techniques. Will anyone bother to write down new recipes anymore in the future if the AI can do just as well? If someone publishes a new recipe it needs to spread prolifically enough on the internet before the AI understands it as a fundamental concept. What do we lose if this is the case?
- Arch-TK 2y ago> I worry overall that this could signal the complete end of new programming languages except in a few special cases. I don't think anything has changed in this regard. Yes we have a small number of success stories like elixir or rust, and then we have a few corporate backed success stories like go, swift and kotlin. But that has always been a tiny fraction of the "promising new programming language" space. Companies have always been conservative about choice of programming language and I don't think that will get any worse now.
- awongh 2y agoAs I referenced elsewhere in this thread, I'm specifically thinking about the fact that if tools for AI coding become a standard part of dev workflow, new languages might not ever get off the ground because the AI hasn't seen enough about the new language on the internet and thus doesn't know enough about new languages to be helpful in AI assisted coding- a new kind of negative feedback loop.
- Arch-TK 2y agoYes and my point is that the kinds of people who over-rely on AI and can't seem to get anything done without it are the kinds of people who previously over relied on stack overflow and copy paste. The kinds of people who would have in the past tried a new and unproven language are still there and they're unlikely to stop trying new and unproven languages just because AI doesn't know them. I for sure am not going to stop looking at weird new and/or obscure languages just because AI struggles with them.
- kaba0 2y agoI absolutely loved that talk, thanks for sharing!
- zcw100 2y agoWhat about a possible future with a programming language designed from the beginning with AI in mind? It's fun to think about what that might even look like.
- jffhn 2y ago>I worry overall that this could signal the complete end of new programming languages Programming often involves creating new languages (or APIs) (like domain specific languages) on top of lower level languages (like the base programming language you use). Future AIs should be able to learn new languages, else they would remain pretty limited.
- awongh 2y agoRight now an AI understands a lot about the opinions of all the programmers have about how to write good Python, and enough people wrote about it on the internet that you can ask ChatGPT questions about best practices and it can come up with a coherent answer. My worry would be that a new language would not come with this knowledge. If Apple were to come out with Swift today and were to fine-tune an LLM or just put the docs / code samples / repos /PRs in context I don't think the LLM would understand as much about the language as it does about other widely talked about languages.
- JanisErdmanis 2y agoThis completely contradicts my experience using LLMs, indispensable in my workflow for generating Julia code, a young language with little adoption outside its HPC niche. Furthermore, I use Julia for cryptographic software development, which is a niche in itself, and hence, there is no broad learning set from which LLMs could autocomplete. One of my most impressive uses is for performance optimisation. Claude implemented efficient byte conversion to bigint, and I pasted Julia’s bignum standard base library file, `gmp.jl` to figure out how to do so [1]. Then, a Jacobi symbol calculation function was completely optimised with Calude, and I interactively provided feedback on the functions, correctness, and profiler information on which lines most of the time is spent [2]. Additionally, the OpenSSL wrapper for elliptic curve operations would be beyond my expertise if I hadn’t inquired with Claude about interfacing the OpenSSL_jll library for curve addition and multiplication. This led to the generation of 200 lines of Julia code, which I could execute in the REPL to explore the entire problem space [3]. These pieces were essential to get competitive performance for the ShuffleProofs package [4], where benchmark figures were also asked to be made by Claude with `Luxor`, which is instead a low-level library lovely in itself. I would be unable to accomplish those improvements alone and would be highly reluctant to learn what a bignum limb is. It would be nearly impossible to implement those optimisations in such a short time while retaining the big picture of the ecosystem I maintain. I also used to have good experiences with ChatGPT at the beginning, but it silently became more dogmatic and lazy over time and somehow lost its ability to apply analogies between `C`, `Java` or `python` ecosystems. To use LLMs effectively, one needs to interact with them appropriately and be aware of the biases one makes in the questions. Knowing when to make a gentle nudge and when to contradict is a vital skill to have there to get good answers. [1]: https://github.com/PeaceFounder/CryptoGroups.jl/blob/0f6b4e223225634ec1506e6999f8922c079f62c7/src/Utils.jl#L148 https://github.com/PeaceFounder/CryptoGroups.jl/blob/0f6b4e2... [2]: https://github.com/PeaceFounder/CryptoGroups.jl/blob/0f6b4e223225634ec1506e6999f8922c079f62c7/src/Utils.jl#L24 https://github.com/PeaceFounder/CryptoGroups.jl/blob/0f6b4e2... [3]: https://github.com/PeaceFounder/OpenSSLGroups.jl https://github.com/PeaceFounder/OpenSSLGroups.jl [4]: https://github.com/PeaceFounder/ShuffleProofs.jl https://github.com/PeaceFounder/ShuffleProofs.jl