Fabulous Adventures In Coding
Eric Lippert is a principal developer on the C# compiler team. Learn more about Eric.
Today, another in my series on awesomely arcane words for programmers. Reification is the process of turning something that is normally thought of as an abstract concept into something more concrete. It’s from the Latin res facere, “thing making”.
Thing-making happens all the time in non-computer-related domains. Queen Elizabeth, her throne and her crown, for example, are all concrete representations of the abstract concept of “sovereignty”. A judge’s gavel or a statue of a blind woman holding scales make a concrete representation of the abstract concept of “justice”.
You also see reification in teleological rhetoric. “Information wants to be free”, for example, fallaciously reifies “information” for rhetorical impact. And it succeeds in doing so - obviously this is some compelling rhetoric that speaks to lots of people. It makes an interesting point in a memorable way.(*) But hopefully no one seriously believes that the abstract concept of “information” is actually a thing with desires or beliefs. Only concrete entities can actually want something.
In the world of programming language design and implementation, reification is a huge part of what we do; designing languages and building compilers is all about taking extremely abstract concepts like “variable”, “procedure”, “type”, “set”, “class”, and so on, and making a device that reifies those concepts into more concrete textual entities that can be declared and manipulated. Our goal for LINQ in C# 3.0 was to reify ideas like “filter”, “projection”, “group”, “order”, and “query” into concrete entities that could be directly expressed in the text of the program. Adding homoiconicity via expression trees reifies those concepts even further, making them manipulable as runtime objects.
Some of the most interesting areas in the computing industry are those where reifications are still inchoate or contradictory. Consider the tarball that is modern bleeding-edge asynchronous programming, for example. Pretty much everyone agrees that we need some decent way to solidly reify the notion of “asynchronous work”, but how? Looking around, I find that people reify this idea (or closely related ideas) in a dozen different ways. Workflows, coroutines, observable collections, futures and promises come immediately to mind; I’m sure there are many more. This lack of consensus makes the language designers’ jobs much harder.
(*) The alert reader will have just wryly noted that I have indulged in the very rhetorical fallacy that I’m pointing out. I’ve fallaciously reified a quotation into a thing that can succeed, can speak and can make a point. Really I should be making these attributions to the concrete people who speak that statement, not to the abstract statement itself.
And isn’t that ironic, don’t you think? Who would’ve thought? It figures.
Eric, perhaps, a piece of information or a statement is a completely non-existent entity if we look at it in isolation i.e. without its vehicle or the interpreter. After going through your blog, several things came into my mind and I dwelled on the meaning of information for some time.
What I realized is that information is fundamentally so deeply intertwined with the vehicle that carrries it, we could perhaps portray it to be having the behavior of its vehicle, which is concrete. For example, consider a small hole at the entrance of a room. Now, this hole in itself is neither wanting to be discovered nor to be ignored. Its existence is not even a piece of information yet since there is no interpreter.
Now, let's bring an ant into picture. This ant, when in search of a home, discovers this hole, converts its existence into a piece of information "A home in a form of hole exists here," and conveys it to fellow worker ants. So, the ant's mind is now the vehicle for the information and thus we could say that "the information about the existence of hole wants to be relayed if the vehicle is an ant". The information exists nowhere except for in the ants' minds.
If, however, our vehicle were a human mind, perhaps, our information would have wanted to be ignored since usually a human mind most probably will not care about that hole and will not publicize it the way an ant does. This "information" does not have any existence except for inside the "human mind" in question.
They are not separate.
What I am getting at here is that since information is fundamentally and inseparably co-existent with its interpreter or generator, which is concrete in nature, we are probably not entirely wrong in speaking of information as wanting or doing something. Perhaps, they are not even two.
I am wondering if I totally missed the point you wanted to convey through the blog post!
:-) I enjoyed reading it though.
The ideas you're exploring here are topics in epistemology, the study of the characteristics knowledge and how it is acquired. If you're interested in the philosophy of knowledge acquisition, you might want to find some books on epistemology. -- Eric
"hopefully no one seriously believes that the abstract concept of “information” is actually a thing with desires or beliefs"
Lots of people have these kinds of beliefs.
Name three. :-) -- Eric
They don't make good scientists, for obvious reasons. Many of these people are successful in their lives (for some unspecified definition of "success"), so don't be too quick to dismiss them.
Seriously now. I realize that lots of people indulge in personification. (And some of them do make good scientists; it's amazing how humans can compartmentalize their incompatible belief systems.) But surely in this specific example it's clear that it's rhetorical -- particularly in the original speech, where the speaker was contrasting the cheapness of moving all information with the expense of acquiring the right information. -- Eric
I would like to disagree with the examples you provided here.
I think that a computer language like C# actually reifies the abstract concept of "OOP" and LINQ reifies the concept of "Querying Relational Data". To my understanding, the “variable”, “procedure”, “type”, “set”, “class”, and so on are actually concrete things: for implementer they are defined clearly in the Spec (e.g. Mono project) and designer actually invented them - made to reify something different.
I think that reification for async programming would be something like multithreaded programming. while Workflows, coroutines, observable collections, futures and promises are more a reification for http://en.wikipedia.org/wiki/Join_calculus abstract concept. The difference is made based on emphasis:
In the first case it's "asynchronous", while in the second it's "fork/join".
So what's the difference between reification, personification and anrthropomorphism?
Another fascinating article! I'll add it to my vocabularly.
Regarding your footnote, I've always been taught that that rhetorical device was called metonymy - http://en.wikipedia.org/wiki/Metonymy - when a related term is used to refer, by proxy, to an actual agent or object. So for example saying 'The Palace released a statment' to mean 'a spokesman from the Palace released a statement'.
In your exapmle you're using the quote to indirectly refer to the person (or set of people) who said the quote.
(re the footnote) Are you "outing" yourself as a closet Alanis Morisette fan, then? Gotta love a song supposedly about irony where, in fact, everything is simply unfortunate. The only thing ironic in the song is thus the title ;-p
As always, a good read; Marc
I would not say that I am particularly a "fan" of Alanis Morisette (who is Canadian). I do think it's a funny song. And yes, maybe strictly speaking some of those things are more unfortunate than ironic. But I think she gets a bit of a bad rap about that. The wikipedia page on irony calls out that there is a difference between rhetorical irony, in which the speaker uses words to suggest an idea which is actually opposed to a literal meaning of the words, and situational irony, in which reality is opposed to expectations. The lyrics are clearly about situational irony. And sure, they're not examples of situational irony that illustrate anything particularly compelling about the human condition. But I still think that it's reasonable in a nonscholarly work to use "ironic" in this casual sense. -- Eric
Well, if it comes to that, isn't the concept of God a mere reification of the most abstract thing of all -- of something that turns chaos into order? Order = Good = God; Chaos = Evil = Devil... or so they say! :-) Plus, isn't it nice, even if a bit naÏve, to think that that cold, abstract 'something' (the Architect who designed the Matrix) is good and loving Someone who will listen, understand, and help?
Religion, to math/physics, to computers: behold the evolution of reification. Apparently, computer itself is the biggest reificating tool of all times, turning abstract binary operations into concrete electric signals that in turn result in some very concrete actions, such as lighting up of the display, printing on paper, maneuvers of a missile, and so on.
Or maybe it all started with the language, when abstract things like life and death became concrete words? Tell me this: how on Earth can we t h i n k of some a b s t r a c t c o n c e p t without turning it into a concrete mental image, be it a word, a vision, a rythm, or whatever? :-) I know it does not have to be the same image every time I think about it...
"The alert reader will have just wryly noted that I have indulged in the very rhetorical fallacy that I’m pointing out."
Eric, long winter nights must just fly past in your house :)
"But hopefully no one seriously believes that the abstract concept of “information” is actually a thing with desires or beliefs. Only concrete entities can actually want something."
I think you're reading too much into the literal phrasing. That's how languages work.
I'll grant that information doesn't "want", if you grant that I can want things even though I'm not (AFAICT) made of concrete. :-)