"[A]s we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns—the ones we don't know we don't know."
The rise of the internet has fundamentally changed the human relationship with knowledge.
Prior to the internet, there was great value in being able to know and recall a large amount of factual information. Expertise was determined, as much as anything, by this ability to memorize facts. The most productive programmers were those who didn't have to look up syntax or functions in a reference manual, as the cost to perform that look up was relatively high.
With the advent of the internet–and sites like Wikipedia and Stack Overflow–the cost to perform that same lookup has dropped to near zero.
So what separates a good programmer from a great programmer in 2022?
In today's world, it's more important to know a piece of knowledge exists than it is to actually possess that knowledge.
Nothing is More Valuable Than Knowing What You Don't Know
Stop worrying about trying to memorize information.
If you know the right question to ask, you can discover the answer in seconds with a quick internet search. The expert, then, is the one who's been exposed to enough knowledge over the years to know what question to ask.
The novice and the expert have access to the same answers. But only the expert knows what questions to ask.
A Brief Example
Let's say I'm writing code that performs a string substitution inside of a long-running loop.
I write the code using some combination of the Left(), Mid(), Right(), and Replace() functions. The code produces the correct result, but it's painfully slow. Being a seasoned VBA developer, I know that in addition to the Mid() function, VBA has a Mid() statement.
My original solution relied on string functions and concatenation. Those are relatively expensive operations. Calling them repeatedly in a loop often produces unacceptably slow results. The Mid() statement, though, performs a direct character replacement of the string. This has the potential to provide a huge boost to my code.
Now, I've only actually used the Mid() statement in my code maybe half a dozen times over the past fifteen years. It uses a weird syntax that I cannot remember. But it doesn't matter that I can't remember the syntax. A quick search for "VBA Mid Statement" brings me to the official Microsoft documentation, which includes the following helpful usage samples:
My point here is not to introduce you to the Mid() statement. Rather, I'm trying to illustrate that it is more important that I know the Mid() statement exists than it is for me to know how to use it.
The Knowledge Square
To further illustrate the point, let me introduce the Knowledge Square:
The vertical axis represents the extent to which we know some piece of knowledge exists. I've labeled this axis Awareness. Think of this as, Do I know what question to ask?, where "No" is at the bottom of the axis and "Yes" is at the top.
The horizontal axis represents the knowledge we possess. I've labeled this axis Knowledge. Or, to put it another way, Do I know the answer to the question?, where "No" is on the left side of the axis and "Yes" is on the right.
It's critical to understand that these axes represent independent variables.
The Recall Quadrant
In the upper right, we have the Recall quadrant. This area represents our "known knowns," those things that we know we know.
For the purposes of our discussion, these are all the things that you can easily recall without having to resort to an internet search. This quadrant tends to grow and encompass those things that you do on a daily basis.
The Google-Ready Quadrant
In the upper left, we have the Google-Ready quadrant. This area represents our "known unknowns," those things that we know we don't know.
I labeled this the Google-Ready quadrant because it represents knowledge that is only an internet search away.
The Blind Spots Quadrant
In the lower left, we have the Blind Spot quadrant. This area represents the "unknown unknowns," those things that we don't know we don't know.
This is the area that scares me the most when working on a new project. It's the birthplace of misunderstood requirements.
One of the biggest challenges when working on a new project is identifying and addressing misunderstood requirements before you write code because it's a lot more expensive to fix misunderstood requirements after you write the code.
The Intuition Quadrant
This is the final piece of the puzzle that is missing from Rumsfeld's quote. This area represents the "unknown knowns," those things that we don't know we know.
So, how can you know something without knowing that you know it? Lest you worry that this will be some deep thinking exercise, it turns out that this situation is so common that we have multiple phrases to describe it:
- Trusting your gut
- Spidey sense
This area represents the totality of your accumulated knowledge and experiences, but it often manifests itself subconsciously.
You may feel strongly about a decision, but when asked to explain it you have a hard time articulating your reasoning. It's certainly possible that you've simply offered a SWAG (scientific wild-ass guess), but there's a very real chance that your decision is based on evidence–even if it's evidence you can't quite put into words.
It's Better to Move Up Than to Move Out
For nearly all of human history, there was more value in moving to the right on the Knowledge axis versus moving up on the Awareness axis.
The ubiquity of online knowledge has changed that.
Be a Jack-of-all-Trades and a Master-of-One (at a time)
Assuming you agree with my observations, what can you do about it?
I think the best approach is to read, listen, and watch as much as you can.
Don't waste your time memorizing how to do each new thing. Instead, simply file it away for another day. And when that future day comes, you'll be able to fill in your missing knowledge with a quick internet search.