Thoughts on Learning with AI
Artificial intelligence serves many roles. One clear category is memory and recall. In a world where we can rapidly search for and recall information, the pressure to do all of that recall ourselves is lower. The mental energy we expend to perform day-to-day tasks is drastically lower when we have rapid knowledge retrieval.
But modern generative AI is capable of more than that. It is also capable of generative reasoning. That is genuinely novel. It is a big difference between Google and modern generative AI, at least in the frontier models.
So how should we think about the university experience when we have access to these systems?
What a university course is for
One of the things we are trying to optimize in a university is the opportunity to confront tricky problems and build our understanding. That was always the foundation of the university model, and I think the fundamentals are good.
Ideally, the purpose of a university class is not to teach any particular set of topics, although it should use topics relevant to the day. The main emphasis should be on giving you a set of challenging problems, all on a related front, so that you can build an understanding of the key principles of a domain.
A course is a coherent set of those problems: opportunities to face failure and misunderstanding, and then push yourself to build your own understanding. As students, our goal is to grow past regurgitating information and carrying out rote processes. We often learn through repetitive work, but the goal is to build a foundational understanding of the principles of a topic.
I do not think any of that changes with modern generative AI. The fundamental value proposition of taking a university course does not change.
I also do not foresee a world in which there is much value in having the vast bulk of humans abstracted out of understanding. There is a lot of potential in going through the process of experiencing your own understanding and developing a genuine perspective that is informed and built by you in a coherent way.
The fear that AI will replace our reasoning
Part of the zeitgeist around AI is a concern that it will truly replace our reasoning: that AI will become so much better at organizing our thoughts than we are that we give in to the temptation to have no thoughts or agency ourselves.
There is a prescient concern that people are pushing generative AI in a direction that alienates us from our own thoughts by endorsing AI tools as part of our thinking. I see this as a continuation of the debate over social media, short-form video, and other kinds of human-produced slop turned into an algorithmic system for marketing.
But if you believe that your goal as a human is to develop understanding through repeated experiences of growth, then I think you should fully embrace modern generative AI tools, just as you would in the workforce. Crucially, though, you might intentionally withhold the tool—or dumb it down—to help yourself confront problems and learn.
There are many ways to use an LLM. The question is not whether you should surrender to the idea that it can always think for you. There is a unique human experience in having to think through a coherent set of topics.
What happens to software work
AI coding tools are simply reality. We should expect considerably fewer jobs whose value is the raw task of programming.
There will be fewer opportunities in coding applications where the correctness or specific design of the code has little relevance. Those jobs were already on their way out because of website builders and similar tools. A lot of app development and related work will quickly become unprofitable.
At the same time, there is a huge amount of pent-up demand for software. We can take some solace in Jevons’s paradox: as software becomes cheaper to produce, we may find many more uses for it.
Large organizations will still need software engineers because they run complex software that is essentially a large business machine. The software is inexorably tied to the rest of the business, and the business fundamentally interfaces with humans. There need to be humans who understand those processes and can communicate and negotiate them. The demand for software will continue to require that work.
You still need a baseline of understanding
How should you organize your classes and learn when you will have frontier-grade AI at work?
First, recognize that even with frontier-grade AI, there is value in a baseline of understanding. You need some working memory of basic topics and some skill set that you can actually use.
If you are using AI, you need to articulate what you want. Your taste is the ultimate moat.
You will not get what you want from the AI unless you can articulate your tastes. Being able to articulate your understanding is therefore extremely important.
One of the major skills undergraduates should learn in software engineering is debugging. Debugging is not about learning how to solve any specific bug. It is the process of building hypotheses. That is a skill you need to practice.
The same is true elsewhere. If you want to understand continuous mathematics, you need a basic understanding of calculus. If you want to do machine learning, you need a basic understanding of linear algebra. Without foundations, it is very difficult to take the results of an AI and collaborate with it.
The mental-model problem
There are two extremes. You can write something yourself and understand it because you built it from scratch. Or you can have the AI write all of it.
When the AI writes it first, it is not necessarily written in your mental model. If you start making changes, those changes are often pervasive. The tone, concepts, dimensions, or core structure of the narrative may be fundamentally different from what you intended.
This produces a frustrating tension. We can continuously prompt the AI, but it is difficult to iteratively evolve knowledge with it when the artifact did not grow from our own mental model.
You always want to feel that you, as the human, are the builder. Maybe much of the implementation—even the whole implementation—was generated by AI. But you want to see the thing as something you wrote and own.
Does that mean you have to read all the code? Probably not. But you should not be producing so much project-specific code that you cannot read it.
AI as a library on demand
When we program, we routinely use libraries. When writing Python, we do not build hundreds of thousands of lines from scratch. We tie together libraries such as TensorFlow, PyTorch, or NumPy. Our code can be shockingly small, illustrate the core concept, and abstract over the library’s interface.
The amount of relevant code that counts as your contribution should be something you intellectually own. It is fine to delegate an arbitrary amount to well-known libraries.
Generative AI complicates this because it can build any library on demand, with any interface you want. Every part of a problem can be broken down and generated by AI—including the whole thing. The question becomes: how do you identify the intellectual core, the thing you are building, and isolate everything else?
The skill we need is the ability to perform abstraction and think in terms of abstractions. Software engineers already needed this skill. A high-level language uses hundreds of thousands of lines of abstraction through the compiler and operating system. People working on million-line codebases have always faced the same issue.
You could never read all the code for Microsoft Windows. Instead, you deal with it through abstractions. You read the core parts of the operating system. You read documentation and books. On demand, you build your understanding by reading discussions, examining the code yourself, looking things up on Stack Overflow, or now asking generative AI.
AI will always be able to act as an abstraction and hide arbitrary amounts of detail. Your job is to identify, focus on, and investigate the problem; develop durable interfaces; build systematic behavior; and build a system.