IDEAS AND TECHNOLOGICAL DISCOVERIES CHAPTER 1-2″ Is software really dead? if it was, you wouldn’t be reading this book! Computer software continues to be the single most important technology on the world stage. And it’s also a prime example of the law of unintended consequences. Fifty years ago no one could have predicted that software would become an indispensable technology for business, science, and engineering.
That software would enable the creation of new technologies (genetic engineering and nanotechnology), the extension of existing technologies ( telecommunications), and the radical change in older technologies ( the printing industry).
That software would be the driving force behind the personal computer revolution; that shrink-wrapped software products would be purchased by consumers in neighborhood malls; that software would slowly evolve from a product to serve as “on-demand”
SOFTWARE COMPANIES DELIVER:-
just-in-time functionality via a Web browser; that a software company would become larger and more influential than almost all industrial-era companies; that a vast software-driven network called the Internet would evolve and change everything from library research to consumer shopping to political discourse to the dating habits of young (and not so young) adults.
No one could foresee that software would become embedded in systems of all kinds: transportation, medical, telecommunications, military, industrial, entertainment, office machines.
The list is almost endless. And if you believe the law of unintended consequences, there are many effects that we cannot yet predict. No one could predict that millions of computer programs would have to be corrected, adapted, and enhanced as time passed.
The burden of performing these “maintenance” activities would absorb more people and more resources than all work applied to the creation of new software. As software’s importance has grown, the software community has continually attempted to develop technologies that will make it easier, faster, and less expensive
to build and maintain high-quality computer programs. Some of these technologies are targeted at a specific application domain (e.g., website design and implementation); others focus on a technology domain (e g., object-oriented systems or aspect-oriented programming); and still, others are broad-based (e.g., operating systems such as Linux).
However, we have yet to develop a software technology that does it all, and the likelihood of one arising in the future is small. And yet, people bet their jobs, their comforts, their safety, their entertainment, their decisions, and their very lives on computer software.
It better be right. This book presents a framework that can be used by those who build computer software-people who must get it right. The framework encompasses a process, a set of methods, and an array of tools that we call software engineering.
Today, the software takes on a dual role. It is a product, and at the same time, the vehicle for delivering a product. As a product, it delivers the computing potential embodied by computer hardware or more broadly, by a network of computers that are accessible by local hardware.
Whether it resides within a mobile phone or operates inside a mainframe computer, the software is an information transformer-producing, managing, acquiring, modifying, displaying, or transmitting information that can be as simple as a single bit or as complex as a multimedia presentation derived from data acquired from dozens of independent sources.
As the vehicle used to deliver the product, the software acts as the basis for the control of the computer (operating systems), the communication of information (networks), and the creation and control of other programs (software tools and environments).
The software delivers the most important product of our time-information. 1t transforms personal data (e.g., an individual’s financial transactions) so that the data can be more useful in a local context.
It manages business information to enhance competitiveness; it provides a gateway to worldwide information networks (e.g., the Internet), and provides the means for acquiring information in all of its forms.
The role of computer software has undergone significant change over the last half-century. Dramatic improvements in hardware performance, profound changes in computing architectures, vast increases in memory and storage capacity, and a wide variety of exotic input and output options, have all precipitated more sophisticated and complex computer-based systems.
Sophistication and complexity can produce dazzling results when a system succeeds, but they can also pose huge problems for those who must build complex systems.
Today, the huge software industry has become a dominant factor in the economies of the industrialized world. Teams of software specialists, each focusing on one part of the technology required to deliver a complex application, have replaced the lone programmer of an earlier era.
And yet, the questions that were asked of the lone programmer are the same questions that are asked when modern computer-based systems are built.
- Why does it take so long to get the software finished?
- Why are development costs so high?
- Why can’t we find all errors before we give the software to our customers?
- Why do we spend so much time and effort on maintaining existing programs?
- Why do we continue to have difficulty in measuring progress as the software is being developed maintained?
These and many other questions are a manifestation of the concern about software and the manner in which it is a developed-a concern that has to lead to the adoption of software engineering practice.
Today, most professionals and many members of the public at large feel that they understand software. But do they?
A textbook description of software might take the following form:-
(1) Instructions (computer programs) that when executed provide desired features, function, and performance,
(2) Data structures that enable the programs to adequately manipulate information, and
(3) Descriptive information in both hard copy and virtual forms that describes the operation and use of the programs.
There is no question that other more complete definitions could be offered.
But a more formal definition probably won’t measurably improve your understanding. To accomplish that, it’s important to examine the characteristics of software that make it different from other things that human beings build.
Software is a logical rather than a physical system element. Therefore, the software has characteristics that are considerably different than those of hardware.