Some Advice for Software Developers in the Age of Large Language Models


It has been a while.

Recently, like - I believe - many of us, I have been thinking about what software development will become in the near to mid-term future considering the impact that LLMs are having on our profession. What does it even mean to be a software developer if LLMs can create a perfectly working backend in seconds? I do not believe we are quite there yet, but I have to admit that recent - as in, recent years - development has been quite impressive.

I do not want to be misunderstood: I do not believe that LLMs will do a good job at writing code anytime soon. What I am scared about is that the people in charge, who do not possess enough software development experience, believe that LLMs produce pretty much the same quality of software that a human would in a fraction of the time. It does not matter whether the assessment is accurate or not, as long as it is coming from the person deciding whether you are still needed in the company or not, you will still lose your job.

There will probably - and we are living it right now, I believe - be a period of time of a couple of years in which software development roles will decrease because the demand is largely being met by “AI-augmented engineers” (I made that term up right now, it is also misleading since I believe most of them should not be called engineers).

Why I Hate Them

I have grown to hate large language models. I have multiple reasons for this.

Enshittification

First of all, the recent developments in artificial intelligence are largely responsible for the immense decrease in software quality that we have been experiencing. Software made by big corporations has often not been of the utmost quality (because of the focus on profit rather than on delivering an excellent product), with some exceptions. But with the rise of large language models in the context of software development, we have been seeing some terrible software that should have never been shipped (I am looking at you, Microsoft). Think about Windows 11. Microsoft Teams. Github. Even certain parts of Microsoft Outlook.

Ethical Matter

The second reason is that by using (and - to some extent - relying) on large language models for the code you are producing could be considered unethical by some. Again, there are multiple reasons for this. The environmental impacts of datacenters required for training and running large language models is one of them. The impact it has on the landscape and wildlife, the water consumption which is an issue for the people living in the vicinity of datacenters, the noise pollution, and the energy they consume which probably does not come from very environmentally friendly sources are all points that cannot be ignored. This is the environmental aspect, but one cannot understate the copyright infringement that is necessary to obtain the data which is used to train these models. Books, written by real people, who have had to practice and refine their craft to be able to produce such quality texts. Code, written by developers, who have had to study for years. Blogs, in many cases written by independent people, who have been putting their thoughts and experiences out there in the open. These kinds of pieces of content have all been stolen, and nobody in the political scene is doing anything about it.

Lobotomization

The third reason I have come to hate large language models is the metaphorical lobotomization we are self-inflicting on ourselves by not thinking about solutions to problems. Do we really want to outsource our intelligence? Can we not rely on our own intelligence to solve our problems? Why do we have to ask an LLM to create an endpoint for our backend. Can we not do it ourselves anymore?

I would like to express some deeper thoughts regarding the third point. Let me ask you this: what is the main difference between somebody that has no idea how to code and somebody that is really good at it? Of course, there are many, but the main one - in my opinion - is that the latter has simply done it a bunch. He has studied, and he wrote a lot of code. Eventually, he got really good at it. The process is simple, but it is everything but easy. Writing good code and creating complex software requires deep mental struggle. That is uncomfortable. Especially at first, when you feel like you are unable to move forward because you have no idea how to solve a certain problem. But that is exactly where the learning happens.

So what now? We went through all of this struggle to learn a very difficult skill (that is - differently from what many (lazy) people want you to believe - not at all outdated), only to stop using our brains and sacrificing our knowledge and skills to the forgetting curve. Just so we could have an easier time doing some simple tasks.

Sure, it might be quite a bit faster. But what are you going to do when the LLM reaches its limit (which, even as a web developer, I have reached very often - I thought web development was supposed to be one of the easiest form of development?) and you are left having to solve the issue on your own? Ask a different LLM? And if that fails? Who are you going to turn to? Let me tell you who you will turn to. You will turn to the guy that does not outsource his intelligence to third party, profit-oriented companies.

What About Using LLMs as Search Engines?

Sure, you can do that. That partially solves the first and third issues mentioned above, but it does not address the second.

I say partially, because AI simply gives you one answer. You lose the “research” aspect. And that is important for learning. If your only goal is getting the job done, then sure. Use it as a search engine.

I do it at work sometimes. Not always, it depends on the problem at hand. Sometimes I still like to read blogs and forum posts. For important problems, research beats AI every single time, since you can compare solutions and pick the best based on your constraints and necessities.

Conclusion

Stop using large language models to code. Think on your own.