for ai research, safety, aerospace, military, trading, gamedev .. those will probably still need coding for a bit longer.
If any of these examples are familiar, you might chuckle that of course everyone on the team has these skills. But there's a big difference between someone who can barely parse the symbols, and someone who can actually interpret them and extract meaning.
Five to ten years from now, I have no idea whether software engineers still be coding. But I'm sure there will still be code. Do you want to be the person on your team who is fluent in it, or one of the rest who rely on that person?
Personally, I think learning specific implementation of algorithms probably should take less of a priority compared to fundamental architectural understanding why these things are done in the first place: data structure, automata theory, interpreter/compiler methodologies, etc. You still have to learn how to code, even if you won't be doing a lot of coding directly yourself, because the fastest way to learn how to evaluate code is by writing code yourself.
The skill to learn is to be able to see and address the problems that will need solving in the medium term.
Even before AI, software changes a lot (desktop, enterprise, consumer web, IoT, devices, robotics...). So for the "seeing" part, it's like planning to cross the continent not knowing what transport or maps will be available: you can mainly guess they'll come out of the terrain and available materials and expertise.
For the "address" part, it's helpful to have seen similar problems, but probably more helpful to have seen a variety of problems and developed some high-level approaches, typically in academic study. Depending on your domain, that might involve math, or engineering, or biology, or.... All coding is encoding, which is fitting some domain to data structures and algorithms.
For the "delivery" part, it's especially important that your code restrict itself to what's needed by the actual end use. That might not be cool or interesting, and it often requires getting more direct appreciation of the end-use than the often-weak problem statement. It's a trap to just enjoy the beauty of it.
Someone like Noam Shazeer demonstrates the value of good coding: lots of people in his environment had lots of good ideas, but he made it happen (and it looks like he enjoyed it).
The answer is: to be a mathematician or an engineer, you still need to learn how to do the math yourself. A calculator makes the math easier and faster than doing integrals longhand, but owning a calculator does not mean you know how to apply an integral to a real problem.
You still must learn to write code yourself. You need to know the fundamentals of computer science, programming, algorithms. The AI is good, but it still requires human engineering effort to get good results in exactly the same way that a scientific calculator requires mathematic skill to be input in order to produce useful results.
Facing a tricky software engineering problem armed with AI and no fundamental knowledge puts you in exactly the same situation as facing a tricky vector problem armed with a calculator and no fundamental knowledge. You can punch keys and get numbers out. Maybe you'll even land on the right answer, but it will take you ten times longer, produce worse results, and you won't even know if your answer is right. You won't learn anything either.
Working a tricky problem is how you learn which solutions apply and how to best use your skills. AI is the same way. If you don't have the fundamental skills, you won't learn, you won't get good results, and you'll waste a ton of time producing garbage for no benefit.
AI is a skill multiplier, just like a calculator. It really, truly is a garbage in, garbage out situation. If you don't put in skill and effort, you don't get good results. If you lack the fundamental skill and engineering mindset you will never get good results, you'll never learn how to get better, and you likely won't even have the capacity to judge your work as the garbage it is.
The only exception is the case that AI truly reaches super-human levels of ability in the near future. That case isn't worth worrying about because the problems it will cause go far, far beyond "should I learn to code".
So yes, you should learn the fundamentals. AI makes good programmers better, and conversely makes bad programmers worse.
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.
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.
The same applies here and in any other tech field, nobody ever regrets that they learned "too much".
Pick your poison and learn everything you can!
AI amplifies what you are.
If you take shortcuts in your education, you will remain mediocre.
If you dive deep in your understanding, building a broad and deep foundation, then you will be exponentially more powerful.
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.
A less obvious problem with not learning to code is that you’ll be less competitive because you don’t really have any specialized skills. Everyone can fire up Claude Code and knock out something. But if Claude Code gets stuck, or simply can’t solve your problem, then what will you do?
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.
An analog for you: I started in software pre-cloud, with a primary focus on web technologies, but at various times learned c/c++/asm/compilers/operating systems/algorithms. I audited many classes, but one instructive one was a course called nand2tetris (going from nand gates to hardware simulated CPU to peripherals to operating system to programming languages and compilers to application layer). Understanding the global through lines in computer science give you immense power.
Does my work as a CTO mean I use this information all the time? Absolutely not. Did I benefit from figuring out how computers work generally throughout literally my entire career? Absolutely yes.
I am actually relatively AI-pilled compared to the average Hacker News reader, but I am against outsourcing fundamental understanding to AI in all forms. Does that mean I write code by hand often anymore? Very infrequently.
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.
The better question is: how much independent judgment do you need before delegating implementation?
You should learn enough to:
- turn vague requirements into interfaces, invariants, and tests - read a diff and explain what it actually does - debug without asking the same system that wrote the bug - recognize when the architecture is wrong rather than continuing to patch symptoms - reason about state, concurrency, failure, security, and cost
That probably means learning one language deeply, plus basic data structures, databases, networking, operating systems, version control, and debugging. Not because you will hand-type every line forever, but because those are the mental models required to supervise an agent.
The curriculum should change, not shrink. Less time memorizing syntax; more time decomposing problems, reading unfamiliar code, testing behavior, instrumenting systems, and understanding failures.
I would use AI early, but periodically remove it. If you cannot build and debug a modest program without the agent, you do not yet know whether it is accelerating you or substituting for understanding.
A practical rule: on’t merge code you can’t explain, and don’t deploy a system whose important failure modes you can’t enumerate.