Understanding the power of metaphor in software development
What cognitive linguistics can teach developers
Chris Prather never metaphor he didn't like.
That's what he tells developers, at any rate. And on stage at SouthEast LinuxFest in Charlotte, NC, Prather explained how a deep understanding of metaphor—and the critical role it plays in cognitive function—can improve an open source software developer's work. He delivered his presentation, "I Never Metaphor I Didn't Like: How Cognitive Linguistics Can Help You Be A (More) Bad-ass Developer," last Friday.
Metaphors "are more than just flowery language, even though that's how they're taught to us in gradeschool and college," said Prather, CEO of Tamarou, a boutique Perl development shop.
Increasingly, he said, cognitive linguists are coming to understand that metaphorical thinking is fundamental to our understanding of the world. Writing from thinkers like George Lakoff, for instance, explains how metaphor orients us in the world—how it bridges that seemingly deep chasm between our own lived experiences and those of others.
"We use metaphors of our bodily experience to extrapolate into the world," Prather said.
Metaphor is a common way, Prather explained, of "using something you know deeply to get a handle on something you know less well." Far from special instances of explicit linguistic comparison, metaphors are a principal cognitive function.
Computer users and software developers everywhere implicitly understand this, Prather noted. For example, those on-screen objects we call "windows" are simply pixel renderings that, through linguistic association with those wood-and-glass objects we also call "windows" (i.e., those things in our walls that admit a summer's breeze), guide users struggling to understand how to use a computer. We "open" them. We "close" them. These are metaphorical terms, of course—labels we apply to our bodily actions to help the pixel pushing make sense in conversation. But they effectively guide our behavior and teach us how to approach and manipulate them.
(By the way: The same goes for command line activity, Prather said. UNIX is its own metaphorical language, as it orients users by suggesting that, for example, files are "in" folders.)
The entire language of "project management" is another shining example of metaphor at work, Prather said. Developers will often use language associated with epic journeys to frame explanations of their work. "We're making progress," some say. "We just hit a major milestone," say others. "We need to get things back on track," say still more. All these richly metaphorical explanations serve to explain one experiential domain (programming) in terms of another (a journey). The entirety of the complex practice we call "project management" is in fact oriented around the language we use to frame and engage with it.
That's not an inconsequential insight, Prather insisted. Understanding how certain metaphors organize developers' everyday work can reveal the ways certain linguistic frames are enabling—and constraining—that work. Shifting metaphorical frames can lead to new insights, new innovations, new discoveries, and new modes of work.
"Even when mimicking an existing process," Prather said, "thinking metaphorically can expand your frame of reference beyond data and transactions."
Becoming more aware of our usual metaphorical gymnastics goes a long way toward better understanding the way we're shaping the software environments that guide our users, too, Prather said. What might occur when we displace the desktop metaphor as the guiding conceptual frame for some of the world's most popular computing platforms?
Prather acknowledged that noticing metaphors at work can (and should) become a habit.
"You can't unsee this talk," he said. "Sorry."
A compelling metaphor, for sure.