ACCU Home page ACCU Conference Page
Search Contact us ACCU at Flickr ACCU at GitHib ACCU at Google+ ACCU at Facebook ACCU at Linked-in ACCU at Twitter Skip Navigation

pinGnomes and Misnomers

Overload Journal #140 - August 2017 + Journal Editorial   Author: Frances Buontempo
What’s in a name? Frances Buontempo decides some names are better than others.

It is time, yet again, to attempt to write an editorial. Of course, ‘editorial’ is something of a misnomer. We are all aware that it should be the editor’s opinion on a topical issue. I believe I have rigorously steered clear of this so far, despite being accused of sailing a bit close to the edge once in a while. As I consider what an editorial is, I notice it has several synonyms, including feature, commentary and write-up, yet I could only find one antonym; secondary source [PT]. This is not to be confused with secondary sauce, which has a very different flavour. Homophones, words that sound the same but mean something very different can be the cause of confusion or fun. Do not confuse your carets with carrots, or vice versa. More extremely, homonyms appear the same when spoken or written but mean different things. I saw a saw. I object to that object. Such ambiguity can lead to dreadful puns, hilarious jokes or beautiful prose. Or long meetings with fights over documentation, meaning and project or component names.

As programmers we are often stumped when searching for a good clear name for something. I have been re-reading Jingo by Terry Pratchett [Jingo], where we meet a character, Leonard de Quirm who bears more than a passing resemblance to Leonardo da Vinci. He has created a metal transport device that goes under water.

“Er... what is this thing called?” said Colon, as he followed the Patrician up the ladder. “Well, because it is submersed in a marine environment I’ve always called it the Going-Under-the-Water-Safely Device,” said Leonard.

A footnote observes that “Thinking up good names was, oddly enough, one area where Leonard Quirm’s genius tended to give up”. How do we find names for our components, programs and projects? Some have long, relatively precise titles. Microsoft Visual Studio 2017 springs to mind. Others are designed to be unsearchable on the internet, perhaps by accident; Q, R, C for starters. We also have many abbreviations and acronyms, which end up feeling like whole words, and we forget some people don’t know these. I know what RC means in a list of versions of software downloads, but ‘release candidate’ may not spring to mind immediately for everyone. Some acronyms are more natural that others. Some are quite clearly backronyms, where words have been tortured into spelling another, or TISA if you will. Some spring from a central idea. Animals give us GNU, YACC, then Bison, and others. People choose Greek gods, comic book characters, mythology. Having a theme can get your imagination going. I wonder if it might sometimes alienate people though. If your projects were all named after My Little Pony ponies or Jane Austin characters, how would you feel? Or lesser known industrial bands? Or Old Testament prophets? Footballers? What do your choices say about you, your company, or open source project?

This is touched on obliquely in REAMDE [Stephenson]. Correct Reamde, not Readme; a deliberate word twist à la Skinny Puppy lyrics. In a fabled cryptocurrency mining fantasy world, where character names are predominantly in Western fonts, the Chinese hackers and crypto-coin miners use character names that fit Western fiction, not just because they can’t type their letters into many Western apps. In the real word, such fantasy games might have groups of mythology or fantasy aficionados that hail from, usually, Western tales. A Chinese hacker in the book commented that he knew all about the mythologies, from comics and US films. Nonetheless a rival group had sprung up who preferred modern, bright colours and futuristic names. The party lines and allegiances might not lie where you would naively expect them. Tribal behaviour and exclusion is a topic for another day. The names we choose often say something about us, either individually or as a group.

We do frequently draw on mythology for inspiration, or at least for names. Viking and Norse history and mythology often provide. Take Bluetooth, a king and wireless technology, bringing things together [Bluetooth]. Consider Munin, one of Odin’s ravens, whose name means memory, used for a monitoring tool [Munin]. We also see Gnome, the open source desktop or a 16th Century ‘diminutive spirit’, who lives underground [Gnome]. The Renaissance spirits don’t stop there. We have Sprite: ‘a smaller bitmap composited onto another by hardware or software’ or ‘legendary creatures such as elves, fairies and pixies’ [Sprite]. I am sure you can think of many I have missed. If you are unfamiliar with the meaning of the names or the background they draw from, this probably won’t detract from your ability to use or program with something so named. Be aware that most fairy-type creatures are troublemakers, as far as I can tell. We don’t stop there. We also have daemons, running unobtrusively in the background. Or crashing or spewing to a log file. Not to be confused with demons or dæmons, who are benevolent, benign or downright bad, depending on which mythology you are reading. There are those who say most computer programs are benevolent, benign or downright bad as well. Jinn, djinn, or genie is another matter entirely, each inspiring many acronyms. Mine’s a gin!

Along with names for programs and projects, we have some more abstract words to describe design approaches or management processes. These can help communication, but things tend to trend, dragging the uninitiated on-board. Many teams claim to be agile, even rigidly agile. True story. We find many misnomers, where a wrong or inappropriate name is used. A speaker, I forget who, once quipped that a class under consideration was more of an entire school then a class, since it had so many members. Using and misusing words can distort or help your understanding. Sometimes you just need to work side by side for a bit to gain a shared vocabulary. I had mentioned TDD a few times at work a while ago, and it was only when I sat with a colleague she realised I did really mean I wrote the test first. I was never sure what she thought I had meant previously when I said ‘test first’. Obviously, it didn’t mean ‘test first’ to her. Does your team have continuous integration, CI? Does it actually have several different branches that haven’t been merged for months? Do the scripts run ‘automatically, at the touch of a button’? Another true story. We filter what people say to us through our own experience and bias by default. Without the shared context of comics, films or coding, misunderstandings abound. Inconceivable, you might say. “You keep using that word, I do not think it means what you think it means,” Inigo Montoya from the 1987 film The Princess Bride would retort. Meme-tastic. Claiming you are agile, or promote based on merit does not make it so. A log line claiming ‘ERROR:’ does not always mean an actual error. Class names frequently sprout meme-like parts; builder, factory, abstract. These should convey how they work but as we know ending up with an AbstractFactoryBuilder or similar is meaningless to the point of ridicule.

Aside from class names, consider namespaces or package names. How many times do we get a ‘Utility’ package or module? Or even worse ‘Misc’. We often end up with a bucket of stuff since we are neither clear what to call it or if it’s worth breaking things down into smaller related groups. On a code level, I often end up with a snaky mess of ifs and elses when I haven’t stopped to think about ways to define small, clear functions that would stop the rot. I am continually improving at deleting Boolean flags though. Sometimes you can’t find a way to do something, or chose between options because you are doing it wrong. Being unable to name a class is a sign. If you’re blocked, it’s time to step away from the keyboard.

Many out-and-out misnomers exist. Does Excel excel at anything? How easy is it to get at data in Access? How often do people claim they have Big Data, which is less than a gigabyte (e.g. all of Shakespeare)? Do you have any Smart devices? Almost anything with ‘giga’ or ‘nano’ in its title falls in this category. Is your job title ‘Developer’ but you spend all day in meetings or grepping log files? In my keynote for this year’s ACCU conference, I observed that machine learning is almost certainly a misnomer. The machines don’t learn anything, but we sometimes do from the data analysis they perform. Furthermore, AI, artificial intelligence is not clearly defined, beyond a Turing test assessment; you’ll know it when you encounter it. I have heard the question “Can’t you make the AI more intelligent?” in relation to a variety of applications recently. I think this really means “Can’t you write a different algorithm?” when thought about. Giving an amorphous collection of ideas or algorithms a single name allows them to be discussed easily, but frequently conveys an incorrect impression to people outside the subject area. Front ends and user interfaces provide no end of places for trouble to happen from un-thought-through wording. How many times have you been confronted by a message box with ‘OK’ or ‘Cancel’ on, when it’s not ok and you’re not sure what cancel will actually do. I have recently been working on ‘plugins’ for some security tools. One input plugin is more like a section of regex in an ini file. Beware technical terms. You might be disappointed. If you need a good book to get you thinking straight (and make you laugh) consider Randall Munroe’s Thing Explainer. He strives to explain complicated stuff with pictures and a very small vocabulary. One review notes, “If you can’t explain something simply, you don’t really understand it.”

Sometimes we pick names in the hope they will become true. Just setting up a unit test project might encourage people to add unit tests. If you are unfortunate, they may add code that isn’t strictly a unit test, running off to a database and taking ages to complete. Clearly, ‘unit test’ is another technical term that can lead to fights for hours. Some tests are better than no tests, though. You have probably heard of nominative determinism: ‘people tend to gravitate towards areas of work that fit their names.’ [ND] Mr Baker, the baker, and so on. Many cultures attached a great significance to names. Children are given saints names, or called Hope or similar, as though you are imparting a magic power to them. Having never had kids, this is not a problem I’ve had to wrestle with. We do have a cat though, and he is called Vim; another area where technical and non-technical people might draw very different conclusions. You can’t call a cat emacs, as far as I’m concerned. Well, not in our house.

Finally, we sometimes end up with names or words begging to be used for something. I am glad to hear that Covfefe [Covfefe] has been applied to an Act to preserve Mr Trump’s tweets [Independent]. If you are stuck on a name for something, you might find you don’t have one coherent thing to name, so need to refactor, carving things up differently. Or if you can’t find a pronounceable acronym, perhaps you should draw on things you or your team love, including stories or food or drinks or something inspiring. If someone uses a term you think you understand, it might be worth clarifying to avoid talking at cross-purposes. Names can help to communicate, but can lead to misunderstanding and can convey a demographic which might make some feel excluded. Names give us power over things. We can talk about them more easily when we can identify them. We can also get in a muddle if the names are unclear. Cultural and contextual issues can add to our confusion. The essence of what we do is communication, to other programmers, rather than the machine; as Knuth said,

“Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.” [Knuth]

References

[Bluetooth] https://en.wikipedia.org/wiki/Harald_Bluetooth and https://en.wikipedia.org/wiki/Bluetooth

[Covfefe] https://english.stackexchange.com/questions/391945/what-does-covfefe-exactly-mean

[Gnome] https://www.gnome.org/ or https://en.wikipedia.org/wiki/Gnome

[Independent] ‘US politician introduces the Covfefe Act’, Emily Shugerman, June 2017 http://www.independent.co.uk/news/world/americas/us-politics/covefe-act-trump-twitter-bill-introduced-democrats-stop-president-deleting-tweets-a7786676.html

[Jingo] Jingo, Terry Pratchett, 1997.

[Knuth] Literate programming, 1992 (taken from http://www.literateprogramming.com/)

[Munin] http://munin-monitoring.org/ or https://en.wikipedia.org/wiki/Huginn_and_Muninn or indeed https://en.wikipedia.org/wiki/Hugin_and_Munin_(Marvel_Comics)

[ND] https://en.wikipedia.org/wiki/Nominative_determinism

[PT] https://www.powerthesaurus.org/editorial/antonyms – though I didn’t look very far.

[Stephenson] Neal Stephenson, Reamde, Atlantic Books, 2012.

[Sprite] https://en.wikipedia.org/wiki/Sprite_(computer_graphics) or https://en.wikipedia.org/wiki/Sprite_(entity)

Overload Journal #140 - August 2017 + Journal Editorial