No Silver Bullet
"No Silver Bullet – Essence and Accident in Software Engineering" is a widely discussed paper on software engineering written by Turing Award winner Fred Brooks in 1986.[1][2] 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, as there is in hardware development (Moore's law).
Summary
Brooks distinguishes between two different types of complexity: accidental complexity and essential complexity. Accidental complexity relates to problems which engineers create and can fix; 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 the accidental complexity has decreased substantially, and today's programmers spend most of their time addressing essential complexity. Brooks argues that this means that shrinking all the accidental activities to zero will not give the same order-of-magnitude improvement as attempting to decrease essential complexity. While Brooks insists that there is no one silver bullet, he believes that a series of innovations attacking essential complexity could lead to significant improvements. One technology that had made significant improvement in the area of accidental complexity was the invention of high-level programming languages, such as Ada.[3] Today's languages, such as C, C++, C# and Java, are considered to be improvements, but not of the same order of magnitude.[citation needed]
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.
The article, and Brooks's later reflections on it, 'No Silver Bullet' Refired, can be found in the anniversary edition of The Mythical Man-Month.[4]
Related concepts
Brooks' paper has been sometimes cited in connection with Wirth's law, to argue that "software systems grow faster in size and complexity than methods to handle complexity are invented".[5]
See also
- History of software engineering
- Software prototyping, one of the main strategies against essential complexity in "No Silver Bullet"
- SOLID (object-oriented design)
- Essential complexity (numerical measure of "structuredness")
References
- ^ Brooks, Frederick. P., Jr. (1987). "No Silver Bullet – Essence and Accident in Software Engineering" (PDF). Computer. 20 (4): 10. doi:10.1109/MC.1987.1663532.
{{cite journal}}
: CS1 maint: multiple names: authors list (link) - ^ Brooks, Proc. IFIP
- ^ "No Silver Bullet: Essence and Accidents of Software Engineering". Frederick P. Brooks, Jr. Retrieved 2014-08-08.
- ^ Mythical Man-Month, Silver Bullet Refired
- ^ Tim A. Majchrzak (2012). Improving Software Testing: Technical and Organizational Developments. Springer Science & Business Media. p. 4. ISBN 978-3-642-27464-0.
Further reading
- Brooks, Fred P. (1986). "No Silver Bullet — Essence and Accident in Software Engineering". Proceedings of the IFIP Tenth World Computing Conference: 1069–1076.
- Brooks, Fred P. (April 1987). "No Silver Bullet — Essence and Accidents of Software Engineering". IEEE Computer. 20 (4): 10–19.
{{cite journal}}
: Unknown parameter|authormask=
ignored (|author-mask=
suggested) (help) - Brooks, Fred P. (1975). The Mythical Man-Month. Addison-Wesley. ISBN 0-201-00650-2.
{{cite book}}
: Unknown parameter|authormask=
ignored (|author-mask=
suggested) (help) - Brooks, Fred P. (1995). "Chap. 16". "No Silver Bullet — Essence and Accident" (Anniversary Edition with four new chapters ed.). Addison-Wesley. ISBN 0-201-83595-9.
{{cite book}}
:|work=
ignored (help); Unknown parameter|authormask=
ignored (|author-mask=
suggested) (help) - Brooks, Fred P. (1995). "Chap. 17". "'No Silver Bullet' Refired" (Anniversary Edition with four new chapters ed.). Addison-Wesley. ISBN 0-201-83595-9.
{{cite book}}
:|work=
ignored (help); Unknown parameter|authormask=
ignored (|author-mask=
suggested) (help)
External links
- No Silver Bullet: Essence and Accidents of Software Engineering, by Frederick P. Brooks, Jr.
- Software Engineering Principles—Steve McConnell's comments on the dichotomy, originally published in IEEE Software, Vol. 16, No. 2, March/April 1999