Udostępnij za pośrednictwem


Five-Dollar Words For Programmers, Part Five: Reification

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”.

CrownThing-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.

Comments

  • Anonymous
    April 17, 2009
    The comment has been removed

  • Anonymous
    April 18, 2009
    "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

  • Anonymous
    April 18, 2009
    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". Kosta

  • Anonymous
    April 18, 2009
    So what's the difference between reification, personification and anrthropomorphism?

  • Anonymous
    April 19, 2009
    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. Mark

  • Anonymous
    April 19, 2009
    (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  

  • Anonymous
    April 19, 2009
    The comment has been removed

  • Anonymous
    October 25, 2010
    "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 :)

  • Anonymous
    November 20, 2010
    "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.  :-)