There has been a shift in how we discuss this question.
For a long time, the answer was, "No jobs are at risk, AI can't compete in any scenarios. At best, it's a tool."
Now the answer is, "Only a few jobs are at risk, AI can only compete in a small range of tasks."
It's possible we're at the beginning of a hockey stick graph.
So what would it look like for AI to make the leap to mid level developer? It would have to understand:
1.) The codebase
2.) The technical requirements (amount of traffic served, latency target)
3.) The parameters (must have code coverage, this team doesn't integration test, must provide a QA plan, all new infrastructure must be in Terraform)
4.) The end goal of some task (e.g. integrate with snail mail provider to send a customer snail mail on checkout attempt if it was denied for credit reasons)
It would then have to make a design based as much as possible on the existing code style and library choices and follow it.
This is all probably possible now, although perhaps not for a general AI or LLM. But someone could build a program leveraging an LLM to provide a decent stab at this for a given language ecosystem.
The hard parts:
Point 2 requires an understanding of performance which is a quantifiable thing, and LLMs up until now have been bad at making math-based inferences.
Point 3 requires the bot to either provide opinions for you (inflexible) or to be very configurable for your team's needs (takes longer to develop).
Point 4 requires a _current_ understanding of libraries, or the ability to search for them and make decisions as to the best ones for the job.
-----
What about extending the above for a senior role? Now the bot has to understand business context, technical debt (does technical debt even exist in a world where bots are doing the programming?), and other "situational factors" and synthesize them into a plan of action, then kick off as many "mid level bot" processes as necessary to execute the plan of action.
The hard parts:
Current LLMs are pretty uninspired when suggesting ideas.
Business context + feature decisions often involve math, which again LLMs aren't great at.
I would suggest a 5th that AI tends to be very poor at models and security/error detection. AI is pretty good when there's no errors, no security problems, and no semi-malicious-ish users, but pretty bad under real world conditions.
What exceptions should I be catching off this database connection, not just listing them but knowing even the concept that I should consider those error conditions? What could possibly go wrong with simple string concatenation when putting together a database query? Is there anything wrong with trusting the user to enter a quantity at a self checkout stand, and is there any input bounds checking to be done? (Like not permitting negative number quantities of produce, or not permitting the user to enter thirty different items in a row claiming them all to be cheap Idaho baking potatoes)
"Plz write me a hello_world.py" is pretty easy for an AI, but actually writing usable code seems quite challenging.
I am so old that I predate the internet going back to 1981 and I remember coding without google and stack overflow and similar resources; life was different back then and if you couldn't google how to invert a binary tree either you figured it out yourself (like a bad interview) or you researched paper textbooks or you didn't do it. Likewise AI will be a similar step, nobody will ever again type in by hand something for example like connect to a MSSQL DB in C#. But much as being able to google the algo to invert a binary tree didn't put all programmers out of work, it seems likely that not having to hand type simple stuff will put many people out of work.
I see the AI situation as very similar to the claim that photocopiers and NOLO publications will put all the lawyers out of business. Sure, some very small businessmen will get away with hand filing their own homemade incorporation papers without lawyers, and there will be a small amount of wage pressure, but overall they're not going to get wiped out.
The 7th point which is unfortunately yet another lawyer analogy is chatgpt for software development is kind of like a magic "nolo publishing" where you can ask for any very short programming textbook and chatgpt will push it out.
However, the problem with being your own lawyer (or software developer) is the AI will never exceed its previous accomplishment but your goals and desires and requirements certainly will. So its a rising tide lifting all the boats situation. The game will be upped; you're not getting ahead by using AI you're just not going out of business, and the jobs are going to be even harder and higher paying. The cousin of this problem is if you have no idea what you're doing and randomly file legal papers in a best effort sense, just blindly trusting a liability-free book that may be out of date already, you'll eventually paint yourself into a corner if you try to set up your own LLC, c-corp, trust, will, etc, and as per above the AI was already operating at its limit so it won't be able to help and you're past your limit which is why you used the AI in the first place so you won't be able to help yourself or sometimes even understand the problem. Which is why human lawyers still practice...
In summary point 7 is I expect a lot of money will be made by humans cleaning up after AI "accidents". The purpose of the tech to "do stuff" beyond your skill level, which always turns into a disaster sooner or later.
A pretty good analogy from the pre vs post internet era is being able to blindly cut and paste code, perhaps an algo or an API, doesn't mean you can actually apply it correctly, use it, understand it, or troubleshoot it. And so it will be with AI, its just "nicer looking" code to cut and paste. But everyone who's ever self taught themselves an algo or an API knows they didn't really know anything when they cut and paste, the real learning came after.
And that's just context. It also has to be capable of debugging its own code, and looking for resources when it doesn't have the knowledge to come up with a solution.
That's a good point, and I guess the meta point is that there are a thousand and one things I haven't mentioned here that it would have to do as well. To some extent perhaps we could solve this from the LLM the same way a human would: by iteratively plugging in the errors generated by the output back into the bot and taking some next step based on the suggestions generated.
But then we'd have to coerce the bot into generating structured responses that can act as next steps.
It doesn't have to do any of that - if an AI assistant enables a team of 3 developers to do what just last year needed 6 programmers, then it has automated away half of the jobs, even if those 3 people are the only ones who can debug the code and look for resources when needed.
I'll toss out a 6th point that AI as I've seen it so far is beyond useless at answering "I" questions, but OK at answering "groupthink" questions.
Ask AI if "I" should use AWS, GCP, Azure, private cloud, or ? Instead of an answer explaining what "I" should do you can only get a generic groupthink comparison of "well, Azure is pricey for DB compared to AWS" and no interpretation.
For a long time, the answer was, "No jobs are at risk, AI can't compete in any scenarios. At best, it's a tool."
Now the answer is, "Only a few jobs are at risk, AI can only compete in a small range of tasks."
It's possible we're at the beginning of a hockey stick graph.
So what would it look like for AI to make the leap to mid level developer? It would have to understand:
1.) The codebase
2.) The technical requirements (amount of traffic served, latency target)
3.) The parameters (must have code coverage, this team doesn't integration test, must provide a QA plan, all new infrastructure must be in Terraform)
4.) The end goal of some task (e.g. integrate with snail mail provider to send a customer snail mail on checkout attempt if it was denied for credit reasons)
It would then have to make a design based as much as possible on the existing code style and library choices and follow it.
This is all probably possible now, although perhaps not for a general AI or LLM. But someone could build a program leveraging an LLM to provide a decent stab at this for a given language ecosystem.
The hard parts:
Point 2 requires an understanding of performance which is a quantifiable thing, and LLMs up until now have been bad at making math-based inferences.
Point 3 requires the bot to either provide opinions for you (inflexible) or to be very configurable for your team's needs (takes longer to develop).
Point 4 requires a _current_ understanding of libraries, or the ability to search for them and make decisions as to the best ones for the job.
-----
What about extending the above for a senior role? Now the bot has to understand business context, technical debt (does technical debt even exist in a world where bots are doing the programming?), and other "situational factors" and synthesize them into a plan of action, then kick off as many "mid level bot" processes as necessary to execute the plan of action.
The hard parts:
Current LLMs are pretty uninspired when suggesting ideas.
Business context + feature decisions often involve math, which again LLMs aren't great at.