"Don't repeat yourself" (DRY) is a
principle of
software development
Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications, frameworks, or other software components. Software development inv ...
aimed at reducing repetition of software patterns, replacing it with abstractions or using
data normalization to avoid redundancy.
The DRY principle is stated as "Every piece of knowledge must have a single, unambiguous, authoritative representation within a system". The principle has been formulated by
Andy Hunt and
Dave Thomas in their book ''
The Pragmatic Programmer''. They apply it quite broadly to include "
database schema
The database schema is the structure of a database described in a formal language supported by the database management system (DBMS). The term " schema" refers to the organization of data as a blueprint of how the database is constructed (divid ...
s,
test plans, the
build
Build may refer to:
* Engineering something
* Construction
* Physical body stature, especially muscle size; usually of the human body
* Build (game engine), a 1995 first-person shooter engine
* "Build" (song), a 1987 song by The Housemartins
* ...
system, even
documentation".
[ ] When the DRY principle is applied successfully, a modification of any single element of a system does not require a change in other logically unrelated elements. Additionally, elements that are logically related all change predictably and uniformly, and are thus kept in
sync. Besides using
methods and
subroutines in their code, Thomas and Hunt rely on
code generators, automatic build systems, and
scripting language
A scripting language or script language is a programming language that is used to manipulate, customize, and automate the facilities of an existing system. Scripting languages are usually interpreted at runtime rather than compiled.
A scripti ...
s to observe the DRY principle across layers.
Alternatives
WET
The opposing view to DRY is called WET, a
backronym
A backronym is an acronym formed from an already existing word by expanding its letters into the words of a phrase. Backronyms may be invented with either serious or humorous intent, or they may be a type of false etymology or folk etymology. The ...
commonly taken to stand for "write everything twice" (alternatively "write every time", "we enjoy typing" or "waste everyone's time"). WET solutions are common in multi-tiered architectures where a developer may be tasked with, for example, adding a comment field on a form in a web application. The text string "comment" might be repeated in the label, the HTML tag, in a read function name, a private variable, database DDL, queries, and so on. A DRY approach eliminates that redundancy by using frameworks that reduce or eliminate all those editing tasks except the most important ones, leaving the extensibility of adding new knowledge variables in one place.
Kevin Greer named and described this programming principle.
AHA
Another approach to abstractions is the AHA principle. AHA stands for "''Avoid Hasty Abstractions''", described by
Kent C. Dodds
Kent is a county in South East England and one of the home counties. It borders Greater London to the north-west, Surrey to the west and East Sussex to the south-west, and Essex to the north across the estuary of the River Thames; it faces the ...
as optimizing for change first, and avoiding premature optimization.
and was influenced by
Sandi Metz's "prefer duplication over the wrong abstraction".
AHA is rooted in the understanding that the deeper the investment we've made into abstracting a piece of software, the more we perceive that the cost of that investment can never be recovered (
sunk cost fallacy
In economics and business decision-making, a sunk cost (also known as retrospective cost) is a cost that has already been incurred and cannot be recovered. Sunk costs are contrasted with '' prospective costs'', which are future costs that may be ...
). Thus, engineers tend to continue to iterate on the same abstraction each time the requirement changes. AHA programming assumes that both WET and DRY solutions inevitably create software that is rigid and difficult to maintain. Instead of starting with an abstraction, or abstracting at a specific number of duplications, software can be more flexible and robust if abstraction is done when it is needed, or, when the duplication itself has become the barrier and it is known how the abstraction needs to function.
AHA programming was originally named MOIST by Dodds, later again by Daniel Bartholomae, and originally referred to as DAMP by Matt Ryer. There was a different programming principle already named DAMP and described by Jay Fields, and the community pushed back against the usage of MOIST, due to the cultural aversion to the word "moist". Dodds called for alternatives on
Twitter
Twitter is an online social media and social networking service owned and operated by American company Twitter, Inc., on which users post and interact with 280-character-long messages known as "tweets". Registered users can post, like, and ...
, and suggested DATE as an alternative before settling on
Cher Scarlett's suggestion of AHA.
See also
*
Abstraction principle (programming)
*
Code duplication
*
Code reuse
*
Copy and paste programming
*
Database normalization and
denormalization
*
Disk mirroring
*
Loop unrolling
*
Redundancy (engineering)
*
Rule of three (computer programming)
Rule of three (''"Three strikes and you refactor"'') is a code refactoring rule of thumb to decide when similar pieces of code should be refactored to avoid duplication. It states that two instances of similar code do not require refactoring, but ...
*
Separation of concerns
*
Single source of truth (SSOT/SPOT)
*
Structured programming
*
Two or more, use a for
*
You aren't gonna need it (YAGNI)
References
External links
*
Don't Repeat Yourself at
WikiWikiWeb
The WikiWikiWeb is the first wiki, or user-editable website. It was launched on 25 March 1995 by programmer Ward Cunningham to accompany the Portland Pattern Repository website discussing software design patterns. The name ''WikiWikiWeb'' orig ...
*
Once and Only Once at WikiWikiWeb
97 Things Every Programmer Should Know (O'Reilly)The myth of over-normalization(discussion of academic extremes vs. real-world database scenarios)
*
{{DEFAULTSORT:Don't Repeat Yourself
Software engineering folklore
Computer programming folklore
Programming principles