«Everyone» uses AI for coding, at least according to the people on stages and in social media who have a constant imposter syndrome as they are not in touch with actual work anymore. Whereby rumors of trends become facts.

Code generation is nothing new, nor is the euphoria that accompanies it from a loyal following deeply invested in seeing it succeed. They have seen the future, while skeptics are people who are fighting against the inevitable. I have been through two iterations of this in my career, I barely got to experience RUP (Rational Unified Process) generated applications and it’s advocates. 4th generation programming languages was another thing I only heard of from a professor at Molde College in 1996 who said that: «You learn to write code now, but you’ll most likely never do it on your work. 4th generation languages will replacing coding before your three year program is over». Learning C++ and Java was an exercise in learning something from the past, not something we would ever need as a programmer.

I didn’t get to see RUP in all its glory because it failed to meet the unrealistic expectations of its supporters. It was a process where you generated code from diagrams or definitions files in XML dialects. It worked for some things, except when something changed or something didn’t work as expected. Debugging was a pain as the mental model you had wasn’t reflected in the code. Back then, the code generated was not easy to understand, nor did it fulfill the intentions of the person making the models.

The age of AI generated code is here, and the value propositions are more or less the same. Efficiency, reduced need for skilled laborers such as programmers. This latest generation of tools is better than what came before, without a doubt. However, its proposed future value lays bare a lack of understanding of what a software systems is and what it means to build one. 

After some decades of software development, there are some truths which have emerged which applies to all contexts:

  • when we start, we don’t know what to build
  • it’s never done

These facts form the foundation of most modern software development practices. AI tooling helps with none of these things, not even if your use case is «I just need an App».

Context matters 

As with most things context matters, and it certainly is importantly when it comes to where and who are passionate advocates for things like AI as an assistant to writing code. 

If your objective is to do as little work as possible for the maximum amount of billable hours, then AI is perfect. It can help you scaffold up something, enabling you to have lazy days while the bill rises to the agreed price. It’s not a coincidence that the consultant industry is pushing AI, as it makes their jobs easier. Their clients, will be paying in more ways than one.

If you have no coding ability and need to show you idea, then AI is an enabling tool. It’s also cheaper and easier than hiring developers, as we know hiring developers is very difficult if you are not a technical person yourself. In this scenario, AI is a key enabler.

Learning #1: we don’t know what to build

The dogma would counter this argument with the obvious: «You would use AI to assist you in figuring this out». Again we see a flawed concept of what developing software is, as the most important thing is the very exercise of figuring this out. Thoroughly experiments, studies, analysis,etc we gradually build out a mental model of what to build. This is the actual deliverable of a software project: a mental model of how to automate something.

The implementation is an artifact from this process. Both the deliverable and the artifact are subject to change and is thereby never done.

If the knowledge lies in the prompts sent to different models, you will as time passes realize all you have left are empty artifacts without the knowledge that went into them. Similar to how archaeologists try to reconstruct history based on artifacts they find.

One could argue that you can get the best of both worlds, where you somehow save the knowledge going into the prompts. The issue here is that even with that, you have no idea what happened in the box to make the outcomes you have in front of you. You are left with hollow artifacts and you most likely are better off just starting again from scratch. A «Las Vegas Way of Working» with software, where you blow up buildings and rebuild something new in its place.

Learning #2: it’s never done

Expanding on what was discussed in Learning #1, this section is about the context, time and how we preserve knowledge. I claimed that you are left with artifacts after some time if you base you work on the automation of AI (where AI is the current most relevant example. Twenty years ago it was 4Gen development tools). 

Once you write the first statement of a program you have created something which, if it’s usable, will require your attention over time. This is where

some old folks come in and say «What about Fortran / Cobol / some other old programming language?», where the idea being that somehow these systems were written and wasn’t subject to changes, update or maintenance.

This argument is valid only if you see it in a short time span. I once worked in a Norwegian bank where they had found a program which was running on Wang and written in XXX. Nobody really knew what this program did, but it was used in a chain of calls essential to some critical operations for the bank. They’d tried to by pass it, only to see the operation fail. They were left with a dilemma. The program was brilliant and so was the infrastructure, however there was only one person left with knowledge of the operating system and the programming language. This person was approaching retirement, which meant they were in a pickle. They had to figure out what the program did and rewrite it before this individual ended their time in their bodily vessel.

In conclusion: all software requires up kepp, some more than others of course.

Accepting that all software development efforts never end, maintenance and evolving / changing is a critical aspect of the work. The believers of AI would say, even if our current AIs can’t, the future ones will be able to as it’s inevitable that they will just get better (exactly how, is a bit vague). I guess we will see.

The answer is 42

A computer program is to given you an answer or some output, when you get it what do you do? Depending on the quality of the input, processing models and output you might be faced with the question: Why 42? Perhaps a bit more realistic would be to ask why did it create 200 files of TypeScript for a static website? Why did it rewrite the entire app when I suggested making just one change?

A software developer knows that writing the code is not the job. The job is to weigh different trade offs against one another. In the case of code generation, those are all hidden from you. So what? you might ask, well knowing about certain trade offs made in a piece of code is essential in order to determine behavior or to estimate how a certain change might affect it. The clever cookies will say, this is ideal for AI to analyse. Which might be true, however to me this looks like a process of splashing paint on a canvas until it looks like the Mona Lisa. Is this sufficient? Does it create better outcomes? Is it cheaper? Will it make you more money?

When everything that went into producing something is a black box nobody can walk back to see why it happened, I believe we have a problem. Especially when these systems are tasked with things which effects the existence of living beings. On a philosophical level, we give up control of our destiny and leave it to the machines to decide what happens to us.

Given that they will never be able to do anything other than to repeat history, our future does not look bright.

The knowledge will dissapear

Aopting AI tools can make the job of producing code faster, however it will not enable you to find the right problem to solve easier. Nor will it enable you to find the exact right way to create an abstraction which will endure change for your particulare problem.

The pot at the end of the rainbow

Luckily, AI is a financial instrument created for money after the crypto collapse. The timing of the AI craze wasn’t luck, it was what was required in order for capital to be used. The excess money printed during the bank bailouts needed someplace to go,   AI became that place. Up until now it has worked really well, as there has been huge profits for investors in this space. The boom cycle is here and we are all awaiting the inevitable bust which always comes in our current economic system, as it is a fundamental mechanism for it to work.

The world system we live in, relies on booms and busts and the bust from this one woo one felt by humans throughout the world. The collapse will hurts regular folks, while the people owning the capitals will move on to the next. Leaving governments to clean up the debris and bodies left behind.

The heist of knowledge

As the dust settles what we will see is that there is knowledge about how to solve problems with code which are being lost. The proponents of AI says "that is like saying we all need to learn Assmebly". This is not what I mean, as tools and languages change all the time and going back to the majoritu of folks writing Assembly is nonsense. What is lost is by software engineers being reduced to QA analysts and folks looking at AI generated pull requests is the knowlege of how to build software.

We need to build resilience for when it does. We need to know the low levels of operating servers, writing languages and coding. The new generation are told, just like I was, that those things are in the past. We need to save the knowledge and pass it on, as in the wreckage of the AI bubble is where the next generation will have to make their living.

There will be governments and organizations who are living at the mercy of the people renting them the software and processing capacity they rely on for functioning. The data center boom is not for AI, it is for what comes after. A future where we all pay rent for all aspects of our lives.