There are only two hard things in Computer Science: cache invalidation and naming things.
— Phil Karlton
Lets hold on to cache invalidation for another post…
Naming things (or should I say labeling them…) is a very hard problem.
Why is it a hard problem?
Consider this, imagine you are building a piece of IKEA furniture. You get all the pieces in the box and you have to put them together. Now imagine that all the pieces had a succinct description that you used to put them together. Now imagine that you couldn’t see or feel the pieces and all you had to work with were these descriptions.
What about if you were creating new furniture pieces and putting them together? You would need some consistency in your succinct descriptions otherwise you wouldn’t be able to tell what fits with what.
For instance if you were describing the front and back leg of your couch, and the descriptions were completely different, if you changed a subtle detail in the vanir, it wouldn’t be obvious what other pieces needed to change. On the other hand, if the descriptions were identical, it wouldn’t be clear the the pieces were mirror image of each other.
How do we achieve that level of consistency without over generalizing? The answer is as you may expect, very carefully. Why do you think software engineers make so much money?
A large portion of any software engineers day is spent deciding what to call this or that, and whether a name still describes a piece that has changed. Automate the solution to that problem and you’re a great deal closer to creating a robotic software engineer.