Software history has a deep impact on current software designers, computer scientists, and technologists. System constraints imposed in the past and the designs that responded to them are often unknown or poorly understood by students and practitioners, yet modern software systems often include “old” software and “historical” programming techniques. This work looks at software history through specific software areas to develop student-consumable practices, design principles, lessons learned, and trends useful in current and future software design. It also exposes key areas that are widely used in modern software, yet infrequently taught in computing programs. Written as a textbook, this book uses specific cases from the past and present to explore the impact of software trends and techniques.
Building on concepts from the history of science and technology, software history examines such areas as fundamentals, operating systems, programming languages, programming environments, networking, and databases. These topics are covered from their earliest beginnings to their modern variants. There are focused case studies on UNIX, APL, SAGE, GNU Emacs, Autoflow, internet protocols, System R, and others. Extensive problems and suggested projects enable readers to deeply delve into the history of software in areas that interest them most.
Author(s): Kim W. Tracy
Series: ACM Books, 38
Publisher: Association for Computing Machinery
Year: 2021
Language: English
Pages: 357
City: New York
Software
Contents
List of Figures
List of Tables
Preface
Use of the Book
Acknowledgments
1 Introduction to Software History
1.1 What is “Software”?
1.2 Challenges of Software History
1.3 Modeling Software Technology Evolution
1.3.1 Software As a Technology
1.3.1.1 Linking Software to Physical Phenomena
1.3.1.2 Software Is Built from Other Components
1.3.1.3 Software Components Are Technologies
1.3.2 Software Domains
1.3.3 Other Terms and Techniques
1.3.4 How Software Technology Evolves
1.4 Computer Hardware History
1.4.1 Hardware Before the von Neumann Architecture
1.4.2 The von Neumann Architecture
1.4.3 Computers After the von Neumann Architecture
1.5 Computer Hardware Trends and “Laws”
1.6 Lessons Learned from Hardware Evolution Affecting Software
1.7 Summary
1.8 Exercises and Projects
1.8.1 Exercises
1.8.2 Projects
1.9 Further Readings and Online Resources
2 Software History Fundamentals
2.1 Overview of Software History
2.2 Types of Software
2.3 Cultures and Communities of Software
2.3.1 Professional Societies
2.3.2 Other Influential Groups
2.4 Environment
2.5 Influences on Software History
2.5.1 Software Change Due to Invention
2.5.2 Software Change Due to Functional Failure
2.6 Summary
2.7 Exercises and Projects
2.7.1 Exercises
2.7.2 Projects
2.8 Further Readings and Online Resources
3 Operating Systems
3.1 Operating Systems and Their Evolution
3.2 Operating Systems Scope
3.2.1 Operating System Types
3.2.2 Operating System Features
3.2.2.1 Memory Management
3.2.2.2 Process Management
3.2.2.3 Virtual Machines
3.2.3 General Operating System Technologies
3.2.3.1 Migration of Operating System Features
3.2.4 Influential Operating Systems
3.3 Operating Systems Case Study: Pipes in the UNIX System
3.4 Lessons Learned from Operating System Software
3.5 Summary
3.6 Exercises and Projects
3.6.1 Exercises
3.6.2 Projects
3.7 Further Readings and Online Resources
4 Programming Languages
4.1 Definitions
4.1.1 Machine Language
4.1.2 Assembly Language
4.1.3 Compilers and Automatic Coding and Programming
4.1.4 Source Code, Object Code, Linkers, Loaders, Libraries, and Executables
4.2 Types of Programming Languages
4.2.1 Imperative and Procedural Languages
4.2.1.1 FORTRAN
4.2.1.2 COBOL
4.2.1.3 ALGOL
4.2.1.4 PL/I
4.2.1.5 C
4.2.2 Functional Programming Languages
4.2.2.1 LISP Dialects
4.2.3 Logic Programming Languages
4.2.4 Object-Oriented Programming Languages
4.2.4.1 Simula
4.2.4.2 Smalltalk
4.2.4.3 Java
4.3 Prehistory of Programming Languages and Compilers
4.3.1 Automatic Coding and Programming
4.4 Influences on Programming Language Change
4.5 Case Study: APL
4.6 Lessons Learned from Programming Languages
4.7 Exercises and Projects
4.7.1 Exercises
4.7.2 Projects
4.8 Further Readings and Online Resources
5 Programming Environments, Tools, and Methodologies
5.1 Early Programming Environments and Tools
5.2 Evolution of Programmer Tools Over Time
5.3 Large Projects and the Software “Crisis”
5.4 Reflections on Programming Tools and Environments
5.5 Case Study: SAGE
5.6 Case Study: GNU Emacs
5.7 Case Study: AUTOFLOW
5.8 Lessons Learned from Programming Tools and Environments
5.9 Exercises and Projects
5.9.1 Exercises
5.9.2 Projects
5.10 Further Readings and Online Resources
6 Networking Software
6.1 Overview of the Evolution of Data Networking
6.1.1 Information Networking Before Computers
6.1.2 Communications Networks Contributing to Computer Networking
6.1.3 Wireless Networks
6.1.4 Some Networking Hardware
6.1.5 Overview of Data Network History
6.1.6 Proprietary Networks
6.1.6.1 One Example: IBM's SNA
6.1.6.2 The Problem of Bridging or Connecting Disparate Networks
6.1.6.3 Front-end Processors
6.1.7 Packet Networking and Internetworking
6.2 Networking Protocols
6.2.1 OSI 7-Layer Reference Model
6.3 Getting to TCP/IP
6.3.1 UUCPNET
6.3.2 ARPANET
6.4 Network Software and Applications
6.4.1 Electronic Bulletin Board Systems
6.4.2 Email
6.4.3 The WELL
6.4.4 Usenet and NetNews
6.4.5 FTP Archives
6.4.6 Gopher, Archie, and Veronica
6.4.7 World Wide Web
6.4.8 Network Operating Systems
6.5 Case Study: Minitel
6.6 NCSA httpd and Apache Web Server
6.7 Networking Influences
6.8 Lessons Learned from Networking Software
6.9 Exercises and Projects
6.9.1 Exercises
6.9.2 Projects
6.10 Further Readings and Online Resources
7 Database Management Systems
7.1 Overview of Database Systems and Their Evolution
7.2 Early Database History
7.2.1 Data Definition Languages
7.2.2 Report Generator Systems
7.3 Types and Evolution of Database Systems
7.3.1 I-D-S: The First DBMS?
7.3.2 IBM's IMS and Hierarchical Databases
7.3.3 Inverted File Systems
7.4 Relational DBMSs
7.4.1 SQL Standardization
7.5 System R: Sample Code
7.6 Factors Affecting Change of Database Software
7.7 Lessons Learned from Database Software
7.8 Exercises and Projects
7.8.1 Exercises
7.8.2 Projects
7.9 Further Readings and Online Resources
8 Software Futures and Overall Trends
8.1 Overview of Software History
8.2 Trends
8.3 Perpetual Challenges of Software Development
8.3.1 Software Quality and Reliability
8.3.2 Software System Scalability
8.3.3 Software Re-usability
8.4 Emerging Software Trends
8.5 Other Areas of Software
8.6 Software History's Relevance
8.7 Exercises and Projects
8.7.1 Exercises
8.7.2 Projects
8.8 Further Readings and Online Resources
A Appendix—Source Code
A.1 UNIX Pipe.c
A.2 System R Where Clause Code
Bibliography
Author's Biography
Index