Skip to Content

Coding Horror: What You Can’t See You Can’t Get

I suppose What You See Is What You Get has its place, but as an OCD addled programmer, I have a problem with WYSIWYG as a one size fits all solution. Whether it’s invisible white space, or invisible formatting tags, it’s been my experience that forcing people to work with invisible things they cannot directly control … inevitably backfiresA lot.
I have a distinctly Ghostbusters attitude to this problem.

I need to see these invisible things, so that I can zap them with my proton pack. I mean, er, control them. And more importantly, understand them; perhaps even master them.

I recently had the great privilege of meeting Ted Nelson, who gave me an in-person demo of his ZigZag project and his perpetually in-progress since 1960 Xanadu project, currently known as Xanadu Space. But one thing he mentioned as he gave the demo particularly intrigued me. Being Ted Nelson, of course he went much further than my natural aversion to invisible, hidden markup in content – he insisted that markup and content should never be in the same document. Far more radical.

I want to discuss what I consider one of the worst mistakes of the current software world, embedded markup; which is, regrettably, the heart of such current standards as SGML and HTML. (There are many other embedded markup systems; an interesting one is RTF. But I will concentrate on the SGML-HTML theology because of its claims and fervor.)

There is no one reason this approach is wrong; I believe it is wrong in almost every respect.

I propose a three-layer model:

  1. content layer to facilitate editing, content linking, and transclusion management.
  2. structure layer, declarable separately. Users should be able to specify entities, connections and co-presence logic, defined independently of appearance or size or contents; as well as overlay correspondence, links, transclusions, and “hoses” for movable content.
  3. special-effects-and-primping layer should allow the declaration of ever-so-many fonts, format blocks, fanfares, and whizbangs, and their assignment to what’s in the content and structure layers.

It’s an interesting, albeit extremely hand-wavy and complex, alternative. I’m unclear how you would keep the structure layer in sync with the content layer if someone is editing the content. I don’t even know if there are any real world examples of this three layer approach in action. (And as usual, feel free to correct me in the comments if I’ve missed anything!)

Instead, what we do have are existing, traditional methods of intermixing content and markup ala HTML or TeX.