History of software engineering

The term ‘software engineering’ was suggested at conferences organized by NATO in 1968 and 1969 to discuss the ‘software crisis’. The software crisis was the name given to the difficulties encountered in developing large, complex systems in the 1960s. It was proposed that the adoption of an engineering approach to software development would reduce the costs of software development and lead to more reliable software.

The Wikipedia article on the history of SE was, at the time of writing (2014) quite good up until 1989. Then I think it lost its way.

Key dates in the history of software engineering are:

1968: Nato conference on software engineering. Publication of Dijkstra’s note on the dangers of the goto statement in programs.

NATO conference proceedings and conference info

Early 1970s. Development of the notions of structured programming. Publication of Parnas’s paper on information hiding. Development of Pascal programming language. Development of Smalltalk languages which introduced notions of object-oriented development.

Late 1970s. Early use of software design methods such as Yourdon and Constantine’s structured design. Development of first programming environments.

Early 1980s. Development of the Ada programming language which included notions of structured programming and information hiding. Proposals for software engineering environments. CASE tools introduced to support design methods. Development of algorithmic approaches to software costing and estimation. Publication of the 1st edition of this book as the first student textbook on software engineering.

The history of Ada

Late 1980s. Increased use of object-oriented programming through languages such as C++ and Objective-C. Introduction of object-oriented design methods. Extensive use of CASE tools.

Early 1990s. Object-oriented development becomes a mainstream development technique. Commercial tools to support requirements engineering become available.

Late 1990s. Java is developed and released in the mid-1990s. Increasing attention paid to notions of software architecture. Client-server distributed architectures are increasingly used. Notion of component-based software engineering is proposed. The UML is proposed, integrating several separately developed notations for representing object-oriented systems.

The history of Java

Early 2000s. Use of integrated development environments becomes more common. Use of stand-alone CASE tools declines. Use of the UML becomes widespread. Increasing use of scripting languages such as Python and PERL for software development. C# developed as a competitor to Java. Agile methods proposed and many companies experiment with these approaches.

Agile software development: A tour of its origins and its authors

2010 –. Emergence of web-based systems and software as a service. Services become the dominant approach to reuse and agile methods emerge into the mainstream. Agile approaches evolve to cope with larger system development. An app industry emerges to develop software for increasingly capable mobile devices. Government and enterprise systems continue to grow in size.