Debunking the infamous “Only two hard problems in Computer Science”
As a software engineer, one of my favorite sayings has always been:
There are only two hard things in Computer Science: cache invalidation and naming things.
— Phil Karlton
Is it a joke, a truism, or both? The saying comes up fairly often during design (naming) and debugging why you have the wrong value (caching). With regards to naming, for example, browse through your Git repo and count the number of class names that end in Manager, Handler, or Helper. What exactly is the responsibility of these classes? (Guilty admission: I just created a new Handler class yesterday).
Not to mention the challenge with arriving on consistent, clear domain names for entities related to the actual capability you are trying to build. There is an entire book and discipline centered around the idea that building software is much easier if we simply use the same names for things throughout the documentation, design, code, and interfaces.
And then there is caching. Trying to make something faster before we know its slow is a favorite past time of engineers. Even those of us that learned this the hard way catch ourselves doing it sometimes. For an insightful and comic take on this…