In Turing’s Cathedral: The Origins of the Digital Universe, George Dyson says of the engineers and mathematicians who birthed computing:
By breaking the distinction between numbers that mean things and numbers that do things, they unleashed the powers of coded sequences, and the world would never be the same.
Consider the number 30 stored in a computer. It can mean something: how many dollars in a bank account, how many minutes a meeting will last. But it can also do something, by representing part of a sequence of instructions that updates the amount in the bank account, or that notifies you when it’s time to go to the meeting. Depending on context, the same number, in the same memory location, can mean something or it can do something.
Deep inside the computer there are only numbers. Out here on the Net we humans prefer to operate in terms of names. Happily it turns out that names can exhibit the same magical duality. That’s particularly true for the special class of names we call Uniform Resource Locators (URLs).
In a 1997 keynote talk Andrew Schulman put up a slide that contained just a URL:
http://wwwapps.ups.com/tracking/tracking.cgi?tracknum=1Z742E220310270799
“Think about what this means,” he said. “Every UPS package has its own home page on the web!”
Also, potentially, every bank transaction, every calendar appointment, every book (or paragraph within every book), every song (or passage or track within every song), every appliance (or component within every appliance). If we needed to, we could create URLs for grains of sand, each as compact and easy to exchange as Andrew Schulman’s Fedex URL. The supply of web names is inexhaustible, and the universe of their meaning is unbounded.
But these names don’t only mean things. They also do things. The URL of a Fedex package does more than merely refer to the package with a unique identifier (though that’s miraculous enough). It also engages with the business process surrounding that package, drawing together status information from a network of cooperating systems and enabling you to interact with those systems.
It takes a while for the implications of all this to sink in. It’s seventeen years since Andrew’s epiphany, you’d think I would have adjusted to it by now, but I’m still constantly surprised and delighted by unanticipated consequences.
Consider this tweet from Etsy’s CTO Kellan Elliot-McCrea:
My new favorite pick me up, searching Twitter for “congrats”, scoped to folks I follow https://twitter.com/search?q=congrats&f=follows 1
What does Kellan’s URL mean? The set of tweets, from the (currently) 1099 people that Kellan follows on Twitter, that include the word “congrats” — information that brings happiness to Kellan.
What does Kellan’s URL do? It activates a computation, inside Twitter’s network of systems, that assembles and displays that information.
Both the meaning and the doing are context-specific in several ways. In the temporal domain, each invocation of the URL yields newer results. In the social domain, Kellan’s invocation queries the 1099 people he follows, mine queries the 1046 I follow, yours will query the population you follow.
Two factors conspire to bring us an ongoing stream of these delightful discoveries. First, systems (like Twitter) that think like the web. In these case that means, among other things, enabling people to invent powerful names. Second, people (like Kellan) who do the inventing.
1I have simplified Kellan’s URL slightly. His original tweet includes the parameter &src=typd. Its purpose seems to be unexplained, and omitting it doesn’t change the result.
Hi Jon,
can I ask for your opinion on the significance of one difference between these numbers that do things and names that do things? The difference is the cardinality – there’s no limit to how many names we create; indeed we are encouraged to a) create new ones where appropriate, and b) not to reuse old names for doing new things.
With numbers, on a humble 8-bit computer, there will be 256 (give or take an order of magnitude) of operations the numbers can do, so a) they have to be sequenced and b) they have to be designed to be sequenced.
I’m torn between the magic of operation sequencing in programs, and the expressiveness of an endless supply of names.
Names that mean things can be combined (sem web anyone?), but combining names that do things is harder if you have many of them.
I’ll be doing more thinking on this. Thanks! 8-)
While there is an infinity of namespaces, there is a smaller infinity of patterns parameterized by infinite namespaces. https://twitter.com/search?q=congrats&f=follows is a name for a family of names. I like to think people can get the idea that you can discover (or really, uncover) such families. Mostly people won’t, that probably requires a certain geek mindset. But I certainly hope that people will more often learn to recognize and creatively use these families.