The major issues of modern software are its size and complexity, and its major problems involve finding effective techniques and tools for organization and maintenance. This paper traces the important ideas of modern programming languages to their roots in the problems and languages of the past decade and shows how these modern languages respond to contemporary problems in software development. Modern programming's key concept for controlling complexity is abstraction -that is, selective emphasis on detail; new developments in programming languages provide ways to support and exploit abstraction techniques.To appear in Proceedings of the IEEE in September 1980.
Issues of Modern SoftwareThe major issues of modern software development stem from the costs of software development, use, and maintenance -which are too high -and the quality of the resulting systems which is too low. These problems are particularly severe for the large complex programs with long useful lifetimes that characterize modern software. Such programs typically involve many programmers, not only during their development but also for maintenance and enhancement after they are initially released.As a result, the cost and quality of software are influenced by both management and softwareThis paper examines one of the themes that run through the history of attempts to solve the problems of high cost and low quality: the effect of abstraction techniques and their associated specification and verification issues on the evolution of modern programming languages and methods. This theme places a strong emphasis on engineering concerns, including design, specification, correctness, and reliability.The paper begins with a review of the ideas about program development and analysis that heavily
Historical Review of Abstraction TechniquesControlling software development and maintenance has always involved managing the intellectual complexity of programs and systems of programs. Not only must the systems be created, they must be tested, maintained, and extended. As a result, many different people must understand and modify them at various times during their lifetimes. This section identifies one set of ideas about managing program complexity and shows how those ideas have shaped programming languages and methodologies over the past ten to fifteen years.A dominant theme in the evolution of methodologies and languages is the development of tools for dealing with abstractions. An abstraction is a simplified description, or specification, of a system that emphasizes some of the system's details or properties while suppressing others. A good abstraction Impact of Abstraction Concerns on Modern Programming Languages 2 is one in which information that is significant to the reader (i.e., the user) is emphasized while details that are immaterial or diversionary, at least for the moment, are suppressed.What we call "abstraction" in programming systems corresponds closely to what is called "analytic modelling" in many other fields. It shares many of the same...