Greenspun's tenth rule of programming is an
aphorism
An aphorism (from Greek ἀφορισμός: ''aphorismos'', denoting 'delimitation', 'distinction', and 'definition') is a concise, terse, laconic, or memorable expression of a general truth or principle. Aphorisms are often handed down by tra ...
in
computer programming
Computer programming or coding is the composition of sequences of instructions, called computer program, programs, that computers can follow to perform tasks. It involves designing and implementing algorithms, step-by-step specifications of proc ...
and especially
programming language
A programming language is a system of notation for writing computer programs.
Programming languages are described in terms of their Syntax (programming languages), syntax (form) and semantics (computer science), semantics (meaning), usually def ...
circles that states:
Overview
The rule expresses the opinion that the argued flexibility and
extensibility
Extensibility is a software engineering and systems design principle that provides for future growth. Extensibility is a measure of the ability to extend a system and the level of effort required to implement the extension. Extensions can be t ...
designed into the programming language
Lisp
Lisp (historically LISP, an abbreviation of "list processing") is a family of programming languages with a long history and a distinctive, fully parenthesized Polish notation#Explanation, prefix notation.
Originally specified in the late 1950s, ...
includes all functionality that is theoretically needed to write any complex computer program, and that the features required to develop and manage such complexity in other programming languages are equivalent to some subset of the methods used in Lisp.
Other programming languages, while claiming to be simpler, require programmers to reinvent in a haphazard way a significant amount of needed functionality that is present in Lisp as a standard, time-proven base.
It can also be interpreted as a satiric critique of systems that include complex, highly configurable sub-systems. Rather than including a custom
interpreter
Interpreting is translation from a spoken or signed language into another language, usually in real time to facilitate live communication. It is distinguished from the translation of a written text, which can be more deliberative and make use o ...
for some
domain-specific language
A domain-specific language (DSL) is a computer language specialized to a particular application domain. This is in contrast to a general-purpose language (GPL), which is broadly applicable across domains. There are a wide variety of DSLs, ranging ...
, Greenspun's rule suggests using a widely accepted, fully featured language like Lisp.
Paul Graham also highlights the satiric nature of the concept, albeit based on real issues:
The rule was written sometime around 1993 by
Philip Greenspun
Philip Greenspun (born September 28, 1963) is an American computer scientist, educator, early Internet entrepreneur, and pilot who was a pioneer in developing online communities like photo.net.
Biography
Greenspun was born on September 28, 1 ...
. Although it is known as his tenth rule, this is a misnomer. There are in fact no preceding rules, only the tenth. The reason for this according to Greenspun:
Hacker
A hacker is a person skilled in information technology who achieves goals and solves problems by non-standard means. The term has become associated in popular culture with a security hackersomeone with knowledge of bug (computing), bugs or exp ...
Robert Morris later declared a
corollary
In mathematics and logic, a corollary ( , ) is a theorem of less importance which can be readily deduced from a previous, more notable statement. A corollary could, for instance, be a proposition which is incidentally proved while proving another ...
, which clarifies the set of "sufficiently complicated" programs to which the rule applies:
This corollary jokingly refers to the fact that many Common Lisp implementations (especially those available in the early 1990s) depend upon a low-level core of compiled
C, which sidesteps the issue of
bootstrapping
In general, bootstrapping usually refers to a self-starting process that is supposed to continue or grow without external input. Many analytical techniques are often called bootstrap methods in reference to their self-starting or self-supporting ...
but may itself be somewhat variable in quality, at least compared to a cleanly
self-hosting Common Lisp.
See also
*
Inner-platform effect
The inner-platform effect is the tendency of software architects to create a system so customizable as to become a replica, and often a poor replica, of the software development platform they are using. This is generally inefficient and such syst ...
*
Software Peter principle
*
Turing tarpit
A Turing tarpit (or Turing tar-pit) is any programming language or computer interface that allows for flexibility in function but is difficult to learn and use because it offers little or no support for common tasks. The phrase was coined in 198 ...
*
Zawinski's law of software envelopment
References
{{Lisp programming language
Computer architecture statements
Lisp (programming language)
1993 neologisms
Programming language folklore
Computer programming folklore
Software engineering folklore
C (programming language) software
Fortran software
Aphorisms