
Reports and Articles Beyond Programming Languages Terry Winograd Stanford University As computer technology matures, our growing Introduction ability to create large systems is leading to basic changes in the nature of programming. Current Computer programming today is in a state of crisis programming language concepts will not be adequate (or, more optimistically, a state of creative ferment). for building and maintaining systems of the complexity There is a growing recognition that the available pro- called for by the tasks we attempt. Just as high level gramming languages are not adequate for building com- languages enabled the programmer to escape from the puter systems. Of course, as any first year student of intricacies of a machine's order code, higher level computation theory knows, they are logically sufficient. programming systems can provide the means to But they do not deal adequately with the problems we understand and manipulate complex systems and face in the day-to-day work of programming. We become components. In order to develop such systems, we need swamped by the complexity of large systems, lost in code to shift our attention away from the detailed written by others, and mystified by the behavior of our specification of algorithms, towards the description of almost debugged systems. When we look to the inte- the properties of the packages and objects with which grated multiprocessor systems that will soon dominate we build. This paper analyzes some of the shortcomings computing, the situation is even worse. of programming languages as they now exist, and lays This crisis in software production is far greater (in out some possible directions for future research. overall magnitude at least) than the situation of the early Key Words and Phrases: programming, 50's that led to the development of high level languages programming languages, programming systems, systems to relieve the burden of coding. The problems are harder development to solve, and the costs of not solving them are in the CR Categories: 4.0, 4.20, 4.22, 4.40 hundreds of millions. "The symptoms appear in the form of software that is nonresponsive to user needs, unrelia- ble, excessively expensive, untimely, inflexible, difficult to maintain, and not reusable." [3, p. 26.] There are many ways to improve things a little, and they are being tried. But to achieve a fundamental jump in our pro- gramming capacity, we need to rethink what we are doing from the beginning. The Problem I believe that the problem lies in an obsolete view of programming and programming languages. A widely accepted view can be paraphrased: The programmer's job is to design an algorithm (or a class of computations) Permission to copy without fee all or part of this material is for carrying out a task, and to write it down as a complete granted provided that the copies are not made or distributed for direct and precise set of instructions for a computer to follow. commercial advantage, the ACM copyright notice and the title of the publication and its date appear, and notice is given that copying is by High level programming languages simplify the writing permission of the Association for Computing Machinery. To copy of these instructions by providing basic building blocks otherwise, or to republish, requires a fee and/or specific permission. for stating instructions (both control and data structures) Author's address: T. Winograd, Computer Science Dept., Stanford University, Stanford, CA 94305. that are at a higher level of the logical structure of the © 1979 ACM 0001-0782/79/0700-0391 $00.75 algorithm than those of the basic machine. 391 Communications July 1979 of Volume 22 the ACM Number 7 This view has guided the development of many pro- Components for general tasks (such as memory manage- gramming languages and systems. It served well in the ment, user interface, file management, and network com- early days of computing, but in today's computational munication) can be designed once, rather than recon- environment, it is misleading and stultifying. It focuses structed for each system that needs the capability. Un- attention on the wrong issues and gives the most impor- fortunately, in current programming practice this is more tant aspects of programming a second-class status. It is of an ideal than a reality. The difficulties of using existing irrelevant in the same sense that binary arithmetic is packages often make it easier to replicate their function irrelevant--the things it deals with are a necessary part than to integrate them into a system. The only way such of computing, but should play a subsidiary rather than packages are generally used is by building programs central role in our understanding. within an "operating system" that provides facilities As computer technology (for both software and hard- within a uniform environment. Only those packages that ware) matures, our growing ability to create complex are needed by the majority of users find their way into systems has led to three basic changes in the nature of operating systems, and the facilities for using them are programming: complex and ad hoc relative to modern programming languages. We need better ways to deal with the prob- 1. Computers are not primarily usedfor solving well-struc- lems of "programming in the large." tured mathematical problems or data processing, but in- As noted in an IBM report on large software systems stead are components in complex systems. [1, p. 6], "... The understanding of how programs work According to Department of Defense studies [3], individually and in cooperation with each other.., re- more than half of DoD software costs are associated with mains very difficult to generalize, teach, communicate, "embedded computer systems." An embedded computer or even preserve, due to lack of easy 'externalization,' system is "one that is logically incorporated in a larger i.e. representation, of ideas." Once we begin to deal with system--e.g, an electromechanical device, a tactical sys- networks of processors, it will become even more impor- tem, a ship, an aircraft, or a communications system-- tant to deal explicity with properties of systems which whose primary function is not computation." Of course, integrate many independent components. embedded computer systems are not unique to the DoD. Many computer scientists spend the majority of their 3. The main activity of programming is not the origination time dealing with embedded computer systems such as of new independent programs, but in the integration, mod- message systems and text editing and formatting systems. ification, and explanation of existing ones. The example discussed below is a large embedded system This third change grows from the first two. As we are in a university context. As the microcomputer revolution able to build more complex programs, we develop sys- continues, this change will become even more extreme. tems that grow to fit an environment of needs, rather There will be computers embedded in every conceivable than carrying out a single well-specified task. An embed- kind of electrical and mechanical system, and applica- ded system (such as one for airline reservations or text tions like text editing and message processing will be- preparation and formatting) evolves over many years, come widespread on the scale of today's telephone net- increasingly fitting the needs of those who use it, and work. As Fisher [3] notes: incorporating new capacities as hardware advances make Embedded computer software often exhibits characteristics that them practical. The DoD study [3, pp. 24-25] noted that, are strikingly different from those of other computer applications .... "The programs are frequently large (50,000 to 100,000 Many embedded computer applications require software that will lines of code) and long-lived (10 to 15 years) .... Change continue to operate in the presence of faults .... For example, the applications may require the monitoring of sensors, control of equip- is continuous because of evolving system requirements-- ment display, or operator input processing. They must interface annual revisions are often of the same magnitude as the special peripheral equipment .... Software must sometimes be able original development .... The majority of costs are in- to respond at periodic (real time) intervals, to service interrupts curred in software maintenance rather than develop- within limited times, and to predict computation times .... In many ment." applications.., it is necessary to access, manipulate and display large quantities of data. Much of this data is symbolic or textual rather As additional needs and possibilities arise, it should than numeric, and must be organized in an orderly and accessible be possible to modify and combine existing well-tested fashion. systems rather than build new ones. In most cases, the needs for continuity in the use of the system (including 2. The building blocks out of which systems are built are "upward compatibility" for existing data and user pro- not at the level of programming language constructs. They grams) make it impractical to start from scratch. Using are "'subsystems" or "'packages," each of which is an current programming techniques, systems often reach a integrated collection of data structures, programs, and point at which the accretion of changes makes their protocols. structure so baroque and opaque that further changes By making use of existing modules, a programmer are impossible, and the performance of the system is can deal with design at a higher level, creating an inte- irreversibly degraded. The situation is further compli- grated system with capacities far greater than a program cated by the fact that modifications are often done not that could be built with the same effort "from scratch." by the original builders, but by new programmers with 392 Communications July 1979 of Volume 22 the ACM Number 7 an incomplete or inaccurate understanding of the system.
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages11 Page
-
File Size-