For Luminis' magazine Conversing Worlds, I wrote a review of Douglas Hofstadter's Surfaces & Essences.
What, you haven't read Douglas Hofstadter's Gödel, Escher, Bach yet? Go ahead, read it first. I'll wait.
Hofstadter is one of those authors with an ever-clearer arc of thought over his many books. Trained as a cognitive scientist, he has been dealing the concept of "I" and "meaning" for the better part of his career. In GEB, he built up definitions of meaning from first principles and recursion.
In Surfaces and Essences, he goes deeper into what is means to "mean" something. What does "the same" mean? How fluid can analogies be? Is there something like pure meaning? Does language even get close?
The best example in the books works with the notion of being "the same." Consider the situation in the beginning of the year, when every time you write a date you accidentally write the previous year. Now consider the situation of changing your name (because of marriage). For the first few months, you'll likely introduce yourself with your "old" name. Why do we say these things are "similar"? When zooming in on every part of this example, there is no basis for calling them "the same," but deep within, we feel there is some "sameness" about them.
In this way, everyone has his own reality, his "essences." These essences "surface" in the use of words, phrases, figures of speech. Even though the essences are different, these are calibrated through repeated use and interaction with other people, until they are similar enough to enable useful communication.
This also means there is no such thing as the so-called Platonic ideal: Plato claimed that for every human concept--he uses the concept of a horse--there is an ideal, eternal notion of a horse, far more perfect than any horse that can be observed by humans. Because everyone's essences are different, these ideals cannot exist.
In programming, we are constantly building worlds in this exact same way. Very few of the things we talk about (objects, records, events) actually exist in the real world, and when we do talk about real things, we often have a different idea of what is meant by a given term. The essences of all the worlds we build overlap, but are still distinct. The surfaces we use for describing this world (terminology, names of variables, classes, methods) have to be chosen carefully to convey the correct meaning. And that, kids, is why naming is so important!
This is a hefty book, coming in at over 500 pages. It takes a long time and setup to get to the point of showing you what it actually means, but it's also one of those books that you'll really need to chew on. If you're even slightly interested in the concept of meaning, and don't back out of challenging yourself, pick up a copy, and at least show it off to your friends by leaving it on your desk!