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