A common line of thinking is: if you extrapolate LLM coding performance to the future, they will quickly exceed human capabilities. Therefore learning to code is not worthwhile.
Here is my rebuttal:
The history of technology has been about the continuous creation of abstraction layers and being able to create in higher levels of abstraction. There is no denying that the future of programming is coding in English and other languages. But this is just an abstraction layer.
Below that layer, the LLM is generating a high level coding language. Then that code is compiled into machine readable instructions. Then those are executed by the hardware.
As new abstraction layers are introduced, its important to be familiar with the layer you’re working in and a few layers below it. This is why the NAND to Tetris course is so highly recommended. You want to understand all the layers of technology from the underlying circuits to the apps. What separates great engineers from the rest is the ability to dig in to the layers underneath their normal operating environment. Something ultimately will go wrong, and you need to be able to be comfortable digging in deeper to understand it.
Well can the LLM just dig in? Not yet:
These limitations will be around for a long time. Learning to code remains the best way to expand your future opportunities.