Greenspun's Tenth Rule
Encyclopedia
Greenspun's tenth rule of programming is an aphorism
in computer programming
and especially programming language circles that states:
This expresses the opinion that the perceived flexibility and extensibility
designed into the Lisp programming language
includes all functionality that is theoretically necessary to write a complex computer program, and that the core implementations of other programming languages often do not supply critical functionality necessary to develop complex programs.
. Although it is known as his tenth rule, there are in fact no preceding rules, only the tenth. The reason for this according to Greenspun:
s that compiler
s of other languages create internally. As a homoiconic
language, Lisp also makes no distinction between code and data; Lisp programs are themselves just Lisp data structures. Lisp programs can thus generate additional Lisp programs themselves via macros. As a result, the programmer can construct complex domain specific languages with relative ease. Lisp advocates such as Paul Graham
claim that this allows faster construction of more robust software compared to other languages. Greenspun's Rule expresses the opinion that these capabilities are necessary for any complex software package, and so will be redesigned from scratch in an ad hoc manner in any large project, duplicating effort already exerted in Common Lisp.
Robert Morris later added the corollary
:
This can be viewed as a commentary on the difficulty of creating an efficient implementation of the large and complex Common Lisp language, or simply a joke about Lisp's eval function. Both Greenspun's rule and Morris's corollary are examples of a characteristic style of hacker humor
known as "ha ha only serious".
Aphorism
An aphorism is an original thought, spoken or written in a laconic and memorable form.The term was first used in the Aphorisms of Hippocrates...
in computer programming
Computer programming
Computer programming is the process of designing, writing, testing, debugging, and maintaining the source code of computer programs. This source code is written in one or more programming languages. The purpose of programming is to create a program that performs specific operations or exhibits a...
and especially programming language circles that states:
This expresses the opinion that the perceived flexibility and extensibility
Extensibility
In software engineering, extensibility is a system design principle where the implementation takes into consideration future growth. It is a systemic measure of the ability to extend a system and the level of effort required to implement the extension...
designed into the Lisp programming language
Lisp programming language
Lisp is a family of computer programming languages with a long history and a distinctive, fully parenthesized syntax. Originally specified in 1958, Lisp is the second-oldest high-level programming language in widespread use today; only Fortran is older...
includes all functionality that is theoretically necessary to write a complex computer program, and that the core implementations of other programming languages often do not supply critical functionality necessary to develop complex programs.
Origin
The rule was written sometime around 1993 by Philip GreenspunPhilip Greenspun
Philip Greenspun is a semi-retired American computer scientist, educator, and early Internet entrepreneur who was a pioneer in developing online communities.-Biography:...
. Although it is known as his tenth rule, there are in fact no preceding rules, only the tenth. The reason for this according to Greenspun:
Meaning
Lisp syntax is highly abstract; Lisp programs are constructed as trees of S-expressions, which are equivalent to the abstract syntax treeAbstract syntax tree
In computer science, an abstract syntax tree , or just syntax tree, is a tree representation of the abstract syntactic structure of source code written in a programming language. Each node of the tree denotes a construct occurring in the source code. The syntax is 'abstract' in the sense that it...
s that compiler
Compiler
A compiler is a computer program that transforms source code written in a programming language into another computer language...
s of other languages create internally. As a homoiconic
Homoiconicity
In computer programming, homoiconicity is a property of some programming languages, in which the primary representation of programs is also a data structure in a primitive type of the language itself, from the Greek words homo meaning the same and icon meaning representation...
language, Lisp also makes no distinction between code and data; Lisp programs are themselves just Lisp data structures. Lisp programs can thus generate additional Lisp programs themselves via macros. As a result, the programmer can construct complex domain specific languages with relative ease. Lisp advocates such as Paul Graham
Paul Graham
Paul Graham is a programmer, venture capitalist, and essayist. He is known for his work on Lisp, for co-founding Viaweb , and for co-founding the Y Combinator seed capital firm...
claim that this allows faster construction of more robust software compared to other languages. Greenspun's Rule expresses the opinion that these capabilities are necessary for any complex software package, and so will be redesigned from scratch in an ad hoc manner in any large project, duplicating effort already exerted in Common Lisp.
Morris's corollary
Well-known hackerHacker (computer security)
In computer security and everyday language, a hacker is someone who breaks into computers and computer networks. Hackers may be motivated by a multitude of reasons, including profit, protest, or because of the challenge...
Robert Morris later added the corollary
Corollary
A corollary is a statement that follows readily from a previous statement.In mathematics a corollary typically follows a theorem. The use of the term corollary, rather than proposition or theorem, is intrinsically subjective...
:
This can be viewed as a commentary on the difficulty of creating an efficient implementation of the large and complex Common Lisp language, or simply a joke about Lisp's eval function. Both Greenspun's rule and Morris's corollary are examples of a characteristic style of hacker humor
Geek humor
Geek humor or geek humour, also known as nerd humor, is a form of comedy that relies on references to geek culture.-Definition:By the strictest definition, geek humor is a branch of humor that encompasses the interest ranges of individuals who are either known as geeks or consciously identify as...
known as "ha ha only serious".
See also
- Inner-platform effectInner-platform effectThe 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...
- Turing tarpitTuring tarpitA Turing tarpit is any programming language or computer interface that allows for a great deal of flexibility in function but is difficult to learn and use because it offers little or no support for common tasks...
- Zawinski's law of software envelopment