Data processing has come a long way since the days of the UNIVAC I,
when the leading scientists of the period projected that the world would need only seven
such machines for the rest of time. Today the world has millions of computers with
processing capabilities billions of times greater than ten UNIVAC 1's, and the
demand for computing power continues to increase. In the first generation of computers,
hardware was expensive, accounting for 80 percent of the total cost, whereas software
accounted for approximately 20 percent. Today those figures are reversed, and it appears
this trend will continue for some time. The figure below graphically depicts this
situation.
As the sophistication of hardware increased rapidly, software technology did not keep pace. In the early days of software development, programming was very much an art. There were no standards or concrete rules. Many programmers approached their work haphazardly. Their main objective was to develop a program that executed properly, but they were not concerned about how this was accomplished.
This situation created the following problems:
As programmers became aware of these difficulties, their attention was turned to developing methods of improving programming techniques. One of the earliest developments was the discovery by two mathematicians, Guiseppe Jacopini and Corrado Bohm, that any programming problem could be solved using a combination of three basic logic patterns: the simple sequence, the selection pattern, and the loop. Therefore, the fourth pattern, the branch, was unnecessary. Until this point, branches were used often, leading to programs with convoluted, difficult-to-follow logic.
Another milestone in the development of structured programming was reached in 1968 when E. W. Dijkstra published a letter in the Communications of the ACM (Association for Computer Machinists) titled "Go To Statements Considered Harmful." Dijkstra stated in this now-famous letter that using the GOTO statement (which uses the branch logic pattern) made the logic of a program virtually impossible to follow because execution skipped haphazardly from one part of the program to another. At this stage computer scientists began to realize that it was important to develop programming languages that allowed programs to be written without the use of the GOTO statement.
At about this time, computer scientists also determined that program structure could be obtained by breaking a program into more manageable subprograms or modules, each designed to perform a specific task. These subprograms can be compared to the chapters in a textbook; each chapter deals with a specific topic and has specific goals. The chapters are combined to present a unified whole. Dividing a program into modules makes the program's logic easier to follow just as dividing a book into chapters (and subsections within those chapters) makes the facts and concepts presented easier to comprehend. The ability to easily divide a large program into fairly independent modules is an important characteristic of structured programming languages. Languages with this characteristic are discussed in Computer Science. Programs developed in this manner tend to have fewer errors than unstructured programs because the logic is readily apparent.
These events led to the development of a set of techniques, referred to as structured programming. Structured programming encourages programmers to think about the problem first and thoroughly design a solution before actually beginning to write the program in a programming language. Using structured programming encourages the development of well written modular programs that have easy-to-follow logic and tend to be more error free than other programs. There are many characteristics that distinguish structured programming. These characteristics can be divided into two broad categories: those that affect the manner in which the program solution is designed (structured design techniques) and those that affect the style in which the actual program is written (structured coding). Structured coding will be discussed in the section on writing programs (step 3 of the software development process). Structured design techniques will be presented next.
Last Updated Jan.7/99