Code Complete has a section on this. But we don't have a precise understanding of what a "good name" is, for the same reason that we don't have a precise understanding of what a "good song" is: the goodness of a name is measured by its effect on its reader.
So I think the high-level principle, if you want to do a good job naming things in your program, is to model your intended reader as precisely as you can. What do they know about the problem domain? What programming conventions are they familiar with? Why are they reading your program--what matters to them? These concerns will inform your formatting and commenting style as well.
When you draw these distinctions you will exclude some people. That's normal. You shouldn't feel badly about that, any more than Thomas Mann felt bad that Chinese speakers had to learn German before they could read Der Zauberberg. If your work is influential enough, someone will translate or annotate it. And unlike a novel, most programs are read only by a small circle anyway.
If you want concrete advice instead of philosophy, this c2 page includes some useful tips.
But we don't have a precise understanding of what a "good name" is, for the same reason that we don't have a precise understanding of what a "good song" is: the goodness of a name is measured by its effect on its reader.
I'm not sure whether I buy that argument. It would be quite possible to go out and study naming in the real world and study problems that arise and what goes well.
If it's worth saying, but not worth its own post (even in Discussion), then it goes here.
Notes for future OT posters:
1. Please add the 'open_thread' tag.
2. Check if there is an active Open Thread before posting a new one. (Immediately before; refresh the list-of-threads page before posting.)
3. Open Threads should be posted in Discussion, and not Main.
4. Open Threads should start on Monday, and end on Sunday.