AI is going to take all the Software Developers jobs. That’s what they say. There is some truth to that. Like many professions, Software Development has many facets, and many different activities to perform. Saying you are ‘in Software Development’ is about as meaningless as saying you are ‘in Business’. Different people in the profession focus on different activities. Today’s AI is very good at certain things, and very bad at others. Software developers who primarily focus on the activities that AI is good at will be replaced, mercilessly. The rest will not. Instead they will get even better, because they now have a better tool at their disposal. The true value that software developers provide are skills and activities that have been valuable to human civilization since its inception.
What is Programming
People often use the terms ‘Programming’ and ‘Coding’ and ‘Software Development’ interchangeably. And that’s fine for common parlance. But I’m going to draw some distinctions to separate out some specific activities.
‘Programming’ is often used in other contexts. The cross-fit world uses the term to describe the workout plan. The system you follow to exercise. Making a program is the activity of laying out what exercises you can perform, how many reps, how much weight, how long, at what intensity, on what days, and so on. It’s the plan for what needs to get done. In the mathematical optimization world, ‘programming’ refers to laying out the structure of an optimization problem. The objective function – what you are trying to optimize – and all the constraints. The rules, the plan.
Ever been told to “Get with the program?” A ‘program’ is a plan for how to carry out some activity. A system to follow to accomplish a goal or get from A to B. Creating a program is a design activity, an engineering activity, and a people activity. The purpose of creating a program is to accomplish something, or accomplish something more efficiently. You figure out how to make something feasible, and you layout the steps to follow to do it, so that other people can follow the program and achieve the same things. Programs are for people. Making a good program means understanding what people want to accomplish, and why, and all the context around that. It means analyzing that information to figure out how to do it efficiently. Trying it out to get feedback, and iteratively refining the process.
Let’s hop back to exercise land. You construct an exercise program. You write it down in English. Now any English speaker can follow the program. What about folks who don’t speak English? You want to share it with native Spanish speakers. So you get it translated. You take the program, defined in english, and translate it to another language, so that someone who understands that language can execute the program.
And now we come back to computer land. You’ve constructed a program, in English, that a computer would be able to carry out better than a human. You need to get it translated. To a language the computer can understand. You write code.
Coding – Where Today’s AI Shines
Coding is the activity of translating a program into computer code. Computers are physical machines, that perform the physical activities of toggling electrical circuits to get real physical outcomes. They need their instructions in the appropriate language in order to do that. Coding is not software development. It’s not software engineering. Coding is just one activity that a software developer performs. Translating a process that is defined in a natural language or in someone’s head into a language a computer can understand and execute.
Coding is the easy part of the process. Computers are great at translating things. If you want to know how to say, “Hello, my turtle has lost its bananas”, in Croatian, ask the computer, it will tell you. If you want to know how to say, “Draw a 10 by 10 hex tile grid”, in C#, ask the computer, it will tell you. If you want to know how to say, “Authenticate a user using JWT tokens with Microsoft’s authentication platform”, in TypeScript, ask the computer, it will tell you. If you want to know how to say, “Estimate tomorrow’s temperature in Miami using this dataset”, in Python, ask the computer, it will tell you.
Figuring out the right program is the hard part of the process. People often communicate poorly about the programs they need. When a software developer needs to make software for other people to use to make them more efficient, they are usually constructing a program for activities that they themselves do not perform. They rely on other people to effectively communicate the program to them – the processes they follow, the constraints they face, the unusual situations they have to deal with. Getting the right information requires asking good questions, getting enough time from the right people, and a back and forth process of showing the constructed software to the users to see if they correctly understand the program’s needs. This is hard, and it is time consuming. And it is largely a communication activity. A people activity.
Long Live the Automation Engineer
The real value that a software developer provides is defining and improving the processes that people follow so that they can be automated. The computer is the least important part of this. This has been a necessary and valuable activity since the dawn of human civilization. If you want to build more houses, faster and at scale, you need to define a repeatable, optimized process that other people can follow. If you want to grow more crops, with better yields at scale, you need to define a repeatable, optimized process that other people can follow. This is what good software development is all about – Automation Engineering – making outcomes repeatable, so they can be performed consistently on a large scale. Making outcomes more efficient, so we can do more with less.
So much of software is garbage. It doesn’t solve the problems that users actually need solved. It doesn’t make their workflows more efficient. This isn’t something that gets fixed by coding faster. The problem isn’t the code, or the time it takes to code. The problem is communication, understanding, and ownership. A good software developer solves real problems for real people. They make it their responsibility to understand what business problems people actually face, what practices people actually need to carry out, and they make those processes repeatable, and they make those processes better. AI that writes code isn’t going out and talking to people and understanding their problems and offering them solutions. It doesn’t evaluate whether it actually made anyone’s life better with the solutions it offered. It just sits there, waiting for someone to ask it something. It isn’t driven to improve the human condition, because it doesn’t experience the human condition. It is a great tool that a good software developer can use to solve real problems faster, by reducing the time they need to spend translating programs into computer language. It makes good software developers better, and even more valuable. But for software developers who don’t actually communicate with users and solve their real problems, who translate programs made by someone else from natural language into computer language… it makes them obsolete.
I for one welcome our new AI overlords, and I hope they remember my complicity and loyalty when they take over.