To “Understand” is to Program?

TLDR Abstract

The word “understand” has multiple possible meanings. You can “understand” how to play chess without knowing how to program it if by “understand” you are including inexplicit knowledge. (i.e. Knowledge you don’t understand well enough to explain it.) But to explicitly “understand” something requires explicit knowledge and so is equivalent to being able to program it.

Is Science About Programmability?

Donald Knuth famous said “Science is what we understand well enough to explain to a computer. Art is everything else we do.” (Quote in Leslie Valiant’s Probably Approximately Correct, p. 14)

There is much we might take exception to from this quote. For one thing, it rules out the (currently) non-computational sciences, such as large parts of the social sciences, from being science at all. And there is much we can’t explain to a program yet that may not be art but merely stuff we don’t understand well.

But I actually think Knuth is trying to express a true idea here, namely that you don’t explicitly understand something if you can’t program it. That is to say, that explicitly understanding something is equivalent to knowing how to program it.

David Deutsch famously made a similar statement, though specifically in the context of AGI:

…I have settled on a simple test for judging claims… to have explained the nature of consciousness (or any other computational task): if you can’t program it, you haven’t understood it. (BoI, p. 154)

So I was surprised when I saw “Quantum Cat” make the following tweet quoting Deutsch:

“If you haven’t programmed it, you haven’t understood it” — David Deutsch (here)

And Deutsch responded back:

BTW the actual quote from The Beginning of Infinity is less sweeping: “…a simple test for judging claims […] to have explained the nature of consciousness (or any other computational task): if you can’t program it, you haven’t understood it. (here)

So it would seem that Deutsch, unlike Knuth, does not believe that to understand something is to be able to program it. He apparently only agrees with that sentiment in the case of AGI or “other computational tasks.” (I’m curious what he means here.)

When I asked David Deutsch to give an example of something that can be understood without being able to program it, he responded “Chess.” This surprised me because programming chess is not that hard.

Talking Past Each Other

From here a conversation with Kitt Johnson began and it took me a while to realize that we were likely talking past each other by accidentally equivocating on the word “understanding.”

I’m now convinced that in some cases the word “understanding” implies explicit understanding and in other cases, it does not and that it just depends on the context of when the word is used.

I happened to be reading the partial Deutsch quote to be about explicit understanding while Kitt (and apparently Deutsch himself) was reading it to refer to inexplicit knowledge too.

What Does it Mean to “Understand” Chess?

To illustrate this, let’s take the following sentence:

Kitt really understands how to play chess, but Bruce doesn’t because he loses all the time.

This is a legitimate sentence with a legitimate meaning. It means Kitt is good at chess and Bruce sucks at it. (Which is probably true.) It does not mean that Bruce doesn’t understand the rules of chess because I at least “understand” chess well enough to play and lose.

But now consider this sentence:

Bruce can play chess with Kitt because he understands chess. But Bill can’t even play chess with Kitt because he doesn’t understand it.

In this context “understands” means nothing more than knowing the rules for chess. Bruce knows the rules, Bill doesn’t. Bruce still sucks at chess.

This tweet from me makes it clear I was understanding the word “understanding” in this second way. Certainly, anyone that understands chess (i.e. knows the rules) also knows how to program a computer chess game.

It’s easy to miss that we are using the word “understand” in two distinct ways here and so it’s easy to miss the fact that the original out of context quote from Quantum Cat has the same two possible meanings.

If by “understands chess” we mean only “knows the rules of chess” then clearly the moment you know the rules for chess you know how to program a chess game. (Though you’ll not know how to make a good AI to play against, but that isn’t the same thing as ‘understanding chess’ in this current limited sense.)

However, let’s say Kitt — who we’re saying is excellent at chess — can’t write a program that encapsulates his knowledge of chess. Why? Because only some of his knowledge of good chess techniques is explicit knowledge. Good chess players use quite a bit of inexplicit knowledge when playing, so they don’t always know how to describe what they are doing well enough to program.

This problem that humans often “understand” things “inexplicitly” is far more acute for the Chinese game of Go where nearly all the important Go knowledge is inexplicit. That was why we had such a hard time writing a good Go AI until very recently with the discovery of Deep Reinforcement Learning.

To Kitt, who was likely taking “understands chess” to mean something more like “understanding chess gameplay nuances well” (more in the sense of “he really groks chess”) it seemed obvious that a “true understanding” of chess couldn’t be programmed into a chess-playing AI because of its inexplicit nature. This sense of “understanding” is closer to how we might say something like this:

“Bruce’s lack of understanding of chess was quickly noticed by Kitt.”

(Kitt says something similar here.)

Here “understanding” clearly no longer means “knows the rules” and means that Bruce doesn’t play chess well.

Do You Really “Understand” Something If It’s Inexplicit?

Now here is where things get interesting. Suppose I said something like this:

Kitt understands how to play chess but he doesn’t understand how.

Though worded like a contradiction, this is a meaningful sentence that is saying something useful. This sentence can be made more explicit by rewriting it like this:

Kitt [knows inexplicitly] how to play chess [well] but he doesn’t [have explicit knowledge of] how [he plays it so well].

Here the first use of “understands” means something like “knows inexplicably how to play well” and the second use of “understands” means something like “has explicit knowledge of how he’s doing it”.

We might restate the idea like this:

Kitt can’t program a good chess AI because he doesn’t understand how he plays chess in the first place because it’s inexplicit knowledge and you have to understand something to be able to program it.

In other words, to “understand” something sometimes includes anything you know how to do, even if your knowledge is inexplicit, and sometimes means only things you can explicitly turn into an explanation. These are different concepts but we freely use the word “understand” to point to both concepts depending on the context. [1]

So getting back to the original question. Can you understand chess without knowing how to program it?

The answer to this question entirely depends on how you understand the word “understand” in this context. If you only mean “know how to play well” then one can certainly “understand chess” without knowing how to program their knowledge because much of that knowledge is inexplicit.

But if by “understand” you mean “has explicit knowledge” then in fact one cannot understand chess without also knowing how to program it.

So everyone in the discussion is actually correct for their respective understandings of the word “understanding.”

My Conclusion

However, here is the important point. We can now rewrite the quote from Deutsch to make the following more explicit claim:

If you haven’t programmed it, you haven’t understood it explicitly.

I do not know if Deutsch would agree or disagree with this form of the statement now. But I believe this form matches the original intent expressed by Knuth. And, moreover, I think this now a correct statement. To understand something explicitly is to be able to program it.

This is how I was reading the original partial quote from Quantum Cat. I was taking “understand” to mean “explicitly understand” (which in some context (such as the Knuth quote or my made-up examples) is what “understand” means. Kitt, and apparently Deutsch, were not taking “understand” to imply explicit understanding.


[1] Douglas Hofstadter argues that the number of concepts we have in our minds vastly outnumbers the number of words we have to express them and so words constantly take on subtly different meanings depending on the context. This leads to confusion like this situation. See Surfaces and Essences, Chapter 1 for discussion.

As a side note, this explains this tweet from Thomas Shaddox:

I would think the opposite: that we don’t understand chess all that well.

Thomas is actually using “understand” in a third subtly different way.

  • I am claiming one “understands” chess by merely knowing the rules
  • Kitt and Deutsch are claiming one can understand chess, but only if you really know how to play it well.
  • Thomas is claiming one can never really understand chess because one can never really know every possible strategy.

We are all correct. We are just overloading the word “understand” to refer to different kinds of knowledge.

So I believe this a philosophical pseudo-problem rather than a true problem.

2 Replies to “To “Understand” is to Program?”

Leave a Reply

Your email address will not be published. Required fields are marked *