“Naming Things is Hard”
I’ve lost count of the times I’ve heard that “Naming things is hard.” This is said very often in the world of software development. So I wanted to take the time to address it.
First of all this statement “Naming things is hard.” is a misnomer (a wrong or inaccurate name or designation, or use of a name or term) which makes it ironic.
Those who say this phrase aren’t being literal about it but have a meaning other than what is stated here. What is more likely intended to be said is that coming up with a name that has meaning for this situation or purpose takes a lot of consideration. It is meant to express the perceived difficulty of the one saying it when they put a lot of thought into producing a meaningful name.
If we think about the phrase on it’s own in a literal sense then we can identify that it’s simply not true. The act of naming something is simple, I can call a rock a paper weight and have given it a name. I can likewise throw together some random sounds and call it by that. The difficulty is not in the name, but in providing and conveying meaning.
This comes from a broader truth about communication being difficult, or if we’re to use the misnomer “Communication is hard”. When we communicate with others we work with the vocabulary that is common between us. If we fail to do this one thing the communication breaks down and proper meaning isn’t conveyed. This is true with any form of knowledge which is to be communicated.
Words can have different meanings in different contexts and anyone on the receiving end of the communication needs to have an understanding, or it be reasonably within their grasp of understanding, the same meaning and context of the one communicating. It’s a worldview — the lens by which a person sees and perceives all things; and a person is capable of grasping multiple worldviews. A persons own worldview tends to determine the meaning and the weight-of-that-meaning in all they hear and see. When worldviews differ it takes a higher level of maturity to truly seek to understand the worldview of others communicating with you to see things as they see it.
Lets bring our focus back in a bit away from the broader picture. The word anxious has two polar opposite emotions it can entail within the same context. So when I’d spoken to being anxious, and I’ve always said it as a very good thing, it surprised me to see in others a show of concern with the use of that word. “What we have here is a failure to communicate.” When even the same words we use to communicate with have very different meanings then meaningful communication becomes difficult indeed.
So how can we get better at communicating meaning and intent when naming things? The simple answer is to read more. Glean from lots of other books, blogs, or the like to absorb knowledge of contexts and the scope of smaller to greater meanings. Writers become good writers after much reading (and admittedly much practice). Beyond reading you should endeavor to communicate with more people with a focus on where they’re coming from (seeing things from their point of view). And if something’s not clear; ask questions.
In any area of research things have been named and classified into categories, domains, classifications, etc. In programming one of the first things you learn is syntax. It’s how you make sense of the small parts of code written together. As you mature as a developer you learn of patterns which entail larger pieces of code and how it may work together. Patterns are specific disciplines in code design that are applicable in many other instances. When a pattern is given a name and that name is shared amongst a community you have successfully conveyed meaning and the idea of it is more easily communicated simply by its name. When a name invokes the fully formed idea in a persons mind it carries the most meaning.
Ideas are powerful!
When you learn and come to understand a new “concept” you become able to recognize it in places where you may have not realized such a thing was before. Playing in the game of chess there are many moves that can be made. Think of this as the basics. Then there are specific situations given a name as to convey the situation or a strategy. Kind of like a pattern.
In chess when you line up a Bishop so that it threatens two pieces, one of them being a King, you could be in one of three possible patterns. Your Bishop could be forking the two pieces (a direct threat in two different directions), you could be pinning a piece (threatening a piece with the King directly behind it), or you could be using a skewer (the King is in check and once he moves out of the way you can take the piece behind him). Just knowing these names and the meaning they convey in a chess game will help you be a better chess player. Since now your mind has a frame of reference for opportunities to look for and to take advantage of. I’ve played chess for many years without ever knowing about the term skewer, and once I learned about it my mind was able to better strategize about how I may create such a situation.
If you haven’t previously been exposed to an idea then it’s more likely to “go over your head”. Two Mormons visited me not that long ago and at one point the older of them subtly suggested that they were late for their next meeting. The younger one furrowed his brows and said “I don’t think so” then checked his schedule and said “Nope, we’re free the rest of the day.” To which the more experienced one answered “What do I know, I’m the amateur here.” I caught the hint but the younger lad did not. It’s likely he’s not privy to that lingo yet.
Life is a long adventure with endless amounts of things we can learn about and be all the better for it. You can’t knowingly apply something to your life if you have no idea about it. To become better at naming with meaning you need to better understand the language you use, both the spoken language and the programming language (or whatever subject domain you wish to give names in).
When naming things — keeping things simple at first is my recommended approach. You only know what you know so how might you explain it to a young child? That should be a better approach if you haven’t yet attained a higher understanding in the domain of language. Sometimes it’s helpful to just give a non-meaningful name for now and as you build your application around it and use it it may start to hold a meaning you can give a name to. At that point you can refactor the name.
I’ve always wanted to name something “flibbertigibbet”. This may perhaps be a delightful name for a logger object. The next random thing that comes to my mind is “Green Eggs and Ham”. Imagine if Dr. Seuss was naming your methods… what might your program look like? Have fun with it if it’s your own work. Maybe tone it down a bit if you’re working with others 😉.
In summary I believe naming things is easy. Conveying meaning may take a little more thought, but this is a learned skill by practice. So make this a topic of conversation and discuss specific naming scenarios. Try talking to your rubber ducky if you’d like. You’ll be practicing conveying meaning in the process and you’ll be the better for it.
Read a bunch! I mean it. The more you expand your vocabulary the more you’ll gain understanding in conveying meaning.
Learn foreign languages. When you learn foreign languages it’s similar to upgrading from studying syntax to identifying patterns. Admittedly this is a much longer path to improve yourself. But you may end up inventing a language and become the next J. R. R. Tolkien.
-Daniel P. Clark