All of the comments on and objections to the use of CIDTs of
keyword-parameter values were interesting, and some of them were
drôle.

The notion that coding say action=C instead of action=cancel is
justified|justifiable if a comment explaining that C really means
CANCEL is provided is, I think, self-defeating.  If it is required,
action=CANCEL should certainly be coded instead.

I must again express a very different view.  The notion that code
should be self-documenting is and always has been chimerical.  It
should be lucid.  Indeed, E. B. White's prescription for good
[English-language] prose, that it should exhibit "lucidity, force, and
ease", is equally applicable to statements in programming languages.

Macro definitions should nevertheless be documented.  It is my own
practice to include a section called 'coding GUBBINS macro
definitions' in a GUBBINS macro definition.  This section explains the
uses of it [chiefly] keyword parameters, the conventions available
for coding them, the kinds of errors, often at boundary values, that
can be made in coding them, and (where it is appropriate) a
left-recursive BNF definition of the relevant
syntax.

As this practice suggests, it is my view that non-trivial macros and
code in general are not at all self-documenting.  Perspicuous names
can make them easier to use than they would otherwise be, but clear
documentation is always needed.

Worse, attempts to dispense with such documentation are ill-advised.
COBOL is the notorious example of an attempt to make a programming
language self-documentating.  The attempt failed abjectly, with
pernicious side effects because prolixity was misidentified with
clarity.

Let me also say something about what Peter Relson calls "explicit
abbreviations".  I detest them as much as he likes them, and for two
reasons.

First, they are arbitrary and ad hoc; and ugly ad hoc, special-casing
code is required to implement them.

Second, they are too often culture-dependent.  I can speak and write
either British or American English unmixed.  Most people cannot and do
not need to do so, and they are thus unaware that these two very
similar dialects have different abbreviation conventions.  Worse,
references that are obvious in one language community may be opaque or
ambiguous in another.   I still recall with pain a long discussion
with an English-speaking Italian operator in Milano.  The 'z EOD' for
'halt EOD' abbreviation puzzled him.  It seemed entirely unmotivated,
even though he was aware that 'z' was the last letter of the English
(and indeed of the Italian) alphabet.  The figurative use of 'z' to
mean the end of something other than an alphabet nevertheless eluded
him.  This puzzled me, and I decided to conduct a small experiment.
Knowing that he was a graduate of what Italians call a liceo classico
and had thus studied ancient Greek I asked him if replacing 'z' by
'ω', omega, the last letter of the Greek alphabet, would
hypothetically be more perspicuous for him; and his immediate answer
was yes.  He was familiar with the locution "from alpha to omega" as a
description of "the complete range", "all possible values", and the
like in three languages.

It would be easy to multiply examples of this kind, but I have made my
point even to those who disagree with it.  Arbitrary abbreviations are
often tone-deaf to culture and class differences.  (Quite stupid
upper-class Americans know what a regatta is; brilliant working-class
ones usually do not.)

Consensus is not likely to emerge from these discussions, but they
were not time-wasting.

John Gilmore, Ashland, MA 01721 - USA

Reply via email to