Is most of the time spent learning or working as a programmer devoted to reading code, documentation, books, and requirements rather than writing code? I've heard that beginners should type examples themselves instead of copying them so the concepts become familiar, while working programmers can use AI and other tools to move faster. I understand the argument against relying on AI while learning, but I'm less convinced that manually typing every example is necessary. Reading seems faster and may let me absorb more information. How important is hands-on typing compared with reading, experimenting, debugging, and thinking through problems?
4 Answers
Typing code is useful because it turns passive understanding into active practice. You notice mistakes, test assumptions, debug failures, and build familiarity with the language. Simply reading code can make it feel obvious while you’re looking at it, but that understanding often disappears when you have to create something yourself. AI can help explain errors or suggest alternatives, but accepting generated code without understanding or modifying it won’t teach you much.
Reading is excellent for learning concepts, architecture, algorithms, and seeing how experienced developers structure software. But practical ability comes from combining that with implementation. Try building small programs, changing working examples, and debugging them. You don’t need to hand-type every line forever, but during the learning stage you should do enough yourself to prove that you can produce and understand the result rather than only describe it to an AI.
On a real job, you’ll do plenty of reading: existing code, requirements, documentation, tests, design notes, and code reviews. You’ll also spend time in meetings and thinking through a change before writing it. However, the amount varies by project, and maintaining or debugging an unfamiliar system can involve a great deal of actual coding too. It isn’t simply ‘mostly reading and a little typing.’
Programming is mostly thinking, with reading and typing supporting that process. Typing examples can help you get comfortable with syntax and reinforce what you’re learning, but memorizing every loop or language detail isn’t the main goal. The important skill is figuring out what the program should do, breaking the problem down, and recognizing when the code is wrong.

A good compromise is to read an example first, then close it and recreate the idea from memory. After that, experiment by changing it and debugging whatever breaks.