A few weeks ago, Jeffrey asked a question on the Laracasts channel about our predictions for the future of programmers in the AI era.
Like you, I followed the AI discussions on Twitter between doomers predicting we'd lose our jobs and bloomers joking about the stupid mistakes an AI made while generating code. And for a while, I did what I always do: I ignored the hype and focused on what was solid at the time.
However, I know a change is coming. It may or may not arrive in our lifetime. But it's coming. In the end, the only constant charactaristic of the word is change.
The changes AI will bring will not be drastic at first, but they will be disruptive in the long run. And to be able to predict what will happen in the future, we have to look at the past.
History of software development
In the early days of computers, people wrote software using a language with zero abstraction level from the hardware, machine language. It was not easily understood by humans, and only a few exceptionally gifted individuals have been able to write software in it.
So, Assembly language emerged to make things easier and to allow more people to write software. Then came high-level languages, which made it even easier to write software with simple English words.
A high-level language increases the effeciency of software developers as it allows them to do more in less time by abstracting many low-level instructions.
Then came frameworks, which added more abstractions. Visual code generators; more abstractions. No-code tools; more abstractions.
Abstractions come in a variety of flavors, but they all perform the same function. Allow developers to write software more efficiently, resulting in better use of human resources. It also abstracts away complex computation problems in order to make it more difficult for developers to make bad decisions that result in bugs or inefficient compute resource management.
By looking at this history, we can cast our predections for the future. And the future is more abstraction, through AI.
I believe that the natural evolution — from machine language, to assembly, to high-level languages — will eventually lead to natural language. That is writing software in plain English.
Writing software in plain English has the added benefit of not requiring programmers.
The problem with programmers
We programmers, or at least the best of us, take pride in what we do. We want to get things right from the beginning, we despise writing spagetti code just to get to market as quickly as possible, we adhere to best practices with zeal, and we have strong opinions about our preferred tech stack.
This causes two issues: we overengineer, and we like to re-invent the wheel if it's fun. In terms of business, we are not pragmatic. Our job, we believe, is to write the most sophisticated code and systems, not to contribute to business growth and profitability.
That is one of the primary reasons why no-code tools have grown in popularity. It enables people with business ideas to quickly build something. They put a few pieces together and have a product they can sell in a matter of days, sometimes hours. Programmers are no longer as required to launch a SaaS as they once were.
Does that mean we, programmers, will loose our jobs? My answer is no, continue reading.
With all that being said, let's explore how a SaaS founder would use AI to build. Something like this:
The app should have a
/ordersendpoint that only authenticated users who can place orders can access. The endpoint is used to place new orders in the database.
A vendor has to be provided in the request input and should match one of the existing vendors in the system.
An order must have at least one product. All provided products much match existing products in the system that belong to the vendor the order is for.
The client must identify the quantity for each product. Minimum 1, maximum 100.
Store the order in the database, along with its products, and associate it with the current authenticated user.
Return the full order object to the client.
Startup founders and indie creators will need to improve their writing and communication skills with AI models. In other words, they will need to learn how to describe what they want accurately. If they don't, they'll have to hire people who do.
These individuals are now referred to as "Product Managers." Their function will be critical in the AI era. As important, if not more, as developers in the current day.
The product of these instructions to the AI is a binary that gets deployed to a host machine that serves it to the world.
Initially, human software developers will be required to examine the AI-generated code. They will also need to write test cases to cover the AI generated code.
But eventually, another AI testing framework will be used for testing. You write test cases using natural language and the framework challenges the generated code and reports any mismatches.
It may also be able to suggest changes to the expectations you provided to the main framework in order for it to behave as expected.
The app will be served to the world by an AI-powered cloud solution. You tell it what your budget, throughput, and availability expectations are. It takes care of everything behind the scenes and only contacts you if it is unable to meet your expectations.
An AI will sit there and monitor everything for you. Its job is to ensure that all other AIs are performing their duties properly. It will notify you if an AI misbehaves and, if necessary, will send a full report to the AI maker for diagnosis.
What will become of programmers
I believe programmers will be working on training AIs on how to match expectations written in natural language and how to manage system resources. Another group will focus on validating the output of an AI. Another group will work for companies with very specific expectations that AIs have yet to be trained to meet.
The rest will work as architects rather than programmers, defining the rules that the AI should follow while creating the program.
If you're a programmer who is worried about your job today. I'd begin by saying that I'm not concerned about mine. There's no need to be concerned. For the foreseeable future, skilled programmers will be in high demand.
Before AI can build apps on its own, thousands, if not millions, of them will be created. Millions of apps have already been created, and it is critical that they continue to function. Who will be in charge of all of this? Us.
However, if you want to prepare for a future in which you'll be working on new and exciting projects rather than maintaining legacy programs written in high-level languages, here's what I recommend:
First and foremost, get rid of fanaticism. Master more than one programming language and framework. This will help you activate areas of your brain that would otherwise be inactive if you followed a single opinionated paradigm.
Second, avoid new abstraction tools in their early stages of development. They will almost certainly be rendered obsolete by AI before they reach maturity. You want to learn mature tools so that you can understand how they work on a deeper level.
The goal is to progress from programmer to architect, which requires a thorough understanding of computers and networking. This knowledge could be obtained through academic study of computer science or through reverse engineering tools that provide abstractions.
You do not have to dive right into the deep end of computing. You can begin where you are and work your way. If you're using a framework (Laravel, Symfony, Rails), learn how it works and why it does things the way it does. Then, look into how the programming language works and what it does behind the scenes.
When you feel you have enough knowledge, you can move on to more advanced topics such as how processors and networking devices work.
Don't panic, use mature tools only, study how these tools work and dive deep whenever you get the chance.
I'm Mohamed Said. I work with companies and teams all over the world to build and scale web applications in the cloud. Find me on twitter @themsaid.