In Gödel, Escher, Bach, Douglas Hofstadter proposes a three-tiered hierarchy of information in messages: the frame, the outer message, and the inner message.

[W]e can separate out fairly clearly three levels of information: (1) the frame message; (2) the outer message; (3) the inner message. The one we are most familiar with is (3), the inner message; it is the message which is supposed to be transmitted: the emotional experiences in music, the phenotype in genetics, the royalty and rites of ancient civilizations in tablets, etc.

To understand the inner message is to have extracted the meaning intended by the sender.

The frame message is the message “I am a message; decode me if you can!”; and it is implicitly conveyed by the gross structural aspects of any information-bearer.

To understand the frame message is to recognize the need for a decoding-mechanism.

If the frame message is recognized as such, then attention is switched to level (2), the outer message. This is information, implicitly carried by symbol-patterns and structures in the message, which tells how to decode the inner message.

To understand the outer message is to build, or know how to build, the correct decoding mechanism for the inner message.

Gödel, Escher, Bach (p174, emphasis mine)

As an example, this model maps cleanly onto physical media. For a book, the frame is the physical paper, the outer message is the organization of symbols arrayed on the page, and the inner message is the meaning of the text.

As another example, consider how this hierarchical model of meaning maps onto code. For source code, the frame is the character literals stored in a source file, the outer message is arrangement of symbols and keywords (which must follow a formal language syntax), and the inner message is the intent of the code.

This is a useful model to have in hand when critiquing a message. When suggesting a change, think about what level of the hierarchy you’re addressing. Fortunately, most of the time we don’t have to worry about the frame – we’ve generally standardized on common symbols for English, source encodings for code, and image formats for photography. However, I think there tends to be some confusion between proposing changes to the outer- and inner-messages.

Take code review as an example: Making a whitespace or alignment suggestion? Outer-message. Fixing a semantic error? Inner message. Changing a variable name? Most likely, outer message.

Or editing a draft of an article: Fixing spelling or capitalization mistakes? Outer message. Rearranging paragraphs to change the structure of an argument? Probably inner message. Recommending a more or less emotionally charged word? Definitely inner message.

Deciding whether you’re advocating a change to an inner or outer message is important, because it causes you to question whether you’re changing the way a message is conveyed, or the content of the message itself.

Just because the “inner message” is, in some sense, the kernel of the actual meaning we care about doesn’t mean that the outer message isn’t important. Any algorithm has an infinite number of ways it can be expressed syntactically. Consider that minified code is generally an isomorphism of the original human-readable code – its function is identical even though the form is radically different. Minifying has no impact on the inner message or the frame (unless minification also involves compression), but drastically changes the outer message – i.e. by obfuscating variable names and removing dead code.

Thus, we see that the layers of information have meaningful interactions between each other. Some inner messages are more easily expressed by one frame than another: describing a landscape may be easier with a photograph than by writing (“a picture is worth a thousand words”). The outer message and frame are linked, in that the outer message must be expressed in a way that the frame supports. It’s much easier to store sound vibrations on a vinyl record than, say, image data. Finally, the outer and inner message interact as well: as described earlier, human-written and minified code are isomorphic, but to a human reader, the former is much easier to interpret than the latter.

The last example of the interaction between inner and outer messages may leave some unsatisfied: surely a human reader finds reading minified code difficult, but a machine has no trouble. This leads to another interesting idea: that codings are coupled to the system doing the “sense making”.

[I]n reality there is no such thing as an uncoded message. There are only messages written in more familiar codes, and messages written in less familiar codes.


To me, this has two interesting implications: first, that message encodings are necessarily contextual; second, that there seems to be some definable quality of “familiarity”, which is a product of the interaction between the encoding and the decoder.

First, on context: Encodings are contextual, in that to recognize a message’s frame the decoder must already have some reason for identifying that is an encoded message, and not just a product of a noisy landscape. A message’s frame is a sort of context: to detect radio signals, you need to have working knowledge of electromagnetism; to listen to a record, you need to be able to detect vibrations in the air. The combination of the frame and outer message form a deeper context: reading a sentence in English requires mapping the textual icons to symbols with common meaning, in a syntax that is agreed upon. The inner message is perhaps the most contextual of all, since it is the “meaning” that is being transmitted. The inner message is only legible when the first to layers are coherent and when the decoder has the ability to map the “meaning” onto its experience or capabilities.

Second, on familiarity: Given enough time, one can reason through a very unfamiliar outer message, assuming that the encoding follows intelligible rules (this is, in fact, a hobby). But why would isomorphic encodings of the same inner message – that is to say, identical inner messages with different outer messages – be more or less “familiar”? This seems to indicate that the outer message and the mechanism of decoding are linked. It’s much easier for a human to read text in their native language than a ROT13 shifted version of the same text. However, there are also intractably large gaps in “familiarity”, especially when the decoder possesses sufficiently different “hardware” for decoding. I’ll never be able to train an ant to decode a calculus textbook, and I’d never be able to decode the language system of a dolphin pod – there’s simply to large of a familiarity gap in our mechanisms of decoding. The ant can see the text in a book, and I can hear dolphin speech – that is, we have at least the mechanisms for detecting the frame – but nevertheless we’re both so disadvantaged at finding the outer message inside the frame as to render decoding the inner message intractable.

Putting these two ideas together, we see that “there is no such thing as an uncoded message” because the inner message is reconstructed inside the decoder via the interaction between the message, the decoding mechanism, and the context of the decoder. For example, the pheromones trails used in ant navigation are just as illegible to me as this blog post would be to an ant. We can speak about ant pheromones in analogy, using English sentences, chemical descriptions, and with reference to our olfactory system, but even if this is a form of decoding, it is assuredly not the same decoding that the ant performs.

Hofstadter’s “Three Layers of Information” is a fascinating mental model that usefully maps to several applications in normal life – e.g. interpersonal communication, crafting/revising messages, and even in reasoning how we could make ourselves legible to alien civilizations.

Cover Photo: Unsplash