Large Language Models and Future of Software Development.
Saurabh Malpani
Software Architect | Senior Software Engineer | Software Engineering Manager"
Software has become fundamentally important for human existence. If all the computers of the world shut down very bad things would happen. How software is developed is a crucially important concern of human society. LLMs promise to completely change the way we develop software. In this article I am writing down my thoughts about it.
Software development before LLMs
Up until 24 months ago, software was produced by individual humans or through human collaboration. Code generation tools, transpilers, no code/low code platform all produced software in a pattern, the business logic would be encoded and/or maintained by a human. The inspiration to develop or modify the business logic itself came as "requirements". These "requirements" are sometimes the imagination of an active human mind, needs of society/customer or defects in existing software. As yet, a software developer would engage with another human in speech or writing to assimilate their understanding of the requirements and create the business logic. There was no computer tool that would convert abstract requirements into business logic.
Software development after the advent of LLMs
One can prompt an LLM with their requirements. The prompt could be either to an interactive program like chatgpt, or to an embedded AI agent like GitHub co-pilot that modifies the code along side a human developer.
The key difference is that the LLM is now increasingly taking over the role of developing the business logic, leaving the human in most cases to correct, review, verify, debug and test the software it produced. A human can in fact convey to the LLMs the errors or problems with its work, and ask it to revise.
The quality of human - LLM communication is becoming an incredibly important skill going forward. Prompting and prompt engineering has now become a very lucrative career.
LLM learning method
A LLM just goes through a large amount of human generated text, and questions and answers and starts producing suitable responses. This is the process of supervised learning a.k.a training. Training is a long cycle of feedback where we keep providing feedback to LLM until eventually it starts doing the right thing. It is like someone learns by observing, repeating and feedback without actually understanding the fundamentals of the topic. It seems therefore fundamentally impossible to decipher how and why an LLM knows what it knows. A LLM has no grades, no project experience and no systematic learning journey over a single topic.?
How did LLMs learn software development
LLMs consumed all text books, articles, blogs, documentation, software, example programs etc. that were fed into it as input and "magically" figured it out. The more it saw, the better it became. The more correct feedback it was given, the better it became. At some point it acquired the ability to produce reasonably good responses for requirement.
Human learning method
A human doesn't acquire the ability to provide intelligent answers in the same way as an LLM. A human first learns a few basic courses, languages, logic, and math. We spend years in education and training to be able to understand the same content. It takes incredibly much longer for us humans to produce similar content as an LLM. We are different from LLMs in several ways, a) Our knowledge and expertise is limited to only a certain topic. b) We can explain our entire learning journey and prove how and why we can claim to be an expert at a topic using our grades, references, projects, and work. ?
How humans learn software development
Like any other field, humans start with basics. We learn logic, computer mathematics, some programming language syntax. Our journey continues with writing a toy program and making it work. Our tasks are successively made complex during course work. We do lab exercises, work on a few small and medium sized projects until someone deems us fit for collaboration. Then we continue our journey. What we know and how much we know depends on our own efforts, opportunities, passion and ability to learn.
In what ways LLM software development is superior to humans
First of, even the smartest and the most knowledgeable software developer human in the world, knows only a few programming languages. They may be fluent in 3 to 5 and may not have worked on major projects in more than 5. Likewise a human may know some libraries, packages, middleware, technologies, fundamental concepts of computer science, but definitely not all of them.
An LLM has practically the knowledge of every popular programming language, library, concept, middleware, technology. It can switch from Haskell to Rust to Python in the blink of an eye. It can write programs using PyTorch, Kafka, a Linux kernel module, ... all at the same time. The breadth of LLM knowledge is insanely beyond human ability.
LLMs are incredibly faster than humans too. It can produce code 1000s of time faster than a human.
In what ways human software development is superior to LLMs:
LLMs hallucinate. They may produce software to precise accuracy 95% of the when the requirements are clear. But sometimes they are wrong. When they are wrong, they are confidently wrong. This is because of the training method. An LLM can only spit out what it considers is a reasonable response to the requirement prompt without any consideration of being correct or logical. It doesn't have a systematic way of working. The so called step-by-step approach of course definitely helps and can make an LLMs correct itself. However it is hard for it consider how many steps to take and at which step it has gone off the rail. People keep coming with new ways to get the most out of an LLM by communicating with it in different ways. The fact remains that as of today, an LLM response for software generation has to be critically reviewed, corrected and adjusted by a human before it is fit for production use.
Does LLM learning method makes it fundamentally unusable for serious software development?
This is a subjective and sensitive issue. My view is that, it is the demonstrated and repeated outcome and not the learning method dictates the utility of LLMs for software development. The industry goes by the rule that if someone can pass the interview they are good enough, the consideration of the learning methods is secondary. Further it is not the first time where AI or computer science solved a human problem in a way different than a way human would solve it. On the other hand , lack of systematic learning and the QnA training approach raises doubt over LLMs suitability.
领英推荐
Resisting LLMs for software development is futile.
When AI enters a field and starts doing anything that a human can do beyond 80% accuracy, the days of human doing the same task in the same way get numbered to a small value.
When chess engines came about, humans would easily beat them and mock them. Deep blue, the famous chess engine defeated the best chess player at that time, Gary Kasparov, who had an ELO rating of around 2800 in 1990s. The best human chess player today, Magnus Carlsen, has an ELO rating points only 100 more than Kasparov at its peak. Stockfish and Leela, the best chess engines in the world are at ELO ratings of 3500. This 700 points difference is exponentially superior. It is not envisaged that a human would be able to breach the 3000 ELO barrier for another 100 years or ever. Chess used to be a showcase sport for human intelligence, but completely taken over by software when it comes to peak performance. There isn't much doubt in my mind that LLMs or other AI techniques will get progressively superior to humans in software development. For certain kind of software it is already superior.
LLMs have just starting developing software and is already outperforming humans in most cases. There is certain type of software that would be hard for LLMs to write. But it is only a matter of time when LLMs can do all software better than all humans. What would that day look like and what would it mean for software engineering is hard to say.
What should you do today if you are a software engineer?
There is no good answer to this question. Most software engineers are very busy learning new programming languages, become experts in popular tools or tech, or better yet solving a large number of leetcode type problems as a means of career protection. LLMs have destroyed this protection. It would matter less and less if you can do postgreSQL programming through a Java client. You may in fact be a javascript + mongo db programmer and your next job may require you to do structured programming using C++. If you are a good problem solver who knows how to use an AI tool, the employers may trust you to just figure it out with the aid of a LLM.
Perhaps that is the answer, learn to build software with AI assistance, solve problems, work on ideas, do projects and learn fundamentals. Or well if you can be a Ninja on some hot tech than be a Ninja.
Another direction may be to learn the LLM / ML technology itself and get ingrained into the production pipeline somewhere - build your own models, LLM/ML Ops, prompt engineering, RAG, fine turning, - these areas are probably going to remain hot for a while.
Finally working in the guts of operating systems, networks, databases, embedded systems, - the hard stuff may keep you a well paying job.
LLMs will increase outsourcing.
Outsourcing has at times been frowned upon because the quality of software talent at an offshore center might not be as good as someone who went to school and worked in an advanced industrial economy in the US or Western Europe. That gap was already bridged with off shore centres gaining experiences and advent of knowledge sharing through internet especially MOOCs. LLMs will completely destroy that divide. A capable and hardworking person empowered with LLMs for software development is reasonably at the same level as most others. Quality of work won't suffer with lower investment. This will either directly result in lowering of wages for software engineers in advanced economy or increased outsourcing. Perhaps both.
What should you if you need to employ software engineers?
A large number of organisations are taking a pause to understand their software development personnel needs in 2024. There is a growing, sometimes irrational, sometimes correct belief that using LLMs they can eliminate software engineering roles in their organization. However it would apply with a varying degree of certainty to each organization, group and team. The leaders of these organisations have an increasingly hard task to comprehend what they should or shouldn't do. The leadership has already been struggling with on-site, hybrid, remote working model for more than 3 years now, and they have yet another factor in decision making. With a potential savings of millions by reducing head count on one hand, and potential risk of completely derailing software development by removing critical personnel, product managers and project planners are splitting their heads. My feeling is that they will experiment gradually in most cases, and you will hear blood bath stories in some extreme cases. Be prepared and do everything to secure yourself.
Conclusion:
LLMs in due course would fundamentally transform how we develop software. We are currently going through a transitory period and no one clearly knows what awaits us on the other side. Whatever it is humanity will make more forward progress than backward. At the same time, there is a challenge yet again to continuously evolve as a software professional with the advent of LLMs. Being aware and educating yourself a little each day can go a long way towards it. There is no need to panic but ignoring the future and realities can be perilous.