The TL;DR’s TL;DR
- Read books.
- Not too fast.
- Use Anki.
TL;DR
- Pick something to learn from the learning queue.
- Is it useful, given my current ambitions? If no, delay.
- Is it easy, given what I already know? If no, delay.
- Is it cool, given what I currently find cool? If no, delay.
- Read a book on it.
- Take Anki card notes, chapter by chapter.
- While actively reading: Review 10 new Anki cards, per book chapter, per day.
- Once the book is finished, drop down to 1 new Anki card per book chapter per day.
- Regardless of whether I’m still actively reading or not: Always finish the ’learning/learned’ Anki queues for that day. If you aren’t hitting that goal, ignore your new cards until you reach it.
- Build a project using it.
- The project must be useful, given my current ambitions.
- The project must be easy, given what I already know.
- The project must be cool, given what I currently find cool.
- Rinse and repeat.
Your learning queue and you
Everything is a world unto itself. -CGP Grey’s lawyer dad, apparently, as relayed by one of his podcasts
If you’re anything like me, you exist in a superposition of {amazed|terrified|grateful|furious} that there is an infinite number of things you could, potentially, learn about. The good news is you can pick pretty much anything you want and, with enough drive, shape it into an economically life-sustaining body of knowledge localized within your central nervous system. The bad news is, since everything is interesting, it’s really hard to know what to pick.
One option is to just pick the first thing that’s interesting and run after it. I think this is a pretty good approach! I wasn’t smart or bold enough as a kid to dive fully into it, so I landed upon a priority queue approach.
How this post came to be
I work as a sysadmin. A few weeks ago I was assigned a project to migrate the URL rewrite rules we have on one load balancer to another load balancer. I also took on a new bit of infrastructure that was having some thorny, infrastructure-related firewall problems. Eventually I hit a wall where I realized I just didn’t grok networking well enough to do this shit.
I have never been one to subscribe to the idea that a professional worth their salt leaves it all at the office. So I knew I had to embark on a self-study regimen. But I have this one weird quirk when it comes to self-study regimens, namely that after studying everything you could possibly imagine over the last 14 years since first getting a home computer with access to Wikipedia, I am painfully aware of the limits of my own memory when it comes to this stuff. Much like software itself, the bulk of the cost of increasing one’s knowledge is in the maintenance costs, not the initial acquisition.
And yet we all have to find ways to pay that cost. Some of us do it by working intensely hard on the same increasingly hyperspecialized niche every single day. To the extent I can, I try to do this as well. I look forward to the day when I can honestly say I am the world’s foremost expert in an extremely obscure issue that happened to make me a millionaire. I’m not there yet, so I read one book and use flashcards religiously.
I spend as little time as I can get away with on actually selecting the book in question. If it has decent reviews or was recommended by someone I respect, I just roll with it. People spend too much time on decisions with equally-satisfying outcomes, and I think this is as true of books written by competent writers in the modern age as anything.
I do lightly try not to choose big books, or textbooks, or books that give me the sense of being “classic tomes” of the field – so, while I respect the hustle of trying to source the best textbooks in every field, I just know that my own time and actual level of interest just isn’t going to be high enough to work through a thousand pages on abstract algebra again. I far prefer books that have a practical, getting-shit-done vibe to them, when they exist. So in this case, I went with Julia Evans’s bookshelf recommendation, Michael W. Lucas’s Networking for System Administrators.
When I read a book, generally speaking my computer looks like this:
![[Pasted image 20230513092806.png]]
A PDF of the book on the left, and a “create new flashcard” window for Anki on the right. Generally I’ll read through the book, notice details, and create bespoke cards in my own words to summarize what I just read.
Importantly, about 80% of the cards I make are simple front-and-back cards, not cloze deletions. The problem with cloze deletions is that it’s far too easy to cloze delete {every} {other} {word} in a {sentence} with {any} {semantic value} {at all}, and then you end up with way too many cards to want to do them. Seriously, while I think it’s cool and fascinating in the moment that the author called netcat
a cthonic weapon of the proletariat for disruptive interrelational packet transmission or whatever, I don’t actually need to commit all of those nuances into my own memory. I’ll build my own, more interesting, nuances over time. And then maybe later I’ll write about the very topic, and put my own spin on it… That’s why it’s called the Great Conversation. Anyway, rule of thumb: If you’re going to do cloze deletion cards, don’t do more than, say, 1 cloze per sentence, unless it’s a particularly specialized thing like a mathematical definition or a theorem or something. (Image occlusions, however, are fantastic and the strat of creating and occluding a simplified sequence diagram of a difficult process is one I use quite often.)
I’m ironically something of a ‘context maximalist’ when it comes to Anki, so long as the actual answer I’m expected to give is short. I really like screenshots, animated screenshots, AI generated flavor text in a separate Background field I can skip over any time I’m feeling even the slightest bit lazy. I really, really like concrete scenarios and yes-or-no questions: Three or four cards of the flavor “Is 10.1.2.3 a valid public IP address?” “No, it’s in the 10.0.0.0/8 block”, and three or four gotcha cards with the opposite answer like “Yes, notice it was 100.0.0.0 not 10!” illustrates the concept that 10.0.0.0/8 is off-limits far better than having the bare fact by itself on the card. Yes-or-no questions are also literally as small as you get in an information-theoretic sense: It’s either a 0 or a 1, or maybe a 0/1/? if you’re using some kind of Kleene three-valued logic. They are fantastic for building intuitions around tough topics.
This still adds up, frequently, to a lot of reviews. How do I handle it all? The sad answer is, nothing but time, buddy. But I try to make it cross-functionally valuable: Every morning I wake up around 5 AM, bring my phone or iPad with me to the gym, and park my butt on a bike machine, where I’ll sit and diligently do my Anki card reviews for the day over a span of about 45-60 minutes. Maybe 90 if I’ve really been grinding hard recently. I average about, uh, 3 to 400 reviews a day - remember, though, that most of them go fast, because I optimize my cards more for gut instinct and intuition than for difficult, thought-intensive problems. (Yes, you too can get to the point where you can solve the whole Blind 75 in Python by fingertip-feel if you’re willing to grind for about 2 months like this.)
While it would be great if I didn’t have to invest this time to reap the benefits of Anki, the tradeoff is that I, being someone who absolutely never just sits down to review his old notes “for fun”, would eventually let 99 or more frequently a full 100% of the knowledge I gained by painstakingly reading that book dribble out of my ears. And that’s way more annoying to me. I sat down to read this book on networking specifically because networking was so confusing to me that I needed to put in effort to understand it, why on Earth would I not want to safeguard my investment?
I generally split my cards up into subdecks by source. So there’s a “Networking for System Administrators” deck, with subdecks for “Chapter 1”, “Chapter 2”, etc. Any individual chapter has a maximum of being able to show me 10 new cards per day while I am still actively in the process of reading the book, but the deck as a whole has no limit - so, theoretically, if I had read through a 30 chapter book, by the time I reached chapter 31, I could have 300 new cards a day on my plate from the previous chapters.
In practice, of course, that almost never happens. Say I generate 50 cards from chapter 1 - by the time I reach chapter 6, chances are at least 5 days have passed and I have already gone through all of the chapter 1 cards. (I read maximum 1 chapter a day on work days, and 3 chapters a day on weekends / holidays.) So chapter 1 is functionally “in long-term memory”, and so in practice the earlier chapters finish up quite quickly, while still informing the later chapters very robustly, by virtue of having been read and Anki-fied first.
What about when I finish reading a book? Well, generally I’ve done a huge number of cards already for the earlier chapters, which, let’s be real, are the most important ones, because they lay out the basics for whatever field I’m currently studying. So at that point, I downgrade to just 1 new card per chapter a day. This might horrify you if you’re an Anki devotee - surely nothing good comes of such a slow drip feed! But I’ve found two things to be true about myself since I started using spaced-repetition systems over 10 years ago:
- I far, far overestimate my own willingness to actually work through cards I already wrote en masse.
- I far, far underestimate the return on investment of merely being prodded to think about a topic in a slightly new way for 20 seconds a day, every day, for 6 months straight.
All I’m saying is, if you’ve struggled with figuring out how to sustainably keep your Anki queue under control, this system has worked much better for me than I think I can explain in words. In a way it feels a lot like the kind of organic growth in metis you get from taking on a new job.