Also, notice how R, G, and B have a very clear meaning when put near "color"? Context is a thing our brain manages very well.
(let ((copy (copy-list list)))
(list copy 'copy 'let))
A 13 syllabic verse (7+6, with caesura)(but yes, you are right)
What has bitten me many times is accidentally overwriting a builtin function like max or len in python and then scratching my head about the strange errors that result from this.
The requirements which drive the preference for either are all valid. I, the designer, have simply taken both requirements and integrated them. Of course, requirements like, "I want to use list as a variable name without shadowing the lisp function" directly conflicts with "I want to reference functions and variables the same way without function or funcall". However the conflict can be confined down to the argument list of an individual form. I.e. "Sure, you can have both, just not in the argument list of the same form."
Doctor, it hurts when ...
This is not an easy problem to solve. For every "easy" example of a good name, one readily encounters an easy counterexample that renders the name ambiguous or unfit for a particular purpose.
Names must necessarily include context to be meaningful. If "name" is an unambiguous identifier in your scope and it's obvious what it does, great! Don't fix what isn't broken. But when you catch ambiguity or uncertainty, revisit the code, so future developers have an easier time understanding what you meant.
And this digs out a tangential problem - that often, "name" is as specific as you can get (or at least as specific as you should get) - http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-b....
When you're inside a function, dealing with very limited scoped variables, people get that.
People also 'get' attributes of classes and can grasp that context.
You know what's rational - that the 'length' of an array is just called 'length' :)
Anything else would be missing the point.
I have learned over many years that longer, highly readable and descriptive names make life extremely easier in the long run, at the expense of a few extra characters to type.
For example, in the case of "name" there are typically many different things that need a "name" in the same context. First name, last name, etc. "name" by itself (and other short names) is honestly asking for lots of headaches in the long run.
If you write SQL, you can disambiguate by table name prefix. If you iterate over result sets for example in python, you can easily be more specific on tuple destructuring time ("for personName, carName in ...").
When defining a table "Person", I consider it bad style to prefix all column names with "person". Btw this overzealous disambiguation falls flat as soon you do a self-join.
In real code, it's unwise to expect the reader to study context just to parse a name.
Is it "first name", "last name" or "full name"?
Is it a person's full name? legal name? first name? last name? nick name? desired call name? a company name? the name (alias) of the stored address?
http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-b...
If you're not you're definitely doing something wrong.
> (as a property of a person)
The original comment does not specify that it's "a property of a person". It could be a company, it could be a non-specific delivery address, etc...
Following this line of thinking, communication is impossible because everything is ambiguous.
And making everything as ambiguous as possible makes communication easier… how?
I will now end my concern about being downvoted and get a life. The discussion culture in this thread is mad.
Btw humans also have many names, depending on context. You might have had funny nicknames in your childhood, your friends speak to you by your first name, other might speak to you by your last name, others might call you "darling" etc... likewise it's also not totally uncommon to speak to babies by the handle "Baby", like "how are you doing Baby?".