I don’t think you need LLMs to learn programming.
I recognize that people need different strategies and tools to learn new skills and information. I am responsible for the education of people in my life that have learning disabilities and are neurodivergent. I am not a trained teacher but I have taught numerous people about programming, system design, and so forth. I am well aware that different people learn with different strategies.
You still don’t need LLMs to learn programming.
Nothing is Sacred
I have never met a group of people so passionate about sharing what they know with anyone than programmers. This is not an industry that jealously guards its knowledge and keeps secrets. We give away source code, books, blog posts, presentations, video tutorials, etc for free. We get excited about teaching people.
And I got to where I am thanks to people like me who wrote down and shared their knowledge openly and freely. I’ve benefited from open source. From books people have published online for free and courses they’ve given away. I’ve learned a great deal from people I chat with online, over forums, and at meetups where people give presentations to share their knowledge and work.
There is nothing sacred in programming. If you want to learn how operating systems work there are free books, full source code, forums, chat rooms, email lists, meetups, blog posts, video seminars, tutorials and everything you possibly need available to you. Interested in compilers? Databases? Distributed systems? Put your hand up and there will be someone eager to help you and teach you everything they know.
There Is No Royal Road
The Linux kernel is millions of lines of C code, how am I supposed to understand that?
You could ask an LLM to summarize it for you. Strike up a conversation. Ask probing questions and dig in. After all, the source code, documentation, and every post on the Linux Kernel Maintainers List, chat transcript and blog post ever written is all in the training set of the LLM.
I’ve never read every single line of source code to the Linux kernel. I doubt anyone has. How did anyone join the project before the existence of LLMs? How did they become contributors?
There is no way to cheat and get to the answer faster than anyone else who had to learn operating systems before LLMs existed. You have to do the work. You have to be curious, do some reading, download the code, form a hypothesis, design an experiment, try it out, learn something, and revisit your hypothesis. Do that enough times and you will build up knowledge faster than you anticipated.
I don’t think that you retain knowledge if you don’t work for it. If you want to learn how to calculate integrals you can read about integrals and work on the exercises yourself until you can encounter a novel integral problem on your own without referencing any source material. But if you ask an LLM to tell you how to calculate integrals you won’t retain that knowledge the next time you encounter an integral problem and it will be unlikely that you can solve novel problems on your own or apply that knowledge to novel problems in new domains.
Reading Crime and Punishment and reading the Cliffs Notes summary of the same novel are not the same thing. When you read the novel you will be experiencing the story and building associations between concepts, memories, and other things happening in your environment, life, etc. When you later recall elements from the story it will be integrated into your experience. Memory is almost like a “re-living,” an embodiment of a past state. The story becomes a part of your lived experience.
There’s no shortcut. You’re not downloading kung-fu into your brain when you’re using an LLM to learn programming. You’re disengaged and passively doom-scrolling content until you get the end result you’re looking for.
You have to do the work.
A World Without People
A desirable feature of LLMs that people using them to learn programming have is that they always have time for your question, you’re not bothering anyone by asking, and you can carry on the conversation at your convenience.
First, talking to people is great. Yes the real-world is messy. People are busy, have emotions, and may not have time for you when you want it. But most programmers are absolutely delighted when someone expresses interest in their area of interest. I know I am.
What if you’re shy about being judged for what you don’t know? An LLM will never judge you! There’s no risk of embarrassment or shame for asking questions to an LLM.
There’s value in sharing knowledge with other people, posing questions to them, and learning to answer questions. We don’t get better at any of these things if we don’t practice. Using LLMs to avoid talking with people and learning from them is depriving you and the people you’re interrogating from developing essential skills and solidifying their understanding.
Because it turns out that you don’t really know something well until you can explain it to someone. And the first time you try to explain something you learned to someone will not be the best way to explain it. You need to try many times. So you actually want people to ask you about it and you want to help people learn so that you can learn as well!
Be Curious, Be Fearless, and Hack the Planet
Everything I have learned about programming came from being curious and trying things out.
There is so much out there and everyone is eager to share it.
Want to learn about formalizing programming language semantics using automated theorem proving? Try Programming Language Foundations in Agda.
Want to learn how to design computer chips that can play Tetris? Then develop a compiler for that chip to make other games? Try NAND 2 Tetris.
Want to learn how Postgres works? Download the free source code,
figure out how to compile it, find the main entry point and start
hacking.
Try refurbishing a Commodore 64 from scratch.
Write a hash table from scratch in C.
Just keep going, keep learning, and share what you learn.
It’s not secret, magic knowledge that is hidden away that only an LLM can unlock for you. It has always been there and you can learn it. You can learn how C is compiled into machine code for different platforms and how that code is executed by an operating system. The tools, the references, the people, the tutorials, everything is open and available to you to start picking it up today.
When you dig down into programming and realize how ABIs are structured, how operating systems were designed and have evolved, how databases work… every thing you learn makes everything else easier to learn. It snowballs over time.
Try not to sell yourself short by trying to take the short cuts. Enjoy the journey. Have fun and meet cool people along the way.