Does this feel familiar: "I thought I understood thing X, but then I learned something new and realized that I'd never really understood X?"

For example, consider a loop in some programming language:

var i = 0;
while (i < n) {
  i = i + 1;
}

If you're a programmer, you probably understand it just fine. How it works, in what order the lines are executed, how the variable changes over time... But have you ever noticed that the simplest way to compile such a loop to machine code involves two jump instructions - one conditional and one unconditional? (Try doing that with only one jump, it won't work.)

Now you might feel that your "understanding" of loops has become slightly closer to "proper understanding".

Or not!

An alternative view is that understanding is translation. It's a two-place word. Your understanding of loops, in the sense of translating them to execution histories, was perfectly fine. But your understanding of loops, in the sense of translating them to machine code, was slightly lacking.

When you see that pattern once, you notice it everywhere. A middle-schooler can understand numbers, in the sense of translating them to amounts of apples and such, but doesn't immediately translate the expression "x > 5" to a half-open ray on the number line. A self-taught singer can translate from heard notes to sung notes, but can't translate either to notes on a staff; a self-taught guitarist is missing a different subset of those skills. A bilingual person can translate a Japanese sentence with the word "integral" to English, without knowing what integral means. You can be good at translating other people's facial expressions to emotional states, but lousy at translating them to pencil sketches; your friend is the opposite; which of you "understands" human faces better? There's no answer, or many answers. Don't ask whether someone understands X. Instead, ask if they can translate X <-> Y.

That has implications for teaching. If you walk into a classroom intending to make students "understand" X, you'll fail at teaching. (I'm speaking from experience here.) But if you find some Y, already understood by the students, that can be translated to X - and drill them repeatedly on both directions of translation - then they will begin to "understand" X.

New to LessWrong?

New Comment
23 comments, sorted by Click to highlight new comments since: Today at 12:33 PM

I feel like you've taken a useful insight ("We can help people understand things more easily if we can translate them into a form they're already familiar with") and gone way too far with it, or, at the very least, failed to sufficiently explain your reasoning. You've provided a lot of examples, but the analogy you provided in the first few paragraphs doesn't necessarily work with all of them, so the reader is left to fill in the blanks and guess at what you mean.

A self-taught singer can translate from heard notes to sung notes, but can't translate either to notes on a staff; a self-taught guitarist is missing a different subset of those skills.

What skills? "Music skills"? Knowing how to play a guitar and knowing how sing are both subsets of "music skills", and neither requires the ability to read music, but could you really argue in good faith that someone with an extensive voice performance education doesn't "understand" music just because they don't know how to play a guitar?

You can be good at translating other people's facial expressions to emotional states, but lousy at translating them to pencil sketches; your friend is the opposite; which of you "understands" human faces better?

I do, because I can extract more information from them. I think you would be hard-pressed to convincingly argue that the ability to recreate something in a different medium demonstrates "understanding".

A bilingual person can translate a Japanese sentence with the word "integral" to English, without knowing what integral means.

This is a fairly trivial assertion, and I'm not exactly sure how it contributes to your overall point.

I'd be interested to read more about this in the event you were to flesh out and expand on your thoughts a bit more.

but could you really argue in good faith that someone with an extensive voice performance education doesn't "understand" music just because they don't know how to play a guitar?
I think you would be hard-pressed to convincingly argue that the ability to recreate something in a different medium demonstrates "understanding".

It wasn't my intention to argue such things. I'm not trying to answer the question "does someone understand X?" Instead, I'm saying we might not need that question, because it's not as informative as "can they translate X to Y?"

Please forgive me if I sound obtuse here, but the title of your post is "Understanding is translation", which sounds like you are saying that the two are equivalent. If, in your formulation, the two are equivalent, then "Does someone understand X?" and "Can they translate X to Y?" are equivalent questions.

I meant more like the answer to "do they understand X?" is best viewed not as a simple "yes" or "no" or a scalar quantity in between, but a combination of answers to "can they translate X to Y?" for many different Y. These answers can be surprisingly independent from each other, with some people better at translating X to Y1 and others better at translating it to Y2 etc.

Edit: maybe the post is unnecessarily confusing if you don't know the phrase "two-place word", which is LW jargon but not very well known otherwise. My bad.

Yes, given your explanation, I do understand what you're trying to say, and I don't feel that you've sufficiently made your case. For example, how would your formulation handle tacit knowledge, given that such knowledge is inherently difficult or impossible to translate?

Or, to give a different example: suppose I have a puzzle with four pieces. The puzzle's edges do not form a regular polygon, and each piece is a simple geometric shape, such that the correct orientation of the pieces is ambiguous without already knowing the correct orientation. I have a picture of the completed puzzle which shows how all of the pieces are arranged, and I am tasked with explaining to someone else how to arrange the puzzle. They cannot see the picture, and I cannot see them or their puzzle pieces. If I am unable to explain how to successfully arrange the puzzle to them, does that indicate that I lack some understanding of the puzzle? Surely not, since by having the picture of the correct orientation, I have all of the information there is to know about the puzzle, do I not?

That's a fair objection. But to give another analogy, when a non-artist looks at a human face, they think they have all the information too, but they don't. An artist's skill isn't just wielding a pencil, it's mostly noticing facts about the face. (For example, do you know what percentage of head height is above the line of the eyes?) Similarly, if you practice explaining puzzles to people, you might get better at noticing facts about the puzzles. Or at least in my experience, trying to explain something often makes you more aware of how it works.

For tacit knowledge, I guess the only way to salvage the post is to strain the analogy a bit and say that it's "translated" into action. Take that for what it's worth :-)

This post struck me as exceptional because it conveyed a pretty core concept in very few words, and it just kind of ended up sticking with me. It's not like I hadn't previously thought of the search for isomorphisms as an important part of understanding, but this post allowed me to make that more explicit, and provided a good common reference to it. 

What should I translate this post into, in order to understand it?

What do you want to translate it to? :-)

For example, you might be good at translating it into discussion but bad at translating it into action, or vice versa. Which of these counts as "understanding"?

Yes! Thank you!

I've had similar ideas for a long time. I've translated three books and find that I think of many acts of communication as translations. In particular, I find it useful to think of misunderstandings as mistranslations.

To think of thinking/speaking styles as languages just plain makes sense, and I feel that when people "are on the same wavelength" what is really happening is that they're (somewhat unusually) actually speaking the same language.

I don't use this concept for processes inside a single mind, though. Might be worth thinking about, but a term that denotes work with explicit communications does not seem like a good fit for processes that are almost entirely implicit.

I think there is something wrong in this understanding of understanding. Claiming understanding is translation seems to impliy that everything can be compared in some universal reading grid. However understanding has to happen in subjective contexts, or reading grids. Sense happens through the choice of a point of view, which may not be comparable to another. The subjectivity means that translation has to be interpretation, therefore it can't be the whole story.

In particular I would say that this idea lacks the fact that translations may not be relevant; and that what is good translations may not even be knowledgable. These aspects of translation by the way do not seem to be understandable in terms of translation

This idea has stuck in my head since it was posted, and I've been thinking of understanding being (or at least involving) translation ever since.

FWIW, looking at an actual compiler, we see zero jumps (using a conditional move instead):

julia> function test(n)
          i=0
          while i<n
              i += 1
          end
          return i
          end
test (generic function with 1 method)

julia> @code_native test(10)
    .text
    Filename: REPL\[26\]
pushq %rbp
movq %rsp, %rbp
    Source line: 3
xorl %eax, %eax
testq %rdi, %rdi
cmovnsq %rdi, %rax
    Source line: 6
popq %rbp
retq
nop

edit: Sorry for the formatting. I don't understand how source-code markup is supposed to work now?

edit2: Thanks, the markup works now!

edit3: So, to tie this into your greater point:

If you don't ask "how would I code this in assembly" but rather "how should my compiler reason about this code", then it is clear that the loop can be obviously eliminated: You place a phi-node at the end of the loop, and a tiny bit of inductive reasoning makes the loop body obviously dead code if n is an integer type. Slightly more magical (meaning I'm not a compiler expert) is the fact that the compiler (LLVM) can completely eliminate the following loop (replacing it with an explicit formula):

julia> function sumN6(lim)
   s=0
   i=0
   while i<lim
       i+=1
       s+= i*i*i*i*i*i
   end
   return s
   end

Source code markup is a bit broken. You should still be able to do it through greaterwrong's comment editor though: https://www.greaterwrong.com/posts/MRqnYuCFHW46JPJag/understanding-is-translation

Here's how I understand this post: When we "understand" parts of a skill/framework/encoding X, we can translate it into our own mental model U, then translate anything U captures into any other form Y. Ideally we would just communicate U. But it's more precise and useful to describe Y than to describe U, which may be nebulous from the inside or filled with idiosyncracies, and it's even worse to give up and just say "I understand X".

I think this is a good insight, but it seems less useful in the following cases:

  • Most people understand X the same way up to idiosyncracies of U, so they can do the same thing with the knowledge, and it gives enough information to say they understand X. The typical mind fallacy can persist when people have similar commonly observed abilities, but vastly different subjective experiences.
  • The skill X is made of abstract skills that combine into a whole and don't correspond to translating to different Y. Take X = abstract problem solving. Subskills include factoring into subproblems, gaining intuition, solving subproblems, and combining subproblem solutions into a whole. One could technically say that a person who is good at problem-factoring is good at translating problems into lists of smaller problems, but this doesn't seem meaningful.

Well, you can recreate the behavior of the example loop with just one (conditional) jump because we already know that 0<10. Though admittedly a compiler would probably not use that shortcut. Also, this seems to be something specific to the "while" loop, e.g. you can do a "for" loop with just one jump.

A sophisticated compiler absolutely would use that shortcut. Interestingly, it would figure out the shortcut by translating to an intermediate language that is neither the original language nor assembly, in which the transformation is more obvious.

Good point, I'll change 10 to n in the post.

How do you implement a "for" loop from 0 to n with one jump, if n isn't known and can be 0?

i=0

Label 1

[stuff]

i=i+1

If i <= n

Goto 1

I meant a "for" loop with i < n...

What's wrong with the implementation Dacyn gave?

It seems to me, that Dacyn's code executes [stuff] at least once for any n. But iff n <= 0, original while loop does not execute its body. Dacyn's code looks like a do-while loop.

Oh right. For loops check the condition before entering the body, just like while loops and unlike do-while loops. Thanks.