Do We Still Need to Learn Programming? Probably Yes — Generative Networks
tl;dr
Natural language, pseudocode, and code are not competing tools. They are different languages for different levels of precision.
In the age of AI-assisted programming, learning to program is not only about writing every line of code by hand. It is about knowing when an idea needs to become more precise, how to control that translation, and how to distinguish between decisions made by a human and decisions filled in by an AI system.
A quote from Richard Feynman
To understand why programming does not simply disappear with AI, it helps to start with a more general distinction: the difference between clarity and precision.
Richard Feynman once explained this idea while talking about mathematics:
The real problem in speech is not precise language. The problem is clear language. The desire is to have the idea clearly communicated to the other person. It is only necessary to be precise when there is some doubt as to the meaning of a phrase, and then the precision should be put in the place where the doubt exists.
It is really quite impossible to say anything with absolute precision, unless that thing is so abstracted from the real world as to not represent any real thing. Pure mathematics is just such an abstraction from the real world, and pure mathematics does have a special precise language for dealing with its own special and technical subjects.
But this precise language is not precise in any sense if you deal with real objects of the world, and it is only pedantic and quite confusing to use it unless there are some special subtleties which have to be carefully distinguished.
The interesting part is that Feynman is not criticizing mathematics. He is criticizing the idea that more formalism always means more understanding.
His point is simple:
clarity matters more than precision;
precision should be introduced only where there is a real ambiguity;
pure mathematics can be perfectly precise because it deals with abstractions defined by mathematics itself;
when we speak about the real world, there are always approximations, assumptions, and imperfect definitions.
Although Feynman was talking about mathematics, the distinction is useful for thinking about programming too. Not because programming is the same as pure mathematics, but because programming also introduces formal precision where natural language is too ambiguous.
The central idea of this article is this:
Learning to program still matters because the hard problem is not only producing code. The hard problem is controlling the translation between an ambiguous human intention and a formal system that executes instructions without common sense.
The language of people and the language of computers
Programming is a way of communicating a procedure. It is a way of telling a machine what we want it to do.
A CPU, or Central Processing Unit, does not understand English, Spanish, Python, or C++ in the way a person does. At the lowest level, it executes very simple instructions: reading numbers, comparing them, adding them, copying data from one place in memory to another, and jumping from one instruction to another.
Programming languages are a much more human-friendly layer for describing procedures that will later be interpreted or compiled into instructions the machine can execute.
In natural language, a sentence like:
Sort this deck of cards.
leaves many things open to interpretation.
It assumes that the person receiving the instruction knows what a card is, what sorting means, which ordering criterion to use, which cards are higher than others, whether suits matter, and how much time or effort is acceptable.
In programming, those decisions must be defined somewhere in the system.
We do not always write every detail by hand, because we use programming languages, libraries, frameworks, and abstractions that already encapsulate many decisions. But someone, at some level, had to define those decisions precisely.
Natural language and programming languages are not better or worse versions of the same thing. They are different tools. Asking whether AI means we no longer need to learn programming is a bit like asking whether, because we know how to use a magnifying glass, we no longer need to understand what a microscope is for.
How software is created in a software company
In a software company, almost everything starts with natural language.
A client explains what they want:
I need an app to manage orders.
Or:
I need a website to sell products.
Or:
I need a system to manage appointments.
That first description is rarely precise. Not because the client is expressing themselves poorly, but because they are trying to compress a large amount of domain knowledge into a few sentences.
That knowledge may include habits, exceptions, business rules, preferences, edge cases, previous problems, and implicit decisions.
That is why intermediate layers exist.
A...