Tables
An imagined dialog:
A: I’m building a brand-new kind of relational database.
B: Cool. What’s new about it?
A: It stores everything in tables.
B: That doesn’t sound very new.
A: No, I mean it actually stores everything in tables. You use a text editor to type a table like this in a text file:
| CommonName | ScientificName |
| Anchorwhip | Flagellanguis viridis |
| Flooer | Florifacies mirabila |
| Hiri-hiri | Carnophilius ophicaudatus |
| Oakleaf toad | Grima frondiforme |
| Shalloth | Arboverspertilio apteryx |
B: That’s…interesting. How do you enforce data types and uniqueness constraints?
A: Oh, you can’t.
B: Ah. And what happens if people forget to type the right number of bar characters?
A: Well, obviously they shouldn’t do that. But if they do, the database prints an error message as it’s loading the table.
B: Ah. Wouldn’t it be more efficient to use B+ trees or some other machine-friendly format for storage and then present the database as a table?
A: Maybe, but then people couldn’t edit it with Vim or Emacs, could they?
B: No, but—
A: And they couldn’t use wc
and grep
and other command-line tools on their data.
B: Not directly, but—
A: So you see, my way is clearly better.
I could have written this using CAD drawings instead, or made the case that everyone should type in hexadecimal color codes pixel by pixel to create image files, but I think you get the picture. Fourteen years after I confidently predicted that we would soon separate models from views for programming, just like we do for every other sophisticated highly-structured kind of data we work with, I still can’t embed a diagram directly in my source files, or insert an actual table in my code, or do any of a dozen other things that I have been able to do with desktop office software for more than 20 years. Even the most innovative work in this field still seems to treat character-by-character ASCII as an immutable law of nature rather than as the technological tonsil that it actually is.
Maybe we’ll go around it. Maybe the people working on blocks-based languages and structure editors will provide ways for people to express their ideas they way they want to, regardless of whether those expressions have a simple, directly-editable character representation. Maybe programming tools will allow art as well as prose before I write my last program. Maybe, but I’m no longer as hopeful as I was seven years ago.
(Species names from Dougal Dixon’s marvelous After Man.)