January 21, 2007

Doing Meta: from meta-language to meta-clippy

The theme of the January/February recent issue of Technology Review is "software", and the cover story is "Anything You Can Do, I Can Do Meta", by Scott Rosenberg. The subhead tells us that "The space tourist and billionaire programmer Charles Simonyi designed Microsoft Office. Now he wants to reprogram software."

Rosenberg starts the article by describing Simonyi's planned visit to the International Space Station (as a tourist, for a $20M fare), and explains that:

This has always been Simonyi's preferred vantage. In a career spanning four decades, every time he has confronted some intractable problem in software or life, he has tried to solve it by stepping outside or above it. He even has a name for his favorite gambit: he calls it "going meta."

According to this page

"Anything you can do, I can do META!" was a quip that Samuel Hahn, then of ESL, tossed out once at a dinner (ca. 1991, San Jose, California). In the conversation Sam was responding humorously to some rather philosophical musings about programming higher-order functions (functions that build other functions) in LISP or Scheme. He said it as a cute play on the words "Anything you can do, I can do better," and claimed to have heard it from someone else, probably in the Stanford computer science department.

But I'm pretty sure that I heard this phrase in the late 1970s -- can anyone give me a pre-1991 citation?

The pun is a natural one, which might well have been invented several times. The original phrase is from a 1946 lyric by Irving Berlin, "Anything You Can Do, I Can Do Better", (Annie Get Your Gun); and a quick web search reveals that Anything you can do, I can do X has become one of the phrasal templates that we call snowclones. Among the many attested substitutions for X are: perky, beta, bigger, later, badder, maybe, while looking cooler, lower, vegan, badass, cheaper, louder, in microsoft paint, smarter, cuter, veto.

For members of the generation that used meta in everyday conversation ("you're getting bogged down in the details here, let's take this meta"), and even had meta keys on their keyboards (giving us jokes about "control meta cokebottle"), it would be particularly hard to resist the quasi-rhyming subsitution "meta" for "better".

I guess that the source must have been the language/metalanguage distinction in logic, though exactly how this usage came into proto-computer science in the 1950s and 1960s is not clear to me. The OED has an 1890 dictionary citation for metamathematics:

1890 Cent. Dict., Metamathematics, the metaphysics of mathematics; the philosophy of non-Euclidean geometry and the like.

Metalanguage is cited in a logical context from 1936, and in a linguistic one from 1948:

1936 K. GRELLING in Mind 45 486 The concepts analytic and contradictory in the language L, for instance, cannot be defined in L, as Carnap has shown. In order to escape from these restrictions one must build up a new language (a so-called meta-language) disposing of more means of expressing thoughts than the former.
1948 L. HJELMSLEV in Studia Linguistica 1 75 This would mean, in logistic terms, that linguistics is a metalanguage of the first degree, whereas phonetics and semantics are metalanguages of the second degree.

In any case, by the mid-1970s, meta certainly had reached among hackers the status for which the OED's earliest mundane citation is 1993:

1993 Boston Globe 8 Aug. (Electronic ed.), When anchorwoman Connie Chung made a guest appearance on sitcom Murphy Brown to advise anchorwoman Murphy not to sacrifice her journalistic integrity by making a guest appearance on a sitcom, that was just plain meta.

As for where Simonyi is going with this meta business, Rosenberg recounts a telling (though probably unfair) anecdote:

On a gray afternoon last October, I sat down with ­Simonyi in Bellevue, WA, in front of two adjacent screens in his office at Intentional Software, the company that he founded after he left Microsoft in 2002 to develop and commercialize his big idea. Simonyi was racing me through a presentation he was preparing for an upcoming conference; he used Microsoft Office PowerPoint slides to outline his vision for the proposed great leap forward in programming. He was in the middle of moving one slide around when the application just stopped responding.

In the corner of the left-hand screen, a goggle-eyed paper clip popped up: the widely reviled "Office Assistant" that Microsoft introduced in 1997. Simonyi tried to ignore the cartoon aide's antic fidgeting, but he was stymied. "Nothing is working," he sighed. "That's because Clippy is giving me some help."

I was puzzled. "You mean you haven't turned Clippy off?" Long ago, I'd hunted through Office's menus and checked whichever box was required to throttle the annoying anthropomorph once and for all.

"I don't know how," Simonyi admitted, with a little laugh that seemed to say, Yes, I know, isn't it ironic?

It was. Simonyi spent years leading the applications teams at Microsoft, the developers of Word and Excel, whose products are used every day by tens of millions of people. He is widely regarded as the father of Microsoft Word. (I am, of course, using Word to write these sentences.) Could Charles Simonyi have met his match in Clippy?

Simonyi stared at his adversary, as if locked in telepathic combat. Then he turned to me, blue eyes shining. "I need a helper: a Super-Clippy to show me where to turn him off!" Simonyi was hankering for a meta-Clippy.

Words, as the expression goes, fail me. Even hyperlinks are inadequate.

[Update -- Fernando Pereira dates meta-language in CS to 1962:

The earliest use of meta-language I can remember in computer science is in John McCarthy's 1962 LISP 1.5 Programmer's Manual:

The second important part of the LISP language is the source language itself which specifies in what way the S-expressions are to be processed. This consists of recursive functions of S-expressions. Since the notation for the writing of recursive functions of S-expressions is itself outside the S-expression notation, it will be called the meta language. These expressions will therefore be called M-expressions.

This approach to programming language specification should be contrasted with that of the equally famous Revised Report on the Algorithmic Language Algol 60 by Backus et al., 1962, who introduce the well-known BNF syntactic meta language (although they don't call it a meta language) but use informal natural language to describe the semantics of Algol 60. The notions of abstract machine and formal operational semantics needed still a few years to develop beyond the relatively simple recursive definitions needed for LISP 1.5.


[Update #2 -- Mike McMahon writes:

Then there's, "Every day, and in every way, we're getting meta and meta," usually credited to John Wisdom. E.g. here [Paul Greenberg, "The semio-grads: How an obscure Brown concentration trained graduates to crack the codes of American culture -- and infiltrated the mainstream", Boston Globe, May 16, 2004].

A comment by Leigh Klotz from a while ago on Slashdot recalls that the Lisp Machine editor had a special check in the error routine that adjusted the message when the undefined command Meta-Beta was entered. The team was split about half and half on whether that was funny. I believe I have the only space-cadet keyboard with a working USB interface. In addition to showing that message in the CADR emulator, it really will enter an uppercase lambda (into XEmacs) like the jargon file implies it should. The Lisp Machine character set had the SAIL characters, but was still only eight bits, so there wasn't room for everything.


[And Jesse Sheidlower writes:

Slightly antedating 1962 for "metalanguage" in a computing context (well, maybe it's not exactly in a computing context, but it's in a book about machine translation, so I figured it's worth the few electrons to send it to you):

1960 E. Delavenay Introduction to Machine Translation vii. 110 Between metalanguage and pure poetry, from the clear and distinct expression of a scientific representation to the synthetic expression of the vibrations of the poet's ego at the centre of his individual universe, there exists a whole vast range of untranslatables.

That's one of those interesting sentences that I believe I could translate, but don't believe I can understand.]

[Fernando adds by email:

I'm about to leave for a trip so I can't check Harris 1951 in the library, but I suspect the term might be used there. But my guess is that the term got into CS from logic, esp. Tarski, not from linguistics. Kleene's 1952 "Introduction to Metamathematics" puts in textbook form much of the machinery that was developed in mathematical logic by Goedel and Tarski. The formalization of programming language semantics starts with the same kind of machinery.

I'm now curious about how McCarthy came upon the M-expression presentation of LISP. I suspect there's evidence for the sources out there, but I don't have time to track it down until next week.


[Update -- Keith Ivey writes:

From a 21 Jan 1986 message by Walter Hamscher in AIList Digest:

The name means `Metalevel Reasoning System' because you can write meta-level axioms, axioms about the base level knowledge -- usually these meta axioms are used to guide the search-based inference procedures. I hear the latest version lets one write meta-meta- axioms, meta-meta-meta-axioms, etc ("Anything you can do, I can do Meta," as Brachman says).

That would be Ron Brachman, I guess, my former colleague at Bell Labs, who recently moved from DARPA to Yahoo. Ron might be the author, but I believe that I heard the same line from people at PARC in 1977 and MIT in 1978, used as if it were already a proverbial expression.]

Posted by Mark Liberman at January 21, 2007 08:30 AM