C is often described, with a mixture of fondness and disdain
varying according to the speaker, as "a language that combines
all the elegance and power of assembly language with all the
readability and maintainability of assembly language".
[The overtones from the old Chevy Chase skit on Saturday Night Live
should not be overlooked. This was a "Jaws" parody.
Someone lurking outside an apartment door tries all kinds of bogus
ways to get the occupant to open up, while ominous music plays in
the background. The last attempt is a half-hearted "Candygram!"
When the door is opened, a shark bursts in and chomps the poor
occupant. There is a moral here for those attracted to
candygrammars. Note that, in many circles, pretty much the same
ones who remember Monty Python sketches, all it takes is the word
"Candygram!", suitably timed, to get people rolling on the
floor. --- GLS]
This word has an interesting history. Non-technical academics do
not use the adjective `canonical' in any of the senses defined
above with any regularity; they do however use the nouns `canon'
and `canonicity' (not **canonicalness or **canonicality). The
`canon' of a given author is the complete body of authentic works
by that author (this usage is familiar to Sherlock Holmes fans as
well as to literary scholars). `*The* canon' is the body of
works in a given field (e.g., works of literature, or of art, or of
music) deemed worthwhile for students to study and for scholars to
investigate.
The word `canon' derives ultimately from the Greek
`kanon'
(akin to the English `cane') referring to a reed. Reeds were used
for measurement, and in Latin and later Greek the word `canon'
meant a rule or a standard. The establishment of a canon of
scriptures within Christianity was meant to define a standard or a
rule for the religion. The above non-techspeak academic usages
stem from this instance of a defined and accepted body of work.
Alongside this usage was the promulgation of `canons' (`rules')
for the government of the Catholic Church. The techspeak usages
("according to religious law") derive from this use of the Latin
`canon'.
Hackers invest this term with a playfulness that makes an ironic
contrast with its historical meaning. A true story: One Bob
Sjoberg, new at the MIT AI Lab, expressed some annoyance at the
incessant use of jargon. Over his loud objections, GLS and RMS
made a point of using as much of it as possible in his presence,
and eventually it began to sink in. Finally, in one conversation,
he used the word `canonical' in jargon-like fashion without
thinking. Steele: "Aha! We've finally got you talking jargon
too!" Stallman: "What did he say?" Steele: "Bob just used
`canonical' in the canonical way."
Of course, canonicality depends on context, but it is implicitly
defined as the way *hackers* normally expect things to be.
Thus, a hacker may claim with a straight face that `according to
religious law' is *not* the canonical meaning of `canonical'.
The term `cargo cult' is a reference to aboriginal religions that
grew up in the South Pacific after World War II. The practices of
these cults center on building elaborate mockups of airplanes and
military style landing strips in the hope of bringing the return of
the god-like airplanes that brought such marvelous cargo during the
war. Hackish usage probably derives from Richard Feynman's
characterization of certain practices as "cargo cult science" in
his book "Surely You're Joking, Mr. Feynman" (W. W. Norton
& Co, New York 1985, ISBN 0-393-01921-7).
In some circles of EMACS users this is called `programming by
Meta-W', because Meta-W is the EMACS command for copying a block of
text to a kill buffer in preparation to pasting it in elsewhere.
The term is condescending, implying that the programmer is acting
mindlessly rather than thinking carefully about what is required to
integrate the code for two similar cases.
At DEC, this is sometimes called `clone-and-hack' coding.
Among UNIX fans, `cat(1)' is considered an excellent example
of user-interface design, because it delivers the file contents
without such verbosity as spacing or headers between the files, and
because it does not require the files to consist of lines of text,
but works with any sort of data.
Among UNIX haters, `cat(1)' is considered the canonical
example of *bad* user-interface design, because of its
woefully unobvious name. It is far more often used to blast a
file to standard output than to concatenate two files. The name
`cat' for the former operation is just as unintuitive as, say,
LISP's cdr.
Of such oppositions are holy wars made....
Historical note: The instruction format of the IBM 7090 that hosted
the original LISP implementation featured two 15-bit fields called
the `address' and `decrement' parts. The term `cdr' was originally
`Contents of Decrement part of Register'. Similarly, `car' stood
for `Contents of Address part of Register'.
The cdr and car operations have since become bases for
formation of compound metaphors in non-LISP contexts. GLS recalls,
for example, a programming project in which strings were
represented as linked lists; the get-character and skip-character
operations were of course called CHAR and CHDR.
Historical note: One correspondent believes `chad' (sense 2)
derives from the Chadless keypunch (named for its inventor), which
cut little u-shaped tabs in the card to make a hole when the tab
folded back, rather than punching out a circle/rectangle; it was
clear that if the Chadless keypunch didn't make them, then the
stuff that other keypunches made had to be `chad'.
A hand gesture commonly accompanies this. To perform it, hold the
four fingers together and place the thumb against their tips. Now
open and close your hand rapidly to suggest a biting action (much
like what Pac-Man does in the classic video game, though this
pantomime seems to predate that). The gesture alone means `chomp
chomp' (see "[Verb Doubling]" in the "[Jargon
Construction}" section of the Prependices). The hand may be
pointed at the object of complaint, and for real emphasis you can
use both hands at once. Doing this to a person is equivalent to
saying "You chomper!" If you point the gesture at yourself, it
is a humble but humorous admission of some failure. You might do
this if someone told you that a program you had written had failed
in some surprising way and you felt dumb for not having anticipated
it.
An analogous construction is sometimes applied elsewhere: thus,
`X Classic', where X = Star Trek (referring to the original TV
series) or X = PC (referring to IBM's ISA-bus machines as opposed
to the PS/2 series). This construction is especially used of
product series in which the newer versions are considered serious
losers relative to the older ones.
`Foo factor' and `foo quotient' tend to describe something for
which the issue is one of presence or absence. The canonical
example is fudge factor. It's not important how much you're
fudging; the term simply acknowledges that some fudging is needed.
You might talk of liking a movie for its silliness factor.
Quotient tends to imply that the property is a ratio of two
opposing factors: "I would have won except for my luck quotient."
This could also be "I would have won except for the luck factor",
but using *quotient* emphasizes that it was bad luck
overpowering good luck (or someone else's good luck overpowering
your own).
`Foo index' and `coefficient of foo' both tend to imply
that foo is, if not strictly measurable, at least something that
can be larger or smaller. Thus, you might refer to a paper or
person as having a `high bogosity index', whereas you would be less
likely to speak of a `high bogosity factor'. `Foo index' suggests
that foo is a condensation of many quantities, as in the mundane
cost-of-living index; `coefficient of foo' suggests that foo is a
fundamental quantity, as in a coefficient of friction. The choice
between these terms is often one of personal preference; e.g., some
people might feel that bogosity is a fundamental attribute and thus
say `coefficient of bogosity', whereas others might feel it is a
combination of factors and thus say `bogosity index'.
Alternatives to verb doubling include suffixes `-o-rama',
`frenzy' (as in feeding frenzy), and `city' (examples: "barf
city!" "hack-o-rama!" "core dump frenzy!"). Finally, note
that the American terms `parens', `brackets', and `braces' for (),
[], and [] are uncommon; Commonwealth hackish prefers
`brackets', `square brackets', and `curly brackets'. Also, the
use of `pling' for bang is common outside the United States.
See also attoparsec, calculator, chemist,
console jockey, fish, go-faster stripes,
grunge, hakspek, heavy metal, leaky heap,
lord high fixer, loose bytes, muddie, nadger,
noddy, psychedelicware, plingnet, [raster
blaster}, RTBM, seggie, spod, sun lounge,
terminal junkie, tick-list features, weeble,
weasel, YABA, and notes or definitions under [Bad
Thing}, barf, bogus, bum, chase pointers,
cosmic rays, crippleware, crunch, dodgy,
gonk, hamster, hardwarily, mess-dos,
nybble, proglet, root, SEX, tweak, and
xyzzy.
(A closely related phenomenon, with a slightly different intent, is
the habit manufacturers have of inventing new screw heads so that
only Designated Persons, possessing the magic screwdrivers, can
remove covers and make repairs or install options. Older Apple
Macintoshes took this one step further, requiring not only a hex
wrench but a specialized case-cracking tool to open the box.)
In these latter days of open-systems computing this term has fallen
somewhat into disuse, to be replaced by the observation that
"Standards are great! There are so *many* of them to choose
from!" Compare backward combatability.
In LISP itself, `cons' is the most fundamental operation for
building structures. It takes any two objects and returns a
`dot-pair' or two-branched tree with one object hanging from each
branch. Because the result of a cons is an object, it can be used
to build binary trees of any shape and complexity. Hackers think
of it as a sort of universal constructor, and that is where the
jargon meanings spring from.
Melvin Conway, an early proto-hacker who wrote an assembler for the
Burroughs 220 called SAVE. The name `SAVE' didn't stand for
anything; it was just that you lost fewer card decks and listings
because they all had SAVE written on them.
Factual note: Alpha particles cause bit rot, cosmic rays do not
(except occasionally in spaceborne computers). Intel could not
explain random bit drops in their early chips, and one hypothesis
was cosmic rays. So they created the World's Largest Lead Safe,
using 25 tons of the stuff, and used two identical boards for
testing. One was placed in the safe, one outside. The hypothesis
was that if cosmic rays were causing the bit drops, they should see
a statistically significant difference between the error rates on
the two boards. They did not observe such a difference. Further
investigation demonstrated conclusively that the bit drops were due
to alpha particle emissions from thorium (and to a much lesser
degree uranium) in the encapsulation material. Since it is
impossible to eliminate these radioactives (they are uniformly
distributed through the earth's crust, with the statistically
insignificant exception of uranium lodes) it became obvious that
one has to design memories to withstand these hits.
Use of both these neologisms reflects a strong revulsion against
the theft and vandalism perpetrated by cracking rings. While it is
expected that any real hacker will have done some playful cracking
and knows many of the basic techniques, anyone past [larval
stage} is expected to have outgrown the desire to do so except for
immediate practical reasons (for example, if it's necessary to get
around some security in order to get some work done).
Thus, there is far less overlap between hackerdom and crackerdom
than the mundane reader misled by sensationalistic journalism
might expect. Crackers tend to gather in small, tight-knit, very
secretive groups that have little overlap with the huge, open
poly-culture this lexicon describes; though crackers often like to
describe *themselves* as hackers, most true hackers consider
them a separate and lower form of life.
Ethical considerations aside, hackers figure that anyone who can't
imagine a more interesting way to play with their computers than
breaking into someone else's has to be pretty losing. Some
other reasons crackers are looked down on are discussed in the
entries on cracking and phreaking. See also
samurai, dark-side hacker, and [hacker ethic,
the}.
The term is actually the lowercased last name of Seymour Cray, a
noted computer architect and co-founder of the company. Numerous
vivid legends surround him, some true and some admittedly invented
by Cray Research brass to shape their corporate culture and image.
An excellent example of crippleware (sense 3) is Intel's 486SX
chip, which is a standard 486DX chip with the co-processor dyked
out (in some early versions it was present but disabled). To
upgrade, you buy a complete 486DX chip with *working*
co-processor (its identity thinly veiled by a different pinout) and
plug it into the board's expansion socket. It then disables the
SX, which becomes a fancy power sink. Don't you love Intel?
This term is one of the oldest in the jargon and no one is sure of
its etymology, but it is suggestive that there is a Cruft Hall at
Harvard University which is part of the old physics building; it's
said to have been the physics department's radar lab during WWII.
To this day (early 1993) the windows appear to be full of random
techno-junk. MIT or Lincoln Labs people may well have coined the
term as a knock on the competition.
All of these usages reflect physical processes in obsolete
recording and duplication technologies. The first stage in
manufacturing an old-style vinyl record involved cutting grooves in
a stamping die with a precision lathe. More mundanely, the
dominant technology for mass duplication of paper documents in
pre-photocopying days involved "cutting a stencil", punching away
portions of the wax overlay on a silk screen. More directly,
paper tape with holes punched in it was an important early storage
medium.
Since 1990 or so, popular culture has included a movement or
fashion trend that calls itself `cyberpunk', associated especially
with the rave/techno subculture. Hackers have mixed feelings about
this. On the one hand, self-described cyberpunks too often seem to
be shallow trendoids in black leather who have substituted
enthusiastic blathering about technology for actually learning and
*doing* it. Attitude is no substitute for competence. On the
other hand, at least cyberpunks are excited about the right things
and properly respectful of hacking talent in those who have it.
The general consensus is to tolerate them politely in hopes that
they'll attract people who grow into being true hackers.