The "End of Programming" will look a lot like programming (2023)
ben11kehoe.medium.com
ben11kehoe.medium.com
- programmers getting hired and selected by ‘ai’ (resume, interview)
- programmers (their PRs) being checked/reviewed by ‘ai’
- kafkaesque standups where features/bugs are explained by ‘ai’ in a painful loop
- tasks being cut into tiny tasks with time limits by ‘ai’ for human programmers where the ‘ai’ monitors and punishes/awards the human performance
- parts of those tasks being written by the ‘ai’, resulting in alien code being pushed into the project
- ‘ai’ being introduced willy-nilly because it’s cheaper (read; faster to market) than real computer science; why build a parser for formulas? Just put a llm! Why design a robust dsl? Just put a llm!
- etc
This is part of the reality now in places I see already and it will get worse. When LLMs get faster and cheaper, there will be no reason to not add LLMs everywhere and give them some sort of power.
Could you elaborate on that one? It sounds "interesting".
I dont think this is the case, nor will it be. It is more likely that an ai makes it possible to hire low cost personnel and yet have them be _almost_ as productive as someone skilled (at mediocre tasks, but those do make up the bulk of work in tech imho).
The high skilled personnel will need to compete on this front. Some will relent and give up to become those mediocre task doers. Others will strike out and take risk - perhaps even incorporate AI into their own toolbox - and produce software with higher proficiency as an ISV.
The main problem I see here, is that management may use ai as an opportunity to push for more micro management. And if that happens, the consequences will be similar to regular non-ai micromanagement (e.g. higher perceived productivity, less actual productivity, developers leaving).
- remote workers
- strict scoring (score <= 0 -> fired)
- no human to contact
So when you are stuck in a loop (like my other response to asking what I have seen in practice) and you cannot reach another human to resolve your issue, your score will sink (because you are not delivering) and you get fired. All automated, all LLM, no humans. It'll first happen in other professions (I know at least one multi national that does this with data entry people as a trial now), but programming won't be far behind.
Do you have a reference? Just asking because I'd be interested in learning more.
computers don't do the work but instead tell humans what to do in very minute steps, following them around all day. The short story itself is set in a food place similar to a McDonalds IIRC>
* Better auto-complete for verbose languages,
* A question/answer workflow significantly smoother than googling it,
* A on tap rookie for 5-15 line pieces of code that don't matter much (it difficult to trust more because quality isn't great),
* An awesome bash one-liner sidekick,
And most of importantly
* A consultable socrates-in-a-box "colleague" that is often useful, but needs to checked.
It can be an improvement due to LLMs ability to quickly adapt any solutions to your specific use case.
On Google you can search for CRUD web application examples and find tutorials but you will have to adapt to your specific scenatio.
With LLMs ou can ask: "Write a CRUD web app using Next.js and postgres. I want the CRUD to manage entity A with fields x Tx, y, Ty..." and there's a good chance it will spit out a pretty good starting boilerplate.
My experience with that so far has been that, yes, that works quite well as long as the thing you ask is common and reasonably simple. The more uncommon and complex it gets, the less successful this tends to be. And in more uncommon cases, if it is successful in terms of the workability of the emitted code, it's often not clear if the approach taken is a good idea at all considering other aspects like maintainability.
LLMs are notoriously bad at just saying "Hey dude, I don't really know what I am doing here, ok?"
Also, I have often been able to trace their responses back directly to SO answers. Usually, there is not much "creativity" in their answers at all.
Ah running scripts with no idea what they do… what could go wrong? :D
And I don't trust its competence so I check what it came up with first.
The web was seen as a hub of information, but now people has been trying to make it a computing hub, ignoring the already available computing platform we already have (the devices in front of us).
If you can’t context switch faster, and embed yourself in the next task completely, in a way that lets you articulate the problem correctly to the LLM so that it can produce a correct answer for you, it can’t help you.
We've had such a spate of piss poor developers over the years that I find it gleeful to think they'll no longer be employable.
Yes, I know that makes me an asshole but I've seen some shit and it actively offends me that these people are paid for the code and the bad name it gives an industry I participate in and love. My hope is that AI will allow the good to great developers to be productive enough to force the craptastic developers to find another career.
My absolute favorite example is the guy who accidentally built a FSM with http redirects for the node transitions, all to animate a progress bar for a job queue on the server. No, he had no idea he had built a FSM.
The last 20% is really hard
10 years ago was when Siri and the other voice assistants came out right? I see a huge amount of progress between then and now, but these LLMs sort of snuck up on us in the last two years. I don’t think we are hitting an AI winter anytime soon.
It is always spooky seeing how good the driver less taxis are
Additionally as the ball of mud grows, making slight but subtle changes to the system will get subsequently harder and harder to describe to the point where the tradeoff from using english is higher than flipping some code (imo).
For the mid future, it's like Star Trek: "Computer give me the customers that perform best" - from a data lake, no data warehouse, no CRM code, no web frontend. No programmers, just users.
For the near future, developers will become managers. Instead of hiring and managing people, they will select and manage different AIs for different tasks. See what those are doing, give them feedback (just like a manager would to developers), change the prompt (like a manager would clarify a task), give them data, grow them (again just like a people manager today).
What you just described is more of a tech lead than a "manager", and that's really the point. Reality that's not encoded in pure language is a fundamental limit of LLMs; they're probably never going to correctly diagnose a hardware bug based on misbehaving software, for example, because that's a world where everything that they are (ingestion material, available documentation) and reality conflict and an LLM has very little ability to detect and overcome such a problem.
Those "reality vs the text" impedance mismatches mean that LLMs are probably never going to escape human oversight. Which means we'll all probably have as many low quality (occasionally brilliant) fresh grads as we like, but taking the jobs of experts seems unlikely.
The end of programming looks like lots of work for programmers.
It's like saying we have flying cars. Sure, working prototypes have existed for some time now. There were (are?) companies making them. But it makes no real world difference.
In the context of "no more programming", it makes no difference if some fancy AI model can in theory replace programmers, if they don't actually end up doing that on any real scale.
Because it costs Waymo about US$200,000 per car, not including the operating and maintenance staff. It will get cheaper.
Why are people still driving cars? Because the autonomous driving technology wasn’t good until very recently. It has improved a lot in just the last few years, and you can already see self driving cars operating commercially in several cities. Again, it will get better every year, and as it gets better it will spread everywhere.
It’s true that flying cars exist but haven’t become popular or widespread. I’m not entirely sure why. But it is much easier to ask ChatGPT to write some code than to actually try out a flying car.
Of course, eventually the AI will be smart enough to do maintenance, but at that point it'll basically take the job of anyone who does their job entirely on a computer.
Just like with garbage collection, "we need to have proper malloc and free". The moment we gave this to a JVM, the problem went away.
It means giving up control and don't care about the internals (0.1% of developers today care about the detailed internals and performance of GCs.)
What do you mean by this?
The GC works on data, not code.
It could even dynamically decide between using a GC for a given program or not, depending on what makes more sense (thus "constantly generating it").
Had Java shipped a AOT compiler in the box for free, Go would not happened, nor many of the workloads that Go has been taking away from C and C++ on the distributed computing space and devops.
C and C++ would have their use cases reduced to kernel programming, embedded, games and like else.
It got better, but memory leaks are a thing in Java too.
I'd say that's a far easier task than development (from the POV of a machine) because you already have a known "standard" to aim for, and there's much less need for 'lateral thinking'. Anytime you have a delta you can initiate responses (even incredibly minor ones)
And you could send a proverbial army of them at any small regression or complaint for almost no cost.
Testing is hard. No, sorry, I meant to write that COMPETENT testing is hard. Any idiot can do shallow testing and say he tested, and many do. That's not the same thing as doing a professional job of it.
But, the fact is, AI can't be a software developer, because a software developer is capable of being accountable. AI is a machine. Machines cannot be accountable. You can't sue them. You can't jail them. You can't reform them. A machine cannot be a citizen.
A programmer is someone who mediates the gateway between the world of machines and the world of people. This is because machines behave in very particular ways. Just as you should not represent yourself in a court of law, no one who doesn't understand machines should attempt to create a professional grade products with them... Or if they do, expect it to be poor quality.
In this way an AI is accountable too, I can switch from Claude to Mistral.
There was some in #Dieselgate (Developers going to jail for their code).
It is quite strange, since the defeat device part was actually quite insignificant to work around a vehicle reset during testing and skip the warm up timer.
The real scandal is that emission treatment in diesels did not work outside of synthetic kinda steady state tests. And that applied to way more manufacturers than VW.
Then, in the same context, you correct it by providing it with more information about how you like to structure the tests. It starts to understand the "style".
Then, you start to provide the context with testing concerns. By the end of it, the AI context is pretty good (80-90'ish%).
It's nice, as a developer, to be able to say: "test that asset is deleted when DELETE /asset/:id", and the AI converts that into a proper test case, using familiar variables / test structure / corrects the abbreviated text into a proper test title, etc..
- We want this
- We Had this
- This happened
- Already at work
Until recently there was a button on my phone I could press to get immediate directions somewhere, to start a timer, any number of other things etc. A few months ago they updated the button, now it just searches Google.
I don't think rational interfaces of the sort you described will win out. Windows peaked at 7, which was an all but perfect desktop operating system, and they deliberately wrecked it.
The companies who've invested in this technology and control the hardware don't work by solving problems and queries straightforwardly. Rather they are very good at getting in between you and the solution/answer. Even on a B2B level - don't get me started on enterprise CRMs.
I also don't think it would make any sense for me to browse images and fiddle with prompts all day trying to make something happen programmatically, maybe, instead of just writing the code that will surely make it happen.
Copilot and chat gpt the other hand are amazing assets for now.
LLMs are that 'blurry jpg of the internet' but now also more finetunable/specialized.
I'm going to look at siccing some LLMs on old Jenkins errors today, ideally it will give me more time to spend on building things (and hopefully less fires later).
I obviously don't expect it to magically fix everything but I have a good idea of what they're capable of, what they need help with, and what their pitfalls are
I can now have some scripts and some "agents" scan through 250GB of logfiles and do various sanity test things and either report back or make a branch and try to fix it, before i even need to look at it. It costs almost nothing and if it finishes early I can have it "go do the same thing but in rolling 3 month windows to see wtf happened when"
FWIW I think LLMs are more powerful for the language side of things. I get a lot of the programming improvement from python/metaprogramming/etc - but the combination is like having a group of interns you can make do a bunch of tedious/shit work that nobody wants to do.
So why are requirements often mentioned only in passing ?
Don't they deserve some intellectual TLC ? Writing good requirements is at least as challenging as writing good laws. And then, as the article suggests, an AI can kind of fill in the missing bits if it has good cultural context.
There's many good tools now for formulating and managing requirements. Why do I not see papers about how LLMs benefit from them ?
The whole point of making more expressive languages and APIs is that we should be able to solve large problems with only the required amount of specificity in each instance, leaving only the code that is the right level of detail for someone to be able to read, understand, and maintain in future.
In the ideal extreme, it shouldn't be any more difficult or tedious to write the code to solve a problem as it would to give the LLM a description of the solution -- if the description was precise and unambiguous then code of similar length should have been able to encode the same. There are many ways that modern programming continues to fall short of this, and that's a problem we should still be working on instead of giving up on.
Even if writing and maintaining code are completely obsoleted by LLMs, we're still going to have to demand humans in the loop on review and testing before we risk life and limb deploying that code. Code still has to be understandable by humans, so it still has to be written with appropriate abstractions to make review accurate and tractable.
We still have the same incentives to want expressive languages and APIs. If we give up on that and bank on LLM generation instead, we'll stop making progress on expressiveness and be stuck with a stale snapshot of today's programming language evolution, that LLMs are limited to writing and humans are limited to reading forever. Without direct disincentive for writing and maintaining that redundant volume of code, the inevitable review will suffer the most.
There will be no need for human ingenuity. Perhaps if llm had existed at the time of assembly language being predominate there would be no higher level language for humans to use.
As I believe they day there is no more need for humans to be involved in any programme , is the day there is no more need for any reasoning by humans. Not something that seems likely to me.
Then again this article comes from someone developing AIs… how could that not be lofty…
1. things manifest a lot less
2. you don't have to worry about maintenance
I could see a proper structured LLM setup some day even resuscitating 'dead' software.
Consistency is an artistic element shaped culturally. Again, you need to be exposed to cultural elements for a long time, and more importantly, develop an understanding of them.
I think it's very hard to train AI on these two fronts, and that's why we'll be needing programmers for a long time. AI will keep doing the mundane tasks for us though, thankfully!
Consistency - This is what GPUs were made for, putting a bunch of 'effort' almost instantly into investigating any regression that any real SW dev would ignore because, life's way too damn busy.
What you call "personality" seems to roughly mean "predicting what humans like". That's what stuff like RLHF is for. It's also not some sort of ascension where the computer program suddenly "becomes human". It's a spectrum on which we can expect steady improvements (and still never need to call computer programs "human").
AI might have access to the vast amount of design training data, but it can't understand the reasoning behind the variety of those designs, and it can't come up with a similar design every time. It has no cultural affinity, therefore no ability to stick to cultural norms.
So, in order to fill that gap, you need to become more specific with your prompt. And the more specific you get, the more your language becomes closer to a programming language, therefore contradicting the purpose of the AI in the first place.
I'm sure we'll see improvements, but I find it very unlikely to have the same level of understanding without having the same level of cognition and experience as a human, hence my phrasing.
Code exists solely for humans to interface with machine language. If code is involved at all in any solution, it's a concession to humans.
An AI with the power to build software from some definition doesn't need to write code. Else it simply does not have the power to write software alone.
- hype
- vested interests
20 years before that it was CASE tools.
Management has been searching for a way to eliminate us from the beginning. The "Software Crisis" of the 60s was simply the fact that programming was hard and businesses wanted software but didn't want to learn how to make it, or to depend on people who knew.
This is why I'm distrustful of "imminent death of programming as a profession predicted",whether it be AI or low/no code tools, whatever. At the end of the day you have human desires that are not being met but could be fulfilled with some nonexistent software. To date only humans fully comprehend human desires, so it takes humans to bring that software into existence.
If AI ever gets as good as us at coding, we need to give it personhood and full rights under the law. Either that, or scorch the sky.
Not fighting, just trying to understand what you meant
I think this was what GP is talking about. Students are now using ChatGPT to make assignments. I am divided on will that create worse new programmers or will that create programmers who use ChatGPT for everything replacing the previous generation of entry coders who used stackoverflow for everything.
And short of software running directly on models, I don't see how programming is going to be completely automated away from humans.
And even if you can make models competitive with traditional software environments, I don't forsee managers and CEOs spending their days prompting the AIs to produce the right kind of code their customers don't know they need. They will pay prompt programmers to do that instead.
> The logic doesn’t go away. Just because a decision is embedded into the wiring of a Zapier rule doesn’t remove any of the burden of maintenance / correctness.
Of course, AI is a lot more powerful than no-code, but the "End of Programming" suffers from the same delusion. If AI can reliably make every decision around engineering, design, and product, it would be capable of doing every task in the world. It's surprising that so many engineers believe writing things in plain text would obviate the need to learn programming.
[1]: https://www.alexhudson.com/2020/01/13/the-no-code-delusion/
This is a key insight.
There will always be problems that cannot be automated but they will ve minimal and very specific.
4GLs (Visual Basic, Delphi) and Low/No Code are promised as ways to have "business analysts" or "citizen developers", i.e. lower cost resources, do the work. To be honest this is successful enough to keep selling the idea and products for a period of time. In reality most of the successful work in these areas are done by developers or people that could be developers.
Code generation by LLM is the same thing. Yes, it has value. In the hands of a motivated software developer it will do great things. In the hands of someone that wants to take a short cut because "lower cost" it will fail way more often than it will succeed.
That said, AI and code generation are here to stay and software developers should get used to using them.
The original fallacy seems to be the belief that what is hard with programming is to remember all that pesky syntax. If we didn’t need to do that, and instead could just tell the computer in plain English what we wanted, we could get rid of programmers all together. (And the fallacy isn’t new, see COBOL).
Program equivalence, for instance, hits the wall of the halting problem. Yet somehow people think that it's just a matter of time before an AI that can solve the problem of giving you a mathematically equivalent code to an existing code.
This is a solved problem in the context of total programming.
I don’t see programmers going away because of the current wave of AI, I don’t know about what is coming next, but for sure the current hype is very bubbly and also dumb.
What happens in the mean time will be unclear, but I think most of us still make the false assumption that LLM's are 'robots', while in fact it already became clear that emotional blackmail works on them. AI's might not be as rational and cold as we might expect.
So in the end, I don't see how humans will be able to keep the upper hand on:
- doing user interviews
- analyzing user behaviors
- optimizing business decisions
- writing code
- tracking down issues
I don’t really see the issue? You take ownership with code review and testing. It’s the same thing you would do if you copied an example that someone gave you and then modified it. The original author isn’t responsible.
(If you don’t understand what the code does, throw it out and find something else.)
It was bullshit then. It is bullshit now.
You should think of this AI instance as just one more advanced programming language, that's all. It'll be no different from having to learn to program in Java, or in Rust, or in C, or in whatever.
But mark my words, there'll be some poor programmer who will have to do the work of programming.
I guess outsourcing companies pay their employees very little and they aren't able to hire top talent. And even if the pay was good, best programmers don't like working for outsourcing companies. The ones they do work for outsourcing companies don't care about the quality of their work as long as their company is paid so they get paid, too.
We assigned a task to one guy in Ukraine and two months latter he didn't complete it. One of our colleagues did it in three days.
My take is if you want to get good results from developers from another country, you have to hire them directly.
Given the vast discrepancy in turnaround times -- I would seriously start to wonder about the person on your own team who was responsible for cutting out and assigning work to people outside the company.
Who apparently had not even a ballpark idea of how long the task should take. And who perhaps didn't do such hot job of communicating the requirements, now did they. And on top of that, apparently went to sleep on the task of, you know, tracking the status of the project, checking whether the intermediate deliverables (were there any)? actually worked and where up to team standards in terms of quality, etc. And yet they're still on the job, for some reason.
People love to blame freelancers, and they especially love water-cooler tales about how some project (whether by a person/team inside the company, or outside), and then was done by another person/team in a small fraction of the time. But usually there's more to the story.
All the shittest most inefficient projects I've been on have been loaded to the gills with libraries, frameworks, dev tools and convoluted typescript wankery, all in the service of making things "easier" on the devs.
Eventually once they've tinkered enough they get it to the point where it only takes a team of 20 devs 3 years to build a form. Success!
I also tried this with Tic Tac Toe – it didn't work at first due to a bug in the CSS but the agent was able to fix that bug in the second round. It knew the context, knew the files it had created in the first round, and knew what I was talking about when I said "the Xs and Os are not visible", etc.
So, yes, program specs might still be needed in the beginning, when a piece of software gets written from scratch. But AI will often just fill in missing steps, and once the code has been written, the AI will simply iterate on it, and so the code will take on the role of the spec, just like it does nowadays. No need for the product manager to write detailed specs anymore.
All in all, I think the second direction mentioned in the article (AI becoming a full-blown software developer) is a lot more likely than the author thinks.
Maybe, but what I was trying to get at was: If you grant an LLM access to your file system and to the internet (like evo.ninja does), it is already very powerful and can work independently. It will read in and analyze files, remember its original goal even in the middle of some subsubtask it is executing, will self-correct and iterate, et cetera, so context size and the quality of how it solves one-shot tasks are no longer the main limitation.
Of course I am aware we are not "there" yet and I am sure an agent like evo.ninja will still struggle with large, unknown code bases in many cases. (Can't try it on our proprietary code, unfortunately.) But if the past year has taught me anything then it's to not underestimate the future.
If you give it some documentation, background info, code and traceback info (and know to avoid context window poisoning) you can find it's capable of even helping solve rather tedious CUDA/etc issues.
Where this kind of statement ("Holy crap! It wrote me a program and it worked!") tends to make me skeptical is this: the program always seems to be something that's already been done a million times before.
IOW, something that was probably somewhere in the model's input dataset.
I would want to see it produce something truly unique that I'm trying to do for my business -- something that's never been done before. Then we can talk about AI's ending coding.
Until then, they're going to be a tool used by actual coders IMO.
Most software being written today, in its essence, has been done a million times before. It's just that, from case to case, the tech stack, interfaces, and data structures always differ slightly, which says little about the difficulty of the software problem being solved and is more a function of your organization's history, the developers' background & personal preferences, industry trends, et cetera. In other words: If zoom out a little, the wheel is being re-invented on the daily.