Do you have this experience of your mind going completely blank when you're hit with a difficult problem?
It happens to me on so many occasions, often when I'm learning a difficult concept or debugging a complex program.
Usually what I do is, well, for example nothing because my mind is literally blank.

I thought I was in the flow state, but really I'm just panicking. It's kind of the same as how I feel every time I show up in a social situation.
It has cost me so much time...
Until I found a solution... in a completely unexpected scenario.
I was writing the Docker course and thinking about how to make this thing as easy to understand as possible.
What makes something easy to understand?
How do you actually teach someone something new?

Apparently there's this process called association. You understand something through associating it with something you are familiar with.
Which means that if you have seen something similar before, you will understand it more easily.
In other words, something is difficult to understand if you miss some prerequisite knowledge that the author assumes you already know.
Could it also mean that...
A problem is hard because I lack some prerequisite knowledge?
With that, I found this magical question that has consistently gotten me out of panic mode when dealing with complex problems:
"What do I not understand that makes this hard for me?"
Once I ask that question, it gives my confused mind a clear direction.
Maybe it's a phrase in the documentation that I don't know the meaning of.
Maybe it's an API or function that I don't really understand.
Then the action becomes clear: learn the missing pieces.
Does that sound too simple?
Let's try this together:
Let's say you are trying to learn what Macros in Rust are.

You see this paragraph from the docs (hopefully you don't already know Rust, or this example is pretty pointless):
Rust provides a powerful macro system that allows metaprogramming. As you’ve seen in previous chapters, macros look like functions, except that their name ends with a bang !, but instead of generating a function call, macros are expanded into source code that gets compiled with the rest of the program. However, unlike macros in C and other languages, Rust macros are expanded into abstract syntax trees, rather than string preprocessing, so you don’t get unexpected precedence bugs.
If you're like me, you have no freaking idea what most of this means.
So let's ask the question:
"What do I not understand that makes this hard for me?"
This is my answer:
What is metaprogramming?
What does generating a function call mean? Does it mean in assembly code? So the alternative way is to expand into source code, how do you do that?
Macros also exist in C? How do those work?
I learned them one by one, and now I understand what the passage means (mostly).
To be clear, this doesn't make a hard problem easy.
But it gives you a clear plan for what to do.
This is just a cool technique that I would love to share with you.
Hope it helps.
- Fee from Anime Coders
The AI brief curated by Anthropic and ex-Google engineers
Thousands of AI papers, model releases, and product launches ship every week. You don't need all of them. You need the ten that matter.
TLDR AI is the free daily newsletter curated by Anthropic and ex-Google engineers. People who build AI for a living read everything, then send you what's actually worth your time: the models, research, and tools that will still matter next month.
No hot takes, no hype cycles, no 60-tweet threads. Clear summaries you can read between meetings.
Join 1.1M+ readers. Subscribe for free.


