Large language models have taken the world by storm. By now, it’s pretty clear that they are capable of more than originally expected, both by the public as well as their creators. Software developers in particular have been surprised by how good LLM-based tools are at writing code, and even entire applications. With this success of AI comes the argument that it will kill jobs. Like cars and computers did in their day, it raises the ghost of the fear of growing unemployment. For previous technology innovations, that didn’t happen. Is this time different?
It’s not. AI will not kill jobs for software developers. In fact, my prediction is that AI will create more jobs for them than it kills. Those engaging in the fear-mongering misunderstand the fundamental goal of a software developer. Yes, they write code. But code itself is not the final output of a software developer. The goal is solving a problem for a user. And while the current AI tools are good at writing code, they can’t yet solve the problem independently. That may change soon. But this change requires another breakthrough comparable to the creation of LLMs. Today’s AI models don’t have agency. Moving to agent-like systems requires solving many difficult problems in AI - a fact acknowledged by many of the experts in the area (e.g. see this interview with Demis Hassabis).
Even if we create AI which can independently solve a problem for a user, someone still needs to direct that AI. Software developers are ideally placed to do this. Having experience in pre-AI technology puts you in a unique position to understand the mistakes it would make, and correct them. One of the reasons for my mindblowing experience with Cursor was that I was able to debug and fix problems, not just write code. But that still requires a human behind the wheel who knows what to ask, how to write a prompt for the AI and think critically about the offered solution. Solving a problem through software is still an iterative process. It requires adaptive learning in a complex domain. It sometimes requires trial and error to discover solutions. Humans are still best at these activities.
Lastly, I’m sure LLMs will become better with time. Maybe some day they will be able to do everything a software developer does today. That still doesn’t mean the job of a developer would disappear. The car didn’t kill the job of a driver, but changed it. It required different skills. The computer didn’t kill the job of an accountant or banker. It made accountants and bankers more efficient. You could say these jobs kept their names but are fundamentally different, and you would be right. Accountants don’t spend their time doing manual calculations any more. They focus on the strategy of accounting. Is that the same job? In outcomes for the user, yes. In what you do day to day - most definitely not.
It doesn’t matter though, because that’s always how technological progress works. It changes how humans have to behave, sometimes fundamentally. The important thing is that we’re all better off as a result. We are better off not only through being more efficient, but also through opportunities which didn’t exist before. Yes, the car made drivers more efficient. But it also enabled suburbs, larger cities, and practically served as the first product for the assemly line, which has had immeasurable value for everyone. And I’ll leave it as an exercise for the reader to measure the value of the opportunity created by computers.
Developer jobs are safe; in fact GenAI may be a big boon for them. The caveat is that to benefit, you need to be open-minded. I like how someone at work recently summarised this: “AI will not take your job. But someone using it might.”
A couple of years ago I spent some time to learn Python basics. I had spent enough time with Python the language, but not the community, tooling and libraries. I wanted to complete a project so I could see what developing with python feels like. I created an application - using FastAPI, SQLite, SQLalchemy, and NextJS for the front-end. In the end, I had a complete app, with a UI, a RESTful API, a data model, ability to store that in a database, support basic migrations, and using Docker to deploy the whole thing in containers. I didn’t pace myself as the goal was learning rather than speed, and it took me a few weekends to complete.
Today, I did all of that in 15 minutes. I did it using Cursor - the recently released AI editor which uses a large language model to do the coding for you. I didn’t write a single line of code.
I haven’t been this impressed by a new tool or language in the last decade. I have been doing software development for 17 years now, although less hands-on in the last 5-6, and although I’ve had plenty of “wow” moments experiencing different tech for the first time, nothing has compared to Cursor. I am fully sold on AI assistants.
Cursor is an IDE. It’s a fork of VS Code (a great editor itself). The team who created it made it standalone rather than a plugin, so they can control the full experience themselves. I think that was a great decision, because it is a completely different experience. While it’s still a text editor, what you do most of the time is chat to the AI, not write code. The code is written by the LLM (Claude 3.5 Sonnet in this case), and you just need to give it the prompts, and control where the generated output goes. I had to select which file to apply each snippet to, but I’m sure soon you won’t have to do this either. What blew me away wasn’t just the fact that this is possible. Many other AI coding tools have made the job of creating a basic app easier recently. Github Copilot has become a standard in every developer’s toolbox. But Cursor stands out in two important aspects.
First, it generates entire folder structures and applications, rather than just auto-completing what you write, or operating on single files. I think this is the first in the industry and a game-changer. For many people new to coding, half the effort and confusion is in setting up the right files, folder structure and configuration. That’s hard when you don’t know what you’re doing. Cursor automatically does that for you.
Second, Cursor was able to debug, diagnose and fix problems encountered during the process. The initial application didn’t run out-of-the-box and there were some mistakes in the code. But after asking it why and giving it an error message, the LLM was able to correctly diagnose the problem and offer a solution. This happened multiple times through my session; once to fix a CORS issue, other times to deal with some NextJS rendering convention. When the code writing was done, I even asked the editor to pre-fill some sample data in the DB so I can see how the UI looks without having to do that myself. Not only did it do that, it suggested using SqlAlchemy’s migration capabilities, so you don’t have to do that multiple times and the data is pre-seeded only if empty. This stuff is non-trivial.
All of this goes way beyond just predicting the next line of code. I think we’re at the start of a revolution in how we create software. Does this mean software developer jobs disappear tomorrow? No, I don’t think so. I just think it will enable people who have no idea how to code to write entire apps themselves. Cursor won’t create and maintain enterprise-grade applications by itself, but it will fulfil the needs of the majority of hobby projects. It will enable product managers to test how things work with customers quickly.
I plan to start using Cursor as the default for any new hobby project. Given this is barely the first version, I can’t wait to see how it will evolve and what new things it will enable for software engineers. I wouldn’t be surprised if it entirely transforms the IDE as a concept.
I had a blog before, but it’s gone. I killed it several years ago. It was one I started as a student, so most things I wrote appeared very naive and badly written. I have been toying with the idea of starting again for years now. There are things I want to say, but I never got round to it. However, the idea of writing always comes back. It’s one of those devil figures at one’s shoulder in children’s cartoons that never goes away and has an agenda. I recently went back to reading Scott Hanselman, who is one of the most prolific bloggers I’ve seen, and I wanted to figure out why he does it. Here’s what he says:
“A lot of people say, ‘Well, Scott, you’re doing all this stuff. Why do you do it? Are you not sleeping?” Hanselman says. “It’s because, I must dance. I can’t stop. Whenever I think about stopping, I think about this little boy and how excited he is about doing what he’s doing.”
Unlike Scott, I can stop, and I did for a long time. But doing that keeps the voice in my head and it doesn’t go away. So after a few years, I’m finally trying again. If blogging is what it takes to drive that devil figure away from my shoulder, then so be it. Here it is.