I’d like to confess something. I’ve talked about the joys of reading on this blog before. I’ve given book recommendations; I’ve discussed how various books have really helped me; basically, I’m very pro-reading about CS.
And yet? I totally suck at it. I can count the number of CS books I’ve actually read, cover to cover in one hand. I constantly pick up a book, read it for a few pages and toss it away. I’ve bought a ridiculous amount of books and read way way fewer of them.
That said, the haphazard snippets of reading that I’ve managed to eek out in between my agitated switching between different tasks (watching me work is like watching someone try to eat three different meals at the same time) have still benefited me significantly. I’ve taken extremely valuable lessons from books I don’t think I’ll ever finish. I’ve learned immense amounts from blog posts where I skim the last half. One of my most successful, impressive projects still barely works.
This is all fine. Sure, I’d love to have finished the Art of Surveillance Capitalism, especially after having brought it up in literally every conversation. Sure, I should really get back to the Cornell compilers class of which I’ve watched two lectures. Sure, I should really refactor my compiler to have an actual intermediate representation.
But it’s okay if I don’t do these things. It’s okay if I learn in an imperfect, incomplete manner.
In school it’s different. School is based on checkpoints and gateways. By passing Analysis, you’ve signified that you know Analysis and that you are trusted with going on to the next math class.
This has some justification in school. Schools fundamentally mint credentials and credentials—at least in theory—require a consistent minimum amount of knowledge.
Of course it’s very unlikely that students actually get consistency. Professors teach differently; courses get shuffled; pandemics happen. But that’s the theory.
However you don’t have to follow that model. You don’t have to complete Analysis. You don’t have to finish the book. Hell, go ahead, skip the rest of this blog post. You’ve still learned something.
Wandering vs Commuting
Let’s add a metaphor. School is like commuting. You’re setting out on an established path to an established destination. If you get detoured or if you can’t complete a leg of your journey, that’s a big problem.
But that’s not the only way to travel. Have you ever gotten on a subway, just to see where it goes? Or walked around a city, taking turns at random? It’s quite nice. You don’t have to complete any journey or reach any destination. There’s no stressing over subway delays. You can just discover.
Imagine how stupid it’d be if you tried to use Google Maps directions to wander. What’s the point?
Depth First
The joy of wandering is in the discoveries you make. You can find a neat cheese shop or a very cool little park. When you’re in need of very good cheese or a quiet place to read, you can refer back to these locations.
In the same way, learning imperfectly loads your brain with various possible references. You could be trying to write a sudoku solver and remember that time you briefly skimmed The Art of Computer Programming (TAOCP) Volume 4, Fascicle 5: Mathematical Preliminaries Redux; Backtracking; Dancing Links1 and read something about Sudoku being an exact cover problem. Or you could be facing an offer deadline of a week and recall that blog post by Joel Spolsky that you glossed over.
Put in lingua patria, learning imperfectly is a depth first search. You can gain a lay of the land, then come back to the relevant area when you need to actually learn it in depth.
Everything Is Imperfect
I’ll let you in on a secret though. After a certain point, all learning is imperfect. Even if you do read the whole book or complete the class or get the degree, you’re not gonna remember everything. And besides, the course/book/degree only provides a small, shallow, incomplete view into the field. You’re never going to learn enough in the field. There’s this wonderful visualization of a PhD that explains how getting a PhD requires pushing at the boundary of human knowledge and making the tinest little puncture.
The side effect of that tiny puncture is that it’s really impossible to form a complete picture. Learning is about managing to form some sort of comprehension out of an imperfect set of data.
Go read a couple pages of CLRS and get bored. Go try to read Knuth and fail (I currently have a copy of TAOCP: Volume 3 on my desk of which I’ve read maybe 3 pages). Skim a few blog posts. It’ll only help you.
-
A hilarious title, but also surprisingly readable. ↩