Avoid Mental Mapping
Readers shouldn't have to mentally translate your names into other names they already know. This
problem generally arises from a choice to use neither problem domain terms nor solution domain terms.
This is a problem with single-letter variable names. Certainly a loop counter may be named i or j or k
(though never l!) if its scope is very, very small and no other names can conflict with it. These are
allowable because those are traditional solution-domain names. But generally, a single letter name
stands for something else, or else has no meaning at all. There can be no worse reason for using the
name 'c' than because a and b were already taken.
This has been a a problem with really smart programmers who can manipulate more than the standard
7-plus-or-minus-two symbols easily in their heads. They map so easily among twelve or fifteen
arbitrarily-named objects that they can't image anything easier than the simple fact that r is the lowercased
version of the url with the host and scheme removed.
Smart is overrated. Clarity is king. The very smart must use their talent to write code that others are
less likely to misunderstand.