No Silver Bullet: Essence and Accidents of Software Engineering

advertisement
Keith Britt
Software Systems Engineering
September 5th, 2001
No Silver Bullet: Essence and Accidents of Software Engineering Reaction
The first thing one must consider when evaluating the validity of Brooks’s claims is the date on
which the article, No Silver Bullet: Essence and Accidents of Software Engineering1, was
published, April of 1987. This is important for two reasons. One, a reviewer must consider the
state of software development in that time period and two, a reviewer must examine Brook’s
claims of the future in context of things that are no longer in the future, but are now present or
past practices, like object-oriented programming. The second thing one must consider when
evaluating the validity of Brooks’s claims is Brooks’s personal background. This is important
because Brooks’s article is not a scientific study, but rather a personal view on the state of
software engineering.
In the late 1980’s, software development was in full swing yet it’s full potential had not yet been
tapped. ‘Internet’ was not a household word nor was ‘Windows’. However, business
applications were being developed at a very rapid pace and the educational sector was certainly
embracing the potential of the computer sciences. Still, computer scientists were computer
scientists; they were “everyman programmers”2. Specializations within the field were not
commonplace as they are today and consequently many programmers were also database
administrators, network engineers, etcetera.
With this being said, it forces a closer look at how Brooks evaluated software developers. Did
he evaluate software developers as individuals or did he evaluate software developers as teams of
people will different individual skills? Though Brooks goes in to some detail about graphical
programming and artificial intelligence, he is constantly referring to software developers as
“software peoples” (or some derivative there of), which would seem to imply that he considers
all people involved in the development of a software system, as having the same, allencompassing skill set. This gross generalization seems to put a hole in Brooks’s theories given
today’s software development organizational and management constructs.
Software systems development is no longer constrained to being created solely by software
developers. Software development teams can now consist of people who know little about
programming. Network engineers, data analysts, marketing professionals, and others can all
participate in the software systems development process. The software engineer’s role in this
process is to keep everybody’s ideas in the context of a piece (or multiple pieces) of software.
As stated before, at the time Brooks’s article was publish software development was a relatively
new professional practice (when compared to other engineering professions like architectural
engineering). It is fair to say that software development was still in the craft stage3 of its
evolution (referring to Mary Shaw’s description of the evolution process of a craft into an
engineering discipline) at the time Brooks’s article was published. Time will on occasion flesh
out inefficient practices, however Brooks hadn’t given software development a proper trial
period to see if software development would be able to rid itself of some of it’s lesser practices.
It must be noted that some of Brooks’s claims about the future of software development were
inaccurate. In particular, his claims about high-level language advances, object-oriented
programming, environments/tools, and workstations have all been proven to be false.
High-level languages have evolved to the point that some can hardly even be considered
languages any more. For instance, the programming environment of Microsoft’s Visual Basic
resembles more of a graphical editor than a code editor. Software developers can create fully
executable (however not very useful) programs without ever having to type one line of code.
These types of integrated development environments (IDE) have drastically increased the
efficiency of software development and even the speed at which software developers are
educated.
The same can be said for object-oriented programming. Object-oriented programming has
become the staple of software development. It easily allows software developers to transition
between conceptual system diagrams (like UML) to actual code.
The tools and environments software developers use to create software have improved the
quality of software developed as well. Application program interfaces (API) for sockets,
databases, and user interface programming considerably cut down on the amount of syntax that a
software developer must debug and hence frees up more time to design the system in question.
Not only do modern APIs increase software development efficiency, but the operating systems
that are used to create/manage applications have also had a dramatic impact of software
development. Windows (and the derivatives there of) have reduced the amount of immersion
(into the computer science field) a person must go through before they can efficiently develop
software.
Workstations and personal computers have become the modern day television. Televisions have
turned into entertainment boxes whereas personal computers and workstations have become
information boxes. Instead of watching the evening news, people are starting to turn to the
Internet for an update on current events and to perform research. Libraries are becoming more of
study halls rather than databases of information.
This sudden transformation is due to the monumental decrease in the price of computers and
computer components. Memory modules in particular have become so cheap it’s hard to not
max out one’s system memory capacity. This reduction of price has virtually eliminated compile
times, not to mention that professional software developers often now work with two or three
gigantic monitors (20” and above) that reduce the amount of physical strains endured by
software developers.
Now that it has been established that the period in which Brooks wrote his article was
inappropriate as well as establishing that some of Brooks predictions about the future of software
development were inaccurate, Frederick Brooks, the person, must also be evaluated.
Frederick Brooks was one of the most influential software developers of all time. He coined the
phrase computer architecture and founded the Department of Computer Science at the
University of North Carolina at Chapel Hill.4 From 1956 to 1965 he worked as a software
architect at International Business Machines (IBM).4 There he and his associate, Dura Sweeny,
invented many of the basis of computer architectures used today (in particular their Stretch
interrupt system).4
Brooks’s background was not founded on specialization or refinement of old techniques. Most
of his career was dedicated to discovery and the creation of new foundations. It’s hard to
imagine that such an innovated (and elevated) computer science pioneer could hold the proper
perspective of how normal software engineers viewed the situations he was criticizing. This
does not help Brooks’s arguments, however it does not necessarily hurt them either.
Frederick Brooks was a talented pioneer in the world of software development. He will always
be respected and admired for his accomplishments and contributions to computer science.
However, time has shattered some of his claims of the inabilities of software developers to
evolve into software engineers. Therefore, software developers, designers, and even engineers
should use his Silver Bullet paper as a guide for how to view the current state of affairs in
software engineering; that they too are also at the beginning of a burgeoning engineering
discipline and should strive to refine it no matter how hopeless things may seem at the present.
Bibliography
1. Brooks Jr., Frederick. No Silver Bullet: The Essence and Accidents of Software Engineering.
IEEE Computer. April 1987.
2. Kemerer, Chris. Software Project Management Readings and Cases. Irwin/McGraw-Hill.
1997.
3. Shaw, Mary. Prospects for an Engineering Discipline of Software. IEEE Software.
November 1990.
4. Department of Computer Science, The University of North Carolina at Chapel Hill. Faculty
Biography: Frederick P. Brooks. February 2001.
<http://www.cs.unc.edu/People/Faculty/Bios/brooks.html>
Download