(^300) | Object-Oriented Software Design and Implementation
Programming at Many Scales
To help you put the topics in this book into context, we describe in broad terms the way
programming in its many forms is done in “the real world.” Obviously, we can’t cover every pos-
sibility, but we can try to give you a flavor of the state of the art.
Programming projects range in size from the small scale, in which a student or computer
hobbyist writes a short application to try out something new, to large-scale multicompany pro-
gramming projects involving hundreds of people. Between these two extremes are efforts of
many other sizes. Some people use programming in their professions, even though it isn’t their
primary job. For example, a scientist might write a special-purpose application to analyze data
from a particular experiment.
Even among professional programmers, many specialized programming areas exist. An in-
dividual might have a specialty in business data processing, in writing compilers or developing
word processors (an area known as “tool making”), in research and development support, in
graphical display development, in writing entertainment software, or in one of many other ar-
eas. However, one person can produce only a fairly small application (a few tens of thousands
of lines of code at best). Work of this kind is called programming in the small.
A larger application, such as the development of a new operating system, might require
hundreds of thousands or even millions of lines of code. Such large-scale projects require
teams of programmers, many of them specialists, who must be organized in some manner. If
left unorganized, they may waste valuable time just trying to communicate with one another.
Usually, a hierarchical organization is set up to handle this kind of project. One person, the
chief architector project director, determines the basic structure of the application and then dele-
gates the responsibility of implementing the major components. The components may be im-
plemented by either teams or individual programmers. This sort of organization is called
programming in the large.
Programming languages and software tools can help a great deal in supporting
programming in the large. For example, if a programming language lets programmers develop,
compile, and test parts of an application independently before they are put together, then sev-
eral people can work on the code simultaneously. Of course, it is hard to appreciate the
complexity of programming in the large when you are writing a small application for a class as-
signment. However, the experience you gain in this course will be valuable as you begin to de-
velop larger applications.
The following story is a classic example of what happens when a large project is developed
without careful organization and proper language support. In the 1960s, IBM developed a major
new operating system called OS/360, which was one of the first true examples of programming
in the large. After the operating system was written, more than 1,000 significant errors were
found. Despite years of trying to fix these errors, the programmers never did get the number of
errors below 1,000, and sometimes the “fixes” produced far more errors than they eliminated.
What led to this situation? Hindsight analysis showed that the code was badly organized and
that different pieces were so interrelated that no one could keep all of it straight. A seemingly sim-
ple change in one part of the code caused several other parts of the system to fail. Eventually, at
great expense, an entirely new system was created using better organization and tools.
In those early days of computing, everyone expected occasional errors to occur, and it was still
possible to get useful work done with a faulty operating system. Today, however, computers are
used increasingly more often in critical applications such as medical equipment and aircraft control
systems, where errors can prove fatal. Many of these applications depend on large-scale program-
ming. If you were stepping onto a modern jetliner right now, you might well pause and wonder, “Just
what sort of language and tools did they use when they wrote the code for this thing?” Fortunately,
most large, life-critical, software development efforts today use a combination of good
methodology, appropriate language, and extensive organizational tools—that is,software engineering.
T
E
A
M
F
L
Y
Team-Fly®