The importance of common language
In order to see things, it is important to have words to describe them. Words are how our brains categorize and store knowledge.
I was reading the book "Thinking in Systems" and I came across the following quote:
The author is talking about how people often ignore the larger systems at work in our lives because they don't have the words to describe them. So people focus on individual people and actions and ignore the system. It's still there, they just literally can't see it. Once you give them the vocabulary to talk about it and describe it, that's when it literally comes into existence for them.
Patterns
As soon as I read that I immediately thought of the Gang Of Four book. In it, the authors layout the case for developing a common vocabulary so that we can exchange ideas. Part of it is that giving names to things then allows us to not only have conversations about them, but also allows us to then be able to identify them in the wild. People were using these patterns long before they had names, but they were hard to recognize. Once we come up with names it's much easier to look at a piece of code and say "Oh that's using the command pattern or the decorator pattern". That makes it a lot easier to reason about what is going on.
There are a bunch other patterns that we use in software. There's the XUnit Test Patterns book, and the Common Refactorings and Code Smells from Fowler's refactoring book. There are also a whole bunch of acronyms like SOLID, YAGNI and SMORES. These all help to provide us with some common language. It helps us to see things that were always there, but that we might have been missing.
A Neuroscience Perspective.
The other book that immediately popped into my mind, was On Intelligence. It's a book about AI written by a neuroscientist. One of my main takeaways from that book is that our human brains act as pattern matchers. We are constantly looking for patterns and trying to put them into boxes. Those boxes are linked to language. If we don't have a word for something, there is literally no box for it to fit into in our brain, so we literally don't see it. The information comes into our brain, but we don't recognize it so we just ignore it as if it doesn't exist. Creating words to describe a thing is giving our brains a box to put that pattern in.
The Jeep syndrome
A more practical example that most people can relate to is what I call, the Jeep syndrome. Suppose you've never owned a Jeep and you go out and buy one. Now all of a sudden you notice Jeeps everywhere. The truth is there aren't suddenly more Jeeps driving around on the road, you are just more in tune to it. When we give something a name, we help our brain tune into it. We create that box in our brain that we start filling every time we see the pattern.
Action Items
So what is the takeaway from all this?
For software development
In software development I think they key is to educate yourself. Read the Gang of Four and Fowler's Refactoring and some of the other classics out there. Become aware of the patterns and see how often you can identify them in the wild. Engage in conversations with other developers and share your knowledge. Try to name what you are doing. Try to be precise with your language. See if you can pick up on some of the patterns in what you are doing and name them.
For society
These ideas apply not just to software development, but to society in general. There are a lot of societal problems that we simply don't talk about because we don't have the vocabulary. The task is to educate yourself and gain that vocabulary and then have those difficult conversations. The problems will never get solved unless we talk about them, but we can't talk about them without some shared vocabulary. Read books on social justice like "How to Be an AntiRacist" or "The New Jim Crow" or books on industrialism versus the participation such as "Rehumanizing the WorkPlace" and then have those difficult conversations.