Reaction Paper - No Silver Bullet

advertisement
Stephen Seneker
Reaction Paper
CSCI-5200
9-5-2001
Brooks, F. P. (1987). No silver bullet. Computer 20(4), 10-19.
Software Engineering is the process by which software projects resulting in
software systems are planned, implemented, and developed. Software Engineering is not
a trivial task, for the process is embedded in the culture of an organization and the
cultural matrix of applications, users, laws, and machine vehicles. The interactions of
these elements exert forces that result in changes in software products. Unforeseen side
effects of these pressures are missed schedules, exceeded budgets, and flawed products.
What can be done to lower the costs of software as rapidly as the cost of computer
hardware?
In this article Brooks uses the werewolf, a folklore monster, as a metaphor for the
software problem. Like werewolves, software systems can unexpectedly transform from
the familiar into horrors. Brooks’ position is no silver bullet; no panacea for the
difficulties faced by software engineers exist and it is unlikely there will be any.
Not only are there no silver bullets now in view, the very nature of
software makes it unlikely that there will be any – no inventions that will
do for software productivity, reliability, and simplicity what electronics,
transistors, and large-scale integration did for computer hardware (Brooks,
1987).
Brooks believes the hard part of building software is the specification, design, and testing
of what are inherently conceptual constructs.
1
Software is perhaps more complex for it’s size than any other human construct.
Brooks asserts the complexity of software is an essential property, not an accidental one.
The difficulty lies in the paradigm used to describe software systems because these
descriptions abstract away its complexity but often abstract away it essence. Historically
mathematics and the physical sciences have constructed simplified models of complex
phenomena, deriving properties from the models that are experimentally verified.
Brooks’ criticism is this paradigm works because the complexities ignored in the models
were not the essential properties of the phenomena, but it does not work when the
complexities are the essence. What is this essence inherent in the complex systems
software engineers face?
For instance, it is more difficult to ascertain how something works based on
observation and to try to guess internal structure based on behavior. A psychological
consequence of this is when analyzing a mechanism one tends to overestimate its
complexity. That is, because a system appears complex then it must require a complex
solution. One can only speculate, but is part of the complexity inherent in software
system a result of the observations, and perhaps even more so the perceptions of the
software engineer?
When compared to other engineering disciplines, software engineering is
currently in a nascent stage of development. Engineers have been building bridges and
other physical structures far longer than they have been creating software systems. But is
software engineering a misnomer? According to the American Society for Engineering
Education (ASEE) engineering is the art of applying scientific and mathematical
principles, experience, judgement, and common sense to make things that benefit people.
2
Engineering is the process of producing a technical product or system to meet a specific
need. Based on this definition it appears to be an engineering discipline.
Programming computers in some circles is still considered an art, but how does
this differ from engineering? Art is a skill acquired by experience, study, or observation;
an occupation requiring knowledge or skill. Therefore, in essence art is the foundation
for many of the varied disciplines humans engage, and experience is the crucial factor. It
is this researchers opinion that because software engineering is a young developing
discipline its practitioners lack the long-standing wisdom time endows mature
disciplines. The silver bullet so many software engineers seek may be time.
Brooks implies software engineers are trying to keep up with the pace of
computer hardware engineers, which may not be a realistic goal. One must be aware that
many of the speed and capacity increases of computer systems are a result of the drastic
increase in component fabrication densities. Current desktop and workstation computers
benefit from advances once used in past mainframe and minicomputers. In this case it is
not that anything new is being done, but like trickle down economics it can be considered
trickle down technology. In addition it has the feeling that practitioners are doing more
of the same, yet with different slants, but nothing truly new. Is this why software
engineering appears to be behind?
Brooks also points out that large software systems exceed the complexity of the
hardware systems on which they rely. That is, digital computers have a large number of
states, yet a software system can have orders-of-magnitude more states. Software
development has progressed from being developed as machine code, assembly language
code to high-level languages that abstract program operations, data types, sequences and
3
communications from the specifics of machine programs. One can speak of structured
programming, object-oriented programming, and of the promise of fourth generation
languages, not to mention automatic programming and graphical programming. Yet,
with each of these developments are software engineers doing anything truly new, or is it
just more of the same which does not really work?
Brooks points out that software construction is a creative process, and that sound
methodology can empower and liberate a creative mind. Studies have shown that the
very best designers produce structures that are faster, smaller, simpler, cleaner, and
produced with less effort. Why? Is the task of the software engineer so burdening due to
it multi-modal nature? Perhaps the issue is not so much as what is required of the
software engineer but how the software engineer works. That is, each person has a
unique cognitive mode that has evolved over his or her life span; how one thinks is as
unique as the individual. Software engineering in one respect is an algorithmic art.
However, many of the tasks faced by software engineers inherently non-algorithmic?
Even though this article is dated, its arguments make as much sense now as when
it was published. This researcher agrees with Brooks that at least in the foreseeable
future no silver bullet exists that will solve the problems faced by software engineers.
One can only speculate that as the discipline matures new paradigms, methodologies, and
modes of thought will endow software engineers with the cognitive faculties the
discipline demands. This researchers opinion is that no new tools or inventions will cure
the problem; it is not a technical problem but instead is one that requires growth of the
mind.
4
Download