Very few software designs are compact in an absolute sense, but
many are compact in a slightly looser sense of the term. They have a
compact working set, a subset of capabilities that suffices for 80% or
more of what expert users normally do with them. Practically
speaking, such designs normally need a reference card or cheat sheet
but not a manual. We'll call such designs
semi-compact, as opposed to strictly
compact.
The Magical Number Seven, Plus or Minus Two: Some
Limits on Our Capacity for Processing Information [Miller] is one of the foundation papers in cognitive
psychology (and, incidentally, the specific reason that U.S.
local telephone numbers have seven digits). It showed that the number
of discrete items of information human beings can hold in
short-term memory is seven, plus or minus two. This gives us a good
rule of thumb for evaluating the compactness of APIs: Does a
programmer have to remember more than seven entry points? Anything
larger than this is unlikely to be strictly compact.
Among Unix tools,
make(1)
is compact;
autoconf(1)
and
automake(1)
are not. Among markup languages, HTML is semi-compact, but DocBook (a
documentation markup language we shall discuss in Chapter18) is not. The
man(7)
macros are compact, but
troff(1)
markup is not.