<P> As a recommendation to the programmer, in its formulation by Benjamin C. Pierce in Types and Programming Languages (2002), the abstraction principle reads (emphasis in original): </P> <Table> <Tr> <Td> "</Td> <Td> Each significant piece of functionality in a program should be implemented in just one place in the source code . Where similar functions are carried out by distinct pieces of code, it is generally beneficial to combine them into one by abstracting out the varying parts . </Td> <Td>" </Td> </Tr> </Table> <Tr> <Td> "</Td> <Td> Each significant piece of functionality in a program should be implemented in just one place in the source code . Where similar functions are carried out by distinct pieces of code, it is generally beneficial to combine them into one by abstracting out the varying parts . </Td> <Td>" </Td> </Tr> <P> As a requirement of the programming language, in its formulation by David A. Schmidt in The structure of typed programming languages (1994), the abstraction principle reads: . </P>

As a rule of thumb the more general a procedure (or abstraction) the better