Posted by JohnDSDev 2 days ago
Ask HN: How much coding should beginners learn in the AI era?
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?
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.
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.
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.
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).
It may not often use them often as it uses software, or it may not remember all integrals rule tables, but it understands the concept, it's usefulness, and in case he needs it, he can figure out a way to work it out.
This is the same for Software Engineering and code. You don't need to have written the HTTP protocol library in order to use it.
I haven't written a single line of code since more than an year, but I've made the AI write multiple thousands of lines of code since then.
It's just a calculator. You still need to know how to use the calculator and for what purpose do you use it.
What changed is that you no longer will need to learn all ins and outs of coding.
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.
I've used agentic tools with no restrictions in my upper-level classes and also in a new programming course for non-CS students. I've seen several examples of students using an agent to crank out version .01 of a program, but then have no idea what to do next, because they don't understand what changes are even possible or how to guide the model to add new features.
AI coding deemphasizes knowing specific language features or frameworks, but requires having a careful, structured development process. Memorizing the syntax of library functions is less important, but you need to know the language of software design and how the features of your program are implemented, even if you're no longer writing individual lines of code.
Breaking a design into independent units is important for revision and testing. You want to keep AI generations small and focused, which requires knowing where and how features are implemented.
We're also moving past the tokenmaxxing trend and swinging back to cost-conscious AI use. Classical CS knowledge will help you choose algorithms and systems that can minimize token consumption.
My advice would be to take a standard CS 101 course that teaches the fundamentals of structured programming in Python or another standard language. Focus on understanding how to write loops and functions and use basic data structures. Use AI tactically to help with debugging and understanding code, but do most of your writing by hand - don't generate entire programs yet. Ideally, this will happen in a class with an expert who can observe and guide you. I have some resources from my class that may be useful:
https://github.com/dansmyers/IntroToCS
After that point, you can start introducing some AI coding and gradually build up the size and complexity of your programs. Learn about software design and object-oriented programming, security, and fundamental systems. We are moving most of this content earlier in the curriculum, so students see it in the first two years, rather than waiting until elective classes. The details of data structures and algorithms can probably come later, once you have more context for where they're useful.
Last point: I teach the specs-driven development process in all of my classes. It's the best way to approach more complex projects. Prioritize creating ambitious projects that do interesting things.