  The names of variables and functions serve as implicit documentation and are
instrumental for program comprehension. But choosing good meaningful names is
hard. We perform a sequence of experiments in which a total of 334 subjects are
required to choose names in given programming scenarios. The first experiment
shows that the probability that two developers would select the same name is
low: in the 47 instances in our experiments the median probability was only
6.9%. At the same time, given that a specific name is chosen, it is usually
understood by the majority of developers. Analysis of the names given in the
experiment suggests a model where naming is a (not necessarily cognizant or
serial) three-step process: (1) selecting the concepts to include in the name,
(2) choosing the words to represent each concept, and (3) constructing a name
using these words. A followup experiment, using the same experimental setup,
then checked whether using this model explicitly can improve the quality of
names. The results were that names selected by subjects using the model were
judged by two independent judges to be superior to names chosen in the original
experiment by a ratio of two-to-one. Using the model appears to encourage the
use of more concepts and longer names.
