CSCI 3308 — Homework 1

Here are the answers to homework 1 as submitted by a student in the Fall 2006 class. We'd like other students to see the quality of work being submitted by their peers.

1. Define the term essential difficulties as it is used by Brooks. (2 pts.)

Brooks defines the term essential difficulties as the difficulties inherent in the nature of the software (Pg. 182). These are difficulties that are unavoidable in fashioning the complex conceptual structures that compose the abstract software entity (Pg. 180). Brooks argues that the abstract and complex nature of software gives it certain essential difficulties that cannot be easily solved by any one method. For example, there is no easy way to represent all of the states of a program in one diagram. Since these essential difficulties make up the majority of the difficulty in software design, there is "No Silver Bullet" to solve them.

2. Define the term accidental difficulties as it is used by Brooks. (2 pts.)

Brooks defines the term accidental difficulties as those difficulties that today attend software's production but that are not inherent (Pg. 182). These are difficulties of the representation of abstract software entities in programming languages and the mapping of these onto machine languages within space and speed constraints (Pg. 180). Brooks argues that the accidental difficulties of software production are side effects of how man has designed computer systems and therefore can be eliminated as improvements are made. For example, a confusing assembly language that causes many user errors can be superseded by a more intuitive high-level language as technology advances and allows the change to become feasible. However, Brooks claims that these accidental difficulties of software production do not make up the majority of the difficulty in software production and therefore eliminating them will not yield an order of magnitude increase in productivity. It is important to note that Brooks does not mean occurring by chance nor misfortune, but rather incidental (Pg. 209) when he uses the term "accidental".

3. List the four essential difficulties of writing software that Brooks identifies. (2 pts.)

The four essential difficulties of writing software Brooks identifies are:

Complexity
The fact that computers are complex, have many states, software does not easily scale up, and does not lend itself to abstraction.
Conformity
The fact that software exists in an arbitrary environment filled with varying interfaces, standards, political decisions, etc. In order to work, the software must conform to these external factors.
Changeability
The fact that software is continuously subject to change. Software is constantly rewritten to meet new needs, and the people asking for changes often don't realize the difficulty as they would with changing a house or car. Also, successful software is ported to other environments and needs to be modified to work properly.
Invisibility
Software is invisible and unvisualizable. Therefore, there does not exist an easy way to represent it in a diagram, etc.

4. Select one of the essential difficulties and write its definition. (2 pts.)

One of the essential difficulties of writing software is conformity. The definition of conformity is the necessity of software to conform to the arbitrary environment in which it is being used in order to work properly. The environment software exists in is capricious and arbitrary by nature because it was created by man with technological constraints, political and policy motives, and sometimes poor design. This difficulty is not essential because it exists only because the systems that software must interface with were designed by different groups of people and therefore don't have an overarching design. Since the software must conform to the environment in which it exists, it adds an essential difficulty of design.

5. Explain why Brooks calls object-oriented programming a brass bullet. (2 pts.)

Brooks calls object-oriented programming a brass bullet on page 219. He goes on to describe object-oriented programming as containing several important concepts, such as modularity with clean interfaces, encapsulation, inheritance, hierarchical class structure with virtual functions, and strong abstract data-typing. Brooks concludes that the most appealing part of object-oriented programming is that with the one action of retraining the programmers, advantages are gained on all fronts. This is consistent with Brooks' belief that there is no one technique that is a silver bullet, but that multiple techniques can be used to improve software development. Thus, object oriented programming is like a brass bullet because it contains many enhancements in one new programming methodology. However, Brooks goes on to point out many of the current problems with object-oriented programming. He cites such examples as small-scale abstraction, high upfront costs, limited scope of code reusability, and complexities introduced by large-vocabulary object-oriented languages as the current drawbacks to the object-oriented programming methodology. Brooks comes to the conclusion that there still is no silver bullet since complexity is the essential difficult that cannot be easily overcome. So when Brooks describes object-oriented programming as a brass bullet he is most likely saying that since the technique encompasses several important evolutionary steps in improving software design, it does not provide a single, revolutionary solution to the essential problems of software design and is therefore a brass bullet rather than a silver bullet. However, since Brooks does not explicity mention the term "brass bullet" anywhere other than the section heading on page 219, and does not mention how object-oriented programming is a brass bullet anywhere in the subsequent 8 pages about object-oriented programming, it is impossible to tell precisely what Brooks is referring to when he calls it a brass bullet.