2 November 2006
1: a new word, usage, or expression.
2: a meaningless word coined by a psychotic.
If you read much of my writing you'll quickly notice that I am a compulsive neologiser. I'm always looking to come up with new words and phrases, indeed this bliki is designed around this habit.
I do it because much of what I try to write about is the tricky subject of software design, where our vocabulary is limited and often confusing. As I see concepts that are little-known or oft-misunderstood, I try to give them a name so they are easier to talk about. Developing a domain-specific jargon is often criticized for being exclusionary, but as Kathy Sierra points out, such a jargon makes communication much more efficient and interesting.
Nelogising is something I share with the broader pattern movement. From the very beginning the patterns community has put a lot of energy figuring how best to name the patterns they describe.
Naming a pattern immediately increases our design vocabulary. It lets us design at a higher level of abstraction. Having a vocabulary for patterns lets us talk about them with our colleagues, in our documentation, and even to ourselves. It makes it easier to think about designs and to communicate them and their trade-offs to others. Finding good names has been one of the hardest parts of developing our catalog.
-- The Gang of Four
Of course there are downsides to trying to create this kind of vocabulary. It does become a jargon which, while aiding communication for those who know it, also excludes those who don't. On the whole I feel that the benefits win out.
Choosing good words, whether for my more permanent patterns or just for these bliki entries is a hard task. I spend a lot of time trying to think of how words will work, looking something that is an evocative name, doesn't get confused with existing terms, and is reasonably short (and ideally catchy).
Creating completely new terms is what gets the attention, but its actually something I'd rather not do. I prefer to use an existing term if there's one available. After all that's less effort. I then balance it with its common usages to see how well it fits the concept I'm talking about. Sometimes this results in making a change, for instance my resistance to using InversionOfControl to describe what was going on with dependency injection. I always find this a hard decision - it's much better to use the existing term if it fits, but often the existing term has a diffuse meaning and I need something crisper.
I have been accused of being to quick to neologise, that perhaps reflects my preference for unfamiliar but precise terms over well known but fuzzy language.
Of course the limitation of this is that there's no way for me, or any group of patterns writers, to standardize the vocabulary of everyone. The terms I use often don't get the most currency. That's understandable, but it doesn't stop me. I find that if without a consistent vocabulary I can't write clearly, even if that vocabulary is only consistent for me. So my fundamental reason is selfish, I develop a consistent vocabulary because I need one.
I find it odd that you run into the occasional accusation that this is done for some kind of material gain. I've never seen anyone make money from coining terms, otherwise Rebecca, Josh and I would be idling on an island from POJO and Jesse James Garrett would have bought an island from Ajax. Indeed most people who use the term probably don't know who came up with POJO, and that's just fine with me.
Neologising is something I did a lot before I became a software writer, although my earlier activity was quite different, and something many people do. This is using domain modeling to build up a UbiquitousLanguage to create communication between developers and their customers. It's a different activity with a much narrower audience. Many projects do it, and even those who don't create a language in their code to describe the domain, even if it isn't shared with non-geeks.
Despite these differences, both activities share the desire to speak with brevity and precision about some domain. In either case I neologise because I find these words are useful tools that helps me enormously in understanding a domain. I use them publicly because I believe that the tools that help me can be useful to others too.