You already understand the most important principle in computer science. You learned it from books and letters before you ever touched a keyboard.


The Book That Knew Where It Was

Pick up any book. Before you open it, you already know several things.

The cover tells you the title and the author — the semantic identity, the meaning, the answer to “what is this?” The spine repeats the title so you can find it on a shelf. The back cover has an ISBN barcode — a machine-readable identifier that a warehouse scanner uses to locate it in a logistics system. The barcode means nothing to you. The title means nothing to the scanner. Each identifier is on the side of the book that serves it.

Open it. The table of contents is near the front — a map from meaning (chapter titles) to physical location (page numbers). The index is at the back — a map from meaning (concepts and terms) to physical location (page numbers again, but from the other direction). The page number appears in the header or footer on every page — a physical address, not part of the text.

The text itself is in the middle. It does not contain its own title. It does not repeat its ISBN. It does not know what page it is on. It just says what it has to say.

This separation — meaning on the cover, physical address in the header, content in the body — was solved by book designers centuries before computers existed. It is not a technical insight. It is common sense made physical.


“I Need a Bigger Page” Does Not Scale

Imagine a book where every chapter began with the full title of the book, the author’s name, the publisher’s address, the ISBN, the table of contents, and the index — repeated, on every page, before the actual text.

Absurd. But this is exactly what XML and many data formats do. Every record carries its own schema. Every message carries its own type description. Every document declares its own namespace at the top of every file. The content is buried inside layers of self-description that repeat on every page.

The alternative — “I need a bigger page to fit all this metadata” — does not scale either. A bigger page just means more repetition at larger scale. The correct solution is the book’s solution: put the metadata where it belongs, once, and let the content be content.

The other side of the page is also instructive. When you reach the bottom of a page, you do not rewrite the sentence to fit. You turn the page and continue. The sentence spans the physical boundary without acknowledging it. The reader reassembles it naturally. The page boundary is a Gutenberg detail. The sentence is a semantic unit. They are independent.


Please Send Me Page 15

Imagine a research library where you can request individual pages of a book. You write: “Please send me page 15 of De Ontdekking van de Hemel.”

The librarian looks up the book (semantic name → physical location), finds page 15, and sends it. You already have pages 1–14 and 16 onwards. You just needed the one you were missing.

This is how the web works at page15.org and across the entire internet. HTTP byte ranges let you request exactly the bytes you need from a resource — not the whole file, just the pages you are missing. Video streaming works this way: your player requests the next segment, not the entire film. Large file downloads resume from where they stopped, not from the beginning.

The insight is that the physical unit (the page, the byte range, the network packet) and the logical unit (the sentence, the paragraph, the chapter) are independent. You can request physical units without understanding the logical structure. You can understand the logical structure without caring which physical units it spans.


A Sentence Is Rarely Longer Than a Page

Here is a practical observation that turns out to be a deep principle.

A sentence is almost never longer than a page. Which means: if you have two pages of text, only two places are uncertain — the very beginning of the first page (you might be mid-sentence from the previous page) and the very end of the second page (the sentence might continue onto the next page). Everything in between is complete sentences, complete thoughts, complete units of meaning.

This is the UTF-8 insight, applied to pages.

UTF-8 is the text encoding that almost all computers use today. It has a beautiful property: if you land anywhere in the middle of a stream of text, you can find the start of the next complete character by scanning at most 3 bytes forward. You do not need to go back to page 1 to figure out what language it is written in. You do not need a special marker at the beginning of the file declaring the encoding. You just look at a few bytes near where you are and the structure tells you what it is.

The older approach — UTF-16, the encoding Windows used for years — required a BOM (Byte Order Mark) at the very beginning of every file: a special marker that said “the rest of this file should be read in this specific way.” Go back to page 1 to understand page 47. The metadata was at the front instead of being local to each byte.

UTF-8 works like a well-formatted page of text: each unit is self-describing at the local level. You do not need the cover to read a sentence in the middle of the book. In the unlikely event that a character spans a page boundary — a very rare case, just as very long sentences are rare — you simply ask for the next page. The exception is handled locally, not by consulting the beginning of the document.


The Postman Reads the Envelope

A letter has two layers.

The envelope is addressed to your house. The postman reads the envelope. He does not open it. He does not care whether it contains a love letter or a tax bill. He cares about one thing: the address on the outside. He delivers it to your front door — not to your bedroom, not to a specific person in your household, not to the intended reader. Just to the address.

The letter inside is addressed to you personally. “Dear Rinie” — a semantic address, not a physical one. The household decides who gets it. You decide whether to open it. The postman’s job ended at the front door.

This two-layer structure — envelope for routing, letter for meaning — is the model that every network protocol has followed since. A network packet has a header (the envelope: source address, destination address, protocol type) and a payload (the letter: the actual content being transmitted). The router reads the header. It does not look inside the payload. It forwards the packet to the next address. Eventually the packet arrives at your computer, which opens the header, hands the payload to the right application, and the application reads the letter.

The computer reads the header. It delivers to your front door. Not to your room.

This is why routers are fast: they only read the envelope. They do not understand the content. A router forwarding an email does not know it is an email. A router forwarding a video does not know it is a video. It just reads the destination address and forwards. The separation between routing information (envelope) and content (letter) is what makes the internet scalable.


HTML Got This Right. XML Did Not.

HTML has <head> and <body>. The <head> is the envelope — metadata, title, links to stylesheets, instructions for the browser. The <body> is the letter — the content the reader sees. The browser reads the head, sets up the page, then renders the body. The separation is built into the format.

XML — and its cousin DocBook, used for technical documentation — made a different choice. Structure and content are interleaved. A chapter in DocBook looks like this:

<chapter xmlns="http://docbook.org/ns/docbook" version="5.0">
  <title>The Gutenberg Layer</title>
  <para>Content here...</para>
</chapter>

The namespace declaration (xmlns=...) is on every root element. The structure tags (<chapter>, <para>) wrap every piece of content. There is no clean separation between the envelope and the letter — they are woven together on every page.

This also makes one file per chapter awkward. A DocBook document is typically one large XML file because the namespace and schema declarations at the top need to govern the entire document. Split it into chapters and each chapter file needs its own declarations. The metadata repeats. The envelope is stapled to every page of the letter.

git works with one file per chapter. Each chapter is a separate file with no dependencies on any other file. You can edit chapter 7 without touching chapter 3. You can see exactly what changed between versions of a single chapter. You can branch, merge, and collaborate at the chapter level. The physical unit (the file) matches the logical unit (the chapter) cleanly.

This is why technical writers who use git for documentation almost universally use Markdown rather than DocBook — Markdown is content with minimal envelope, git is the versioning system, and the separation between content and structure is maintained by keeping them in different systems rather than tangling them together in one file format.


After Gutenberg: The Author Decides the Pages. The Editor Improves Readability.

Here is the last piece of the puzzle that books make obvious.

When you write a book, you write paragraphs. But where they break onto pages is not magic — it is a decision the author or publisher makes, usually by providing a stylesheet or layout specification. A4 and Letter are the same printer with different paper loaded — a cultural distinction, not a technical one. A well-specified document works on both; page 15 may land slightly differently depending on which tray the office loaded. That is the Gutenberg layer doing its job: the physical carrier varies, the meaning travels unchanged.

The intermediate layers — the network packets, the filesystem blocks, the CDN segments — are different. Those boundaries are genuinely content-free. A 4096-byte block does not care if it splits a sentence. Nobody below the waterline attaches meaning to where a block ends. The reassembly happens at the endpoint, invisibly.

The distinction matters: underwater block boundaries are content-free; page boundaries in a printed document are not. A chapter that ends mid-argument is a different reading experience from one that ends cleanly. That is meaning, not mechanics. The author owns that decision — and where the author gets it wrong, the editor corrects it.

The editor is the Use-Pull feedback loop for the author’s Def. Not rewriting the text, not changing the meaning — improving readability. Moving the break so the argument lands cleanly. Shortening the paragraph that ran too long. Catching the widow at the bottom of the page that makes the eye stumble. The author optimised for writing. The editor optimises for reading. Same text, different layer — and the reader never sees the work.

Typesetting your own book does not make it readable. The editor catches the obvious mistakes. The users will make the next version better.

A layout engine that silently reflows your paragraphs without instruction is not an editor — it is the spell-checking postman, editing the letter while pretending to only deliver it. The editor was invited in and has read the letter. The postman was not.

Using a new printer does not make you rewrite the text — and A4 versus Letter is the same printer with different paper loaded. Worse, perhaps, than a bespoke layout for each format — but it ages better.

This is also why your blog posts — written in Markdown, stored in git — can be rendered on a phone screen, a desktop browser, a tablet, a screen reader, or printed on paper, without changing a word. The semantic layer travels freely. The Gutenberg layer adapts to whatever physical context it is rendered in.

The postman delivers to the address on the envelope. The application maps paragraphs to pages. The desktop printer prints page 15 and 16 double-sided on one sheet. The offset press maps pages to signatures — eight or sixteen pages per sheet, folded and bound together. The router forwards based on the header. None of them need to understand the content to do their job. Each layer receives what it needs from the layer above and passes what it produces to the layer below.

That is the insight Gutenberg gave us in 1450, Unix rediscovered in 1969, and the web confirmed in 1991. The separation was always there. We just needed to keep it clean.


This post is part of the Gutenberg/Semantic series. The foundational post covers the full technical framework. This post is the version for everyone else.