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>