Читать книгу Code Nation - Michael J. Halvorson - Страница 19
2.2The Complexity of software Complexity of Software Computing mythologiescomplexity of software
ОглавлениеAn underlying current of the 1968 NATO conference was that building software entailed a level of complexity that few fully recognized when digital electronic computers hit the scene in the 1950s. Computing mythologiescomplexity of software
But what made computer software so complex?
Let us start with a formal definition. Computer software is one part of a computer system that consists of data and computer instructions. Computer software is distinct from computer hardware, or the physical components of a computing system, such as the processors, circuits, boards, panels, monitors, switches, and other electronic devices in a machine.
A basic understanding of what software consists of changes over time, so it is useful to visualize a list of items that has taken shape in evolving contexts. Modern software includes a wealth of program types (operating system components, device drivers, application software, games, programming tools, malware), as well as supporting libraries, data, images, sound recordings, videos, email messages, Facebook posts, Tweets, and all manner of digital media. A Softwarerelease software release typically consists of a bundled collection of items with a particular purpose, including a setup program, executable files, and hundreds (or thousands) of installed components, digital media files, documentation, and other resources.
From a business point of view, software may be considered a commercial product with economic value and utility, such as the popular applications GarageBand for iOS, Adobe Photoshop, or Microsoft Office. Software may also be distributed for free, such as open-source software or freeware. In these many contexts, one piece of software is distinct from another on a computer system, in the marketplace, or (under certain conditions) in copyright law. As recent historians have also discovered, each piece of software has its own history and impact, its creators and users. Software carries cultural memories and a society’s hopes and fears.
In the 1960s, most software programs were supplied for free with the expensive computer systems that organizations purchased or rented from hardware manufacturers. In the U.S., IBM was the leading computer manufacturer by a large margin, followed by successful electronics firms like Burroughs, UNIVAC, NCR, Control Data, Honeywell, General Electric, and RCA. Corporations used mainframe computers for complex calculations, resource planning, bulk data processing, and transaction processing, including managing shipping, payroll, and employee records. In these many contexts, organizations needed to adapt the free software that they were given to match the needs of their customers. They needed to hire and train programmers and technicians to accomplish this work.
As computers grew and took on more tasks, the ailments plaguing software could often be traced back to one principle cause—system complexity. The Systemcomplexity complexity of software was engendered by programming’s abstract nature and the scientific principle that a program constitutes a digital (discrete state) system based on Computing mythologiescomplexity of software mathematical logic rather than an analog system based on continuous functions.12 As software systems were being constructed with growing sophistication, project designers needed to consider numerous interrelated factors in their solutions, including the organization’s list of requirements for a system (clearly stated or not), operating constraints related to hardware and software platforms, technical conditions within the computer itself (including memory resources), and the wide range of possible inputs and outputs that a program might encounter as it completed its work.
Real-world computer systems
Real-world computer systems were designed so that they used only a prescribed set of resources, such as memory and processor time. From the point of view of the programmer, additional complexity arrived in the selection of programming languages, data structures, Algorithms algorithms, flow control mechanisms, error handling structures, and the use of inherited source files and legacy code from other projects.
Individual computer programmers also brought their own tastes and psychological experiences to a project, as well as diverse training and educational experiences. All of these variables made the precise functionality of programs hard to predict, in the same way that storms and atmospheric conditions are challenging to forecast. The intricate balancing act was magnified in myriad ways as the responsibility for building new systems was distributed among team members who had different abilities and often coded in different locations and contexts.
In the late 1960s, anxious managers noted that the complexity of large systems created engineering problems with no easy solutions or mechanisms for assessment and control. As E.E. David of Bell Laboratories pointed out at the Garmisch conference,
Production of large software has become a scare item for management. By reputation it is often an unprofitable morass, costly and unending. This reputation is perhaps deserved. No less a person than T. J. Watson [Jr., Chairman and CEO of IBM] said that OS/360 OS/360 cost IBM over 50 million dollars a year during its preparation, and at least 5000 man-years’ investment.13
In David’s telling example, the software development project for OS/360 (IBM’s operating system for the 360 series of computers) was famously late and over budget, problems blamed on poor management practices and unwieldy development teams. The project became the subject of Brooks, Fred Frederick Brooks’s well-known guidebook on managing software projects, The Mythical Man-Month (1975), which we Computing mythologiescomplexity of software will return to when I analyze commercial programming cultures and integrated software suites in Chapter 11.
Figure 2.3A panel session from the 1968 Conference on Software Engineering in Garmisch, West Germany. Addressing the group is M. D. (Doug) McIlroy. (Photo by Robert M. McClure and used with his permission)