I saw an interesting article on Hacker News today. It was called The Meaning of 'su', and it outlined the author's quest to understand the name of the su command in Unix. It's a great read. He starts with the assumption that su stands for super-user, and then infers that it means switch-user, and, well, it goes on from there. But, there is an assumption behind all of it (and the comments on Hacker News) that really should be explored. The assumption is that things have one meaning.
Among friends (ones who will put up with it, at least), I have a habit of saying one thing that can be taken three different ways and meaning every single one of them. It's fun, but I think it is more than fun. It highlights what are, to me, a few deep truths:
- Nobody has just one opinion about things. We are complex swirls of ideas and feelings, many of which may conflict yet be simultaneously true for us in our experience.
- Meaning isn't objective, it is subjective. When someone asks for the meaning of something, it's fair to ask: for whom? Meaning is a form of valuation, and without someone for whom there is meaning, or a mean-er, it doesn't really exist.
- Your meaning is as good as my meaning. And, in fact, your meaning can mean more to you than mine. In other words, it doesn't matter what the authors of the su command intended, you get to decide what su stands for too.
Here's the thing. I enjoy etymology. It's great to see how words came to be and what was originally intended by them. But, the unstated assumption is that once we understand that, we have some advantage. For instance, if we understand the core of the word property, we understand what is common between the notion of, say, personal property, and the notion of an object having properties. Powerful stuff. But, I think there's also a lot of power in recognizing that maybe there never was one single intended meaning. Maybe there were many. It's possible that the people behind Unix were having some fun with multiple meanings too. I wouldn't put it past them.
This is an interesting framework for thinking about interaction with people, but surely there is *some* objective meaning, or at least a meaning that a disinterested third party confirms.
A C# compiler, for instance, doesn't really care what meaning I assign in my mind to a word like 'using', it will only interpret that keyword in a certain way. So, in relation to me and anyone who writes code in C#, a C# compiler represents an objective meaning.
Posted by: mgroves | February 25, 2013 at 07:35 AM
mgroves: I've always considered the word 'meaning' problematic because we tend to hype it up. For the C# compiler, another way of putting it would be "when I use 'using' this happens." To me, meaning implies intentionality that may not be there. Think of language quirks. Surely no one "meant that", yet there it is.. it happens.
Posted by: Michael Feathers | February 25, 2013 at 07:47 AM
You are a unicorn. I am right, because to me, a unicorn is a Michael Feathers. My definition is as good as yours, so don't tell me I'm wrong, unless your wrong is my right, in which case I'll accept your different, equally good opinion on truth and reality.
Seriously, I don't think you said what you really meant. There is some objectivity to meaning, even to definitions, even though definitions are agreed-upon: It is _true_ that a majority of developers agree that the C# compiler is a compiler, and is not an interpreter, for example (unless there's some subtlety here I don't know about just to ruin my example). Certain words have been defined by people, and we can objectively look those definitions up, and objectively determine what a majority agree on regarding definitions.
What is tricky is that some may have encountered different information from others, or may remember things differently from others, or have thought through things differently from others--all so that some arrive at a different conclusion regarding a meaning than others. But that does not mean definitions are subjective or a matter of opinion.
Posted by: Jason Young | February 25, 2013 at 08:00 AM
Jason Young: I think you are mixing two things - statements and interpretations of intention and valuation (a.k.a. 'meanings'). Notice that you didn't say "Michael Feathers means unicorn."
Re your last example, I think that it means precisely that (or at least it does to me :-) ). When you talk about 'su' you get to decide what you mean, and it does not have to be the 'received' meaning.
Posted by: Michael Feathers | February 25, 2013 at 08:13 AM
Jason: I think your definition of objective meaning boils down to 'what a majority agrees on', and I think there's some truth in there, but I don't think meaning is purely democratic. There's an emergent component too.
For instance, a century ago, the default meaning of 'gay' is much different than it is now. We could poll every 10 years from 1900 to 2000 to see what the majority thinks, but something affected that shift. What if I decided today that 'gay' also means 'a shade of orange'? A majority would not agree with me, but in 100 years they might.
Posted by: mgroves | February 25, 2013 at 08:54 AM
mgrove: Good point. At the risk of getting more controversial, I think that it is odd when we take particular symbols, decide that what was meant by them in the past is what they must forever mean, and then ban them or ostracize people for using them. Maybe the better course is to attach better meanings to them, drowning out the old meaning. It's doable.
Posted by: Michael Feathers | February 25, 2013 at 09:02 AM
My two cents is that just as Michael defined legacy code as code not under unit test -- itself a bit of a meaning sleight of hand even though I agree with it -- I'd be inclined to assign words that don't have an agreed upon meaning at a given point in time to either of the following realms: controversial, perhaps politically ("marriage" as defined by the left and the right), nonsense ("Michael Feathers is a unicorn"), or theological or metaphysical mumbo-jumbo.
Words mean things. If we can't agree on what at a given point in time, either we're being sloppy (perhaps equivocating on two well known meanings), we disagree about what something SHOULD mean, or using words in a non-standard way to pull the wool over someone else's eyes (religious uses of language are famous for this).
Posted by: John Lockwood | February 25, 2013 at 05:33 PM
The meaning of 'su' is what happens on the computer on which it is executed. On my Windows machine the meaning is: 'su' is not recognized as an internal or external command.
Meaning is slightly different than purpose. For words the two are very entangled because a word has no other purpose than having a meaning. Computer commands are different. Whatever meaning you attach to rm -r, the computer has its own. Guess who wins!
Posted by: Ian Rae | February 26, 2013 at 06:15 AM
@mgroves, I agree that definitions are not purely democratic; when available, original definitions, or definitions given by authoritative sources (e.g. dictionaries), are at least favored over common usage, if not used exclusively to define words. Also, individuals generally try to understand meaning as it is meant or understood by others so that all are on the same page and communication is possible. OTOH, I understand that dictionary writers try to look at example usage as well as past dictionary definitions to modify their own definitions, further helping everyone stay on the same page. Usefulness seems to drive evolution of meaning all the while. But I better stop talking because I'm rambling about something I'm not an expert on. :)
(Good comments by all, btw.)
Posted by: Jason Young | February 27, 2013 at 09:53 AM
Jason, all: if you want to read from people that are experts about this, I'd recommend to start with Berger and Luckmann's "The Social Construction of Reality". Meaning (and therefore knowledge) emerges from experience and from socialization and institutionalization processes. That book was an eye opener for me.
Posted by: Jorge Aranda | February 27, 2013 at 01:15 PM
Hi Michael,
Great you've challenged the implicit assumption behind the article !
I think DDD's Bounded Contect can be use very effectively here :
A context is "the setting in which a word or statement appears that determine its meaning".
A context can be a team, a company, a department, a particular software.
While very simple it's a very powerful tool to distinguish the different context where the same word but with different meanings will be used.
Just think about the "Customer" word that has completely different meaning and concerns about whether you're in a marketing, accounting, logistics company's department.
All the strategic design patterns from the DDD's book are also of great use to analyse the interactions between different contexts.
Posted by: Jgrodziski | March 01, 2013 at 04:02 AM