You need to understand abstraction layers in the code and how to mentally navigate between them. Every change I make to code goes through a battery of concerns at different levels and perspectives: does this cause any security concerns? Are there unintended downstream effects? What is using this code I changed? How does it affect users? Are there performance concerns? Are there edge cases I am not considering? Can this be done in a cleaner way? Did I make something hard (encode logic/values) that should be soft (config setting, database value)? Are errors being caught? How are errors tracked and observed?
It is most necessary to know the right questions - an LLM can help solve them. Be excessive and wasteful with questions until you internalize when they are helpful. You will be surprised at the things you didn't consider even with small changes to an existing codebase.
You need to be able to read code and reason about it. If I was learning to code now I would spend most of my effort on reading code and conversing with an LLM to explain logic I don't understand, generate Mermaid graphs of code architecture, etc. You can rapidly level up by using LLM to help fill gaps in understanding.
Before all that, you need to know the basics: loops, data structures, variables. You need to understand tech stacks, how and why different layers are distinct (frontend, backend, database, logging, infra etc), how the communicate and how data passes through them.
In other words, architectural understanding and reducing "unknown unknowns" is the priority. If you know you don't know something, it is increasingly easy to address it directly, even if it takes a few more iterations.
Due to technological advances, solving equations stopped being a marketable skill, but understanding mathematics is as important as ever.
Software engineering will follow a similar route as math- the marketable skill will no longer be to write code, but writing code will be necessary to understand the big picture and build the marketable skills.
I’d learn as much as you can without the help or use of AI, to build a solid foundation. If AI falls on its face, you’ll be ahead of all those who didn’t do that. If AI ends up being great, you’ll be able to better utilize it if you speak the same language.
As far as I see it, there is only upside to learning. Even if you’re not going into the industry, learning to code helps the thinking process in a way I think almost anyone can benefit from.
Remember, you want to be able to understand why your system isn't working as intended if the AI screws up. You want to be able to make changes yourself without relying on Claude or Codex to do everything.
And you especially want this given that these services are operating at a loss right now, and prices are steadily increasing. How long til some companies restrict usage to keep costs down? How many companies can afford to pay whatever these services ask for?
Ideally local models and systems would make things cheaper here, but the gulf between what's available there and through the larger providers is still pretty big, and the requirements for a good AI system are higher than many people can afford on their own.
The same goes for learning your second programming language, and the third, and the fourth...
I don't know what CS101 you took but that covers multiple years of university for me.
Also, you didn't ask but: be careful about going into tech. 5-10 years in the future is probably far enough that we will be able to see how the AI craze impacts jobs, but right now it's a very uncertain career which is at risk of going away because the business people think they can just have AI do everything. They can't, and they will learn that the hard way, but that will be cold comfort if you're out of work in the meantime. So be careful about choosing this field, it's hard to know what the career potential is like right now.