No Silver Bullet
Encyclopedia
"No Silver Bullet — Essence and Accidents of Software Engineering" is a widely discussed paper on software engineering
written by Fred Brooks
in 1986. Brooks argues that "there is no single development, in either technology or management technique, which by itself promises even one order of magnitude
[tenfold] improvement within a decade in productivity, in reliability, in simplicity." He also states that "we cannot expect ever to see two-fold gains every two years" in software development, like there is in hardware development.
Brooks makes a distinction between accidental complexity
and essential complexity
, and asserts that most of what software engineers now do is devoted to the essential, so shrinking all the accidental activities to zero will not give an order-of-magnitude improvement. Brooks advocates addressing the essential parts of the software process. While Brooks insists that there is no one silver bullet
, he believes that a series of innovations attacking essential complexity could lead to significant (perhaps greater than tenfold in a ten-year period) improvements.
The article, and Brooks's own reflections on it, "'No Silver Bullet' Refired," can be found in the anniversary edition of The Mythical Man-Month
.
and essential complexity
. Accidental complexity relates to problems that we create on our own and which can be fixed; for example, the details of writing and optimizing assembly
code or the delays caused by batch processing. Essential complexity is caused by the problem to be solved, and nothing can remove it; if users want a program to do 30 different things, then those 30 things are essential and the program must do those 30 different things.
Brooks claims that we have cleaned up much of the accidental complexity, and today's programmers spend most of their time addressing essential complexity. One technology, that had made significant improvement in the area of accidental complexity was the invention of high level programming languages, such as Fortran
at that time. Today's languages, such as C
, C++
, C# and Java
, are considered to be improvements, but not of the same order of magnitude.
Brooks advocates "growing" software organically through incremental development. He suggests devising and implementing the main and subprograms right at the beginning, filling in the working sub-sections later. He believes that programming this way excites the engineers and provides a working system at every stage of development.
Brooks goes on to argue that there is a difference between "good" designers and "great" designers. He postulates that as programming is a creative process, some designers are inherently better than others. He suggests that there is as much as a tenfold difference between an ordinary designer and a great one. He then advocates treating star designers equally well as star managers, providing them not just with equal remuneration
, but also all the perks of higher status: large office, staff, travel funds, etc.
Software engineering
Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software...
written by Fred Brooks
Fred Brooks
Frederick Phillips Brooks, Jr. is a software engineer and computer scientist, best known for managing the development of IBM's System/360 family of computers and the OS/360 software support package, then later writing candidly about the process in his seminal book The Mythical Man-Month...
in 1986. Brooks argues that "there is no single development, in either technology or management technique, which by itself promises even one order of magnitude
Order of magnitude
An order of magnitude is the class of scale or magnitude of any amount, where each class contains values of a fixed ratio to the class preceding it. In its most common usage, the amount being scaled is 10 and the scale is the exponent being applied to this amount...
[tenfold] improvement within a decade in productivity, in reliability, in simplicity." He also states that "we cannot expect ever to see two-fold gains every two years" in software development, like there is in hardware development.
Brooks makes a distinction between accidental complexity
Accidental complexity
Accidental complexity is complexity that arises in computer programs or their development process which is non-essential to the problem to be solved...
and essential complexity
Essential complexity
Essential complexity refers to a situation where all reasonable solutions to a problem must be complicated because the "simple" solutions would not adequately solve the problem...
, and asserts that most of what software engineers now do is devoted to the essential, so shrinking all the accidental activities to zero will not give an order-of-magnitude improvement. Brooks advocates addressing the essential parts of the software process. While Brooks insists that there is no one silver bullet
Silver bullet
In folklore, the silver bullet is supposed to be the only kind of bullet for firearms that is effective against a werewolf, witch, or other monsters...
, he believes that a series of innovations attacking essential complexity could lead to significant (perhaps greater than tenfold in a ten-year period) improvements.
The article, and Brooks's own reflections on it, "'No Silver Bullet' Refired," can be found in the anniversary edition of The Mythical Man-Month
The Mythical Man-Month
The Mythical Man-Month: Essays on Software Engineering is a book on software engineering and project management by Fred Brooks, whose central theme is that "adding manpower to a late software project makes it later"...
.
The argument
At the heart of the argument is the distinction between accidental complexityAccidental complexity
Accidental complexity is complexity that arises in computer programs or their development process which is non-essential to the problem to be solved...
and essential complexity
Essential complexity
Essential complexity refers to a situation where all reasonable solutions to a problem must be complicated because the "simple" solutions would not adequately solve the problem...
. Accidental complexity relates to problems that we create on our own and which can be fixed; for example, the details of writing and optimizing assembly
Assembly language
An assembly language is a low-level programming language for computers, microprocessors, microcontrollers, and other programmable devices. It implements a symbolic representation of the machine codes and other constants needed to program a given CPU architecture...
code or the delays caused by batch processing. Essential complexity is caused by the problem to be solved, and nothing can remove it; if users want a program to do 30 different things, then those 30 things are essential and the program must do those 30 different things.
Brooks claims that we have cleaned up much of the accidental complexity, and today's programmers spend most of their time addressing essential complexity. One technology, that had made significant improvement in the area of accidental complexity was the invention of high level programming languages, such as Fortran
Fortran
Fortran is a general-purpose, procedural, imperative programming language that is especially suited to numeric computation and scientific computing...
at that time. Today's languages, such as C
C (programming language)
C is a general-purpose computer programming language developed between 1969 and 1973 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system....
, C++
C++
C++ is a statically typed, free-form, multi-paradigm, compiled, general-purpose programming language. It is regarded as an intermediate-level language, as it comprises a combination of both high-level and low-level language features. It was developed by Bjarne Stroustrup starting in 1979 at Bell...
, C# and Java
Java (programming language)
Java is a programming language originally developed by James Gosling at Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java platform. The language derives much of its syntax from C and C++ but has a simpler object model and fewer low-level facilities...
, are considered to be improvements, but not of the same order of magnitude.
Brooks advocates "growing" software organically through incremental development. He suggests devising and implementing the main and subprograms right at the beginning, filling in the working sub-sections later. He believes that programming this way excites the engineers and provides a working system at every stage of development.
Brooks goes on to argue that there is a difference between "good" designers and "great" designers. He postulates that as programming is a creative process, some designers are inherently better than others. He suggests that there is as much as a tenfold difference between an ordinary designer and a great one. He then advocates treating star designers equally well as star managers, providing them not just with equal remuneration
Remuneration
Remuneration is the total compensation that an employee receives in exchange for the service they perform for their employer. Typically, this consists of monetary rewards, also referred to as wage or salary...
, but also all the perks of higher status: large office, staff, travel funds, etc.
See also
- History of software engineeringHistory of software engineeringFrom its beginnings in the 1940s, writing software has evolved into a profession concerned with how best to maximize the quality of software and of how to create it...
- Software prototypingSoftware prototyping*Software prototyping, refers to the activity of creating prototypes of software applications, i.e., incomplete versions of the software program being developed...
, one of the main strategies against essential complexity in "No Silver Bullet" - Silver BulletSilver BulletA silver bullet is a method to kill mythical creatures such as werewolves or a metaphor for any solution of extreme effectiveness.Silver Bullet may also refer to:* Silver Bullet , a 1985 American film based on a Stephen King novella...
External links
- No Silver Bullet: Essence and Accidents of Software Engineering, by Frederick P. Brooks, Jr.
- No Silver Bullet abridged, a shorter version No hay balas de plata: Lo esencial y lo accidental en la Ingeniería del Software, by Frederick P. Brooks, Jr.