Recently I saw a reddit post of a software engineer "feeling dumb" because of all the things he saw that he did not know.
On this post I replied with a suggestion of keeping a "Stuff I Didn't Know I Don't Know" list, elaborating briefly on how I use mine. This comment was received very well which motivated me to write the process of such a list down more formally.
The "Stuff I Didn't Know I Don't Know" List
The concept is simple but very effective. Keep a note somewhere in your favorite note-keeping tool. For me that is Obsidian, but it could be your phone's default note app or any other medium for jotting down quick notes.
Whenever I read something that I don't understand, I write it down in my "Stuff I Didn't Know I Don't Know" (SIDKIDK) note. This could be a term such as "Hexagonal Architecture", "SuperVisorJob" or "Romantic vs Classical thinking". I add it to the top of my list and go on with my day.
Sometimes I run into a term or phrase that I already have in my SIDKIDK list. When this happens, I simply append a "+" to it. You'll notice that when it happens, your curiosity for the term increases.
Depending on how much reading and researching you do, you'll quickly end up with a list full of concepts you don't know. But at least you know you don't know.
Going Over the SIDKIDK List
Usually during the weekends, I go over my list. There will be several items in the list with more plus (+) signs than others. Occasionally there is just one that really speaks to me, even though it doesn't have the most plusses.
This is when I decide to learn. I will do so by any means necessary. It usually starts with a quick Perplexity search or a YouTube video. This can be surprisingly useful for simpler terms, but often not sufficient for deep understanding.
Usually I end up reading various blog posts. When even that isn't sufficient, I opt in for my favorite way, unfortunately also the most time consuming way, to learn: reading books. For others it might be online courses.
Once I feel like I have a good understanding of my pick, it is time for the most important step.
Assessing your understanding
In his phenomenal book "Writing to Learn", William Zinsser writes:
“Writing organizes and clarifies our thoughts. Writing is how we think our way into a subject and make it our own. Writing enables us to find out what we know—and what we don’t know—about whatever we’re trying to learn." ― William Zinsser, Writing To Learn
I can't tell you how often I have started writing about something I assumed to understand, only to find out that I did not. Or at least not to the extent I thought I did.
Whichever term or phrase you pick from your list, open up another note and start writing. Explain the concept to a fictional audience. Or better yet, a real audience.
Kotlin dispatchers are ....
Are you drawing a blank or do the words start flowing? The answer to this question is often a good measure of your understanding.
Writing is crucial. Anyone can read a piece of text and say "ah, I understand this!". I've done this myself more times than I'd like to admit. It isn't until you start writing that you really find out what you understand, and what you don't.
If you can write about your term of choice clearly, congratulations! The most satisfying part is now: you get to strike-through your term and all its plusses!
What if I can't write about it?
If you can't write about it, you don't understand it. It's really that simple. To quote William Zinsser once more:
Writing is thinking on paper. Anyone who thinks clearly should be able to write clearly—about any subject at all. ― William Zinsser, Writing To Learn
Sometimes you find out you are missing foundational knowledge. When this happens, I add the term above the one I am currently learning.
For example, a few years ago when I got started with Kotlin (the programming language), I had kotlin dispatchers++
in my SIDKIDK list. When I started reading about dispatchers, I realized I didn't understand coroutines well enough. Therefore had to slightly update the list to:
kotlin coroutines
dispatchers++
So I had to learn and write about coroutines before learning about dispatchers.
Conclusion
In summary the steps are:
- See a term you don't understand (well)
- Write the term down in your SIDKIDK list
- If it already exists, add a + to it
- Periodically pick a term and spend some time learning about your pick in whichever way you learn best
- Write about the term
- If you can't write about it, spend more time learning
- If you can't learn about it, find the foundational knowledge to add to your SIDKIDK list and start there
- Strike the item through (never delete it)
The "Stuff I Didn't Know I Don't Know" list has been incredibly useful to me. Sharing it on Reddit made me realize this could be valuable to others too.