Thursday, March 24, 2011

The Mythical Man-Month, Chapters 16-17

Reference Information
The Mythical Man-Month
Brooks, Frederick P., Jr.
Addison-Wesley, 1995



Summary
Chapter sixteen postulates that there is no innovation on the horizon that will fix the core problems of software development, which the author terms a silver bullet. The author advises developers to purchase already constructed components on the market, to use rapid prototyping, to grow software instead of building it, and making use of interactive and conceptual designers. Software encompasses properties that are either essential or accidental. Complexity is an essential characteristic of software - it will always be so. Accidents are difficulties that exist now but could be rectified in the future. The author believes that the hard part of creating software is the design, specification, and testing of the conceptual construct, not the implementation. Much complexity is created by pre-existing interfaces, which cannot be fixed by redesigning the software. The software itself is under constant pressure to change. Useful software is updated constantly to fix problems and add features. Another difficulty is that software lacks true substance - it cannot be visualized. The author says that this fact deprives the human mind of a powerful mechanism to reason about the structure. Breakthroughs made in the past had solved some of the accidental difficulties of software; the author lists:

  • High-level languages - the most powerful advance; increased productivity, reliability, and simplicity
  • Time-sharing - increased productivity and quality of product
  • Unified programming environments - providing fixed interfaces, libraries, file formats; Unix, etc.
Next, the author lists some potential silver bullets:
  • Ada - encourages modern program design, but the author thinks it will not have much effect
  • Object-oriented programming - the author believes this holds great promise
  • Artificial Intelligence - the author does not think that this will make much improvement
  • Expert systems - inference engine based on rules garnered from experience. The author thinks it will be helpful for novice programmers 
  • Automatic programming - creation of a program from its specification; unlikely to be successful
  • Graphical programming - create program visually; software is difficult to visualize, however
  • Program verification - can be done, but will only verify that it meets specification, not that it is right
  • Environments and tools - better tools would enable better productivity
  • Workstations
Lastly, the author lists some methods by which the essential difficulties of software engineering can be lessened:
  • Buy versus build - purchasing pre-made components instead of building them
  • Requirements refinement and rapid prototyping - allow the program to change as the needs change
  • Incremental development - growing the program instead of building it. It is too hard to accurately specify a program before building it. The system should always work, even if it does nothing useful. This method enforces top-down design.
  • Great designers - good designs come from good practices, great designs come from great designers
Chapter seventeen serves as a rebuttal to criticism for the previous chapter. It mostly comments upon additional studies done in the field and defends the positions presented before.

Opinion
Most of the objects from his silver bullets list have had substantial improvements since the publishing of the book. More interestingly, three out of four of the remedies for the essential software development process have become recommended practice in the field. Great designers, on the other hand, is very subjective and is very hard to determine if improvement has been made in this area.



No comments:

Post a Comment