One could argue that naming things is the hardest problem in programming. I honestly disagree. Naming gets harder when the concept behind it increases in complexity, it’s a one to one relationship. One doesn’t come up with AbstractSingletonProxyFactoryBean
while working in a simple concept. Whether the complexity is inherent to the problem or raised by the programmer is another topic itself, the fact is that naming is as hard as the concepts behind it.