naming is hard

Software engineers use convergent thinking

As software engineers, we engage in a type of thinking called “convergent thinking”. According to wikipedia this is:

[A] type of thinking that focuses on coming up with the single, well-established answer to a problem.

In code we have many different names for this, but they all boil down to the same thing: convergent thinking.

But we don’t call it ‘convergent thinking’, instead we call it:

  • Abstractions; finding a common way to represent differing constructs or constraints.
  • Patterns; reusable design structures that allow us to find commonality between problems.

Ultimately it’s taking two things that are different, and finding their commonality such that a single, existing, and well defined solution can be applied to them.

Divergent thinking is the opposite

Divergent thinking is the opposite to convergent thinking. Convergent thinking wants to “converge” on a single solution, Divergent thinking wants to expand and spread into different ideas.

Divergent thinking is the opposite of the type of problem solving that software engineers engage in on a day to day basis. Because divergent thinking is not used often, it’s a muscle that’s not trained as often, and isn’t as strong.

We don’t practice divergent thinking.

Naming requires divergent thinking

Naming is hard because it requires divergent thinking. You are engaging in divergent thinking every time you end up on looking for a synonym of the ’thing’ you are trying to name. But we are not as good at it, because we don’t do it often.

Thus; naming is hard.