I think using codenames are quite widespread. Our company is using them too.
But my main concern is these names are usually not documented anywhere. And the meaning is spread by the word of mouth. And the names have nothing to do with function of the tool or entity it's named.
I see the pattern that the internal test machines are named after constellations, Public facing servers are named after Greek gods. And projects are named after places or the name of some randomly chosen film star or character name. But no information directly available from the name whether the machines are Windows or Linux; 32 or 64 bit servers. Or what's the project about.
I just have a bad gut feeling when I see the commit message of the VCS that someone just branched the "Gandalf" project or the "Callanish" project or whatever project. Just for the same reason, you generally don't name your functions and variables like that.
I proposed that we should use more descriptive names, at least for the new entities, but I faced very strong opposition. Apparently everyone in the organization except me love naming stuff like that.
So why do we use non-descriptive codenames?
Don't get me wrong I have no problems naming program versions and milestones, or having a nice product name for marketing reasons. But all other places I would better like to see descriptive names.
To give you some context: Gandalf is project that ports the code 64 bit. Callanish is which ports it to Android... I'd rather call the former branch 64bitporting and the latter androidporting. Maybe a suffix attached to it denoting the target version we plan to ship it. So everyone would know by name what it is.
The servers in question are virtual machine images we test the product on... I don't know the physical machine it actually runs on though. So calling them windowsxp_32, windows7_64, debian_32 or solaris_64 is totally fine.