Naming is a hard problem

There is this saying that computer science has only two hard problems, naming and cache invalidation (also, off-by-one errors).

Off-by-one errors one can catch with automated tests.

Cache invalidation is a hard problem. Any system with delays is both hard to reason about and hard to test.

But how about naming, how do you get better at it? Do you practice naming your entities? Are there systematic approaches to do it in more repeatable fashion?