A Brief History of Software Engineering

  title={A Brief History of Software Engineering},
  author={Niklaus Wirth},
  journal={IEEE Annals of the History of Computing},
  • N. Wirth
  • Published 1 July 2008
  • Computer Science
  • IEEE Annals of the History of Computing
This personal perspective on the art of programming begins with a look at the state of programming from about 1960, and it follows programming's development through the present day. The article examines key contributions to the field of software engineering and identifies major obstacles, which persist even today. 
Software Engineering: History
  • D. Grier
  • Computer Science, Engineering
    Encyclopedia of Software Engineering
  • 2010
Softwareengineering has drawn heavily from other engineering fields, notably industrial engineering and quality control, and has grown into afield that describes, designs, creates, deploys, and maintains software systems.
Modelled on software engineering: flexible parametric models in the practice of architecture
In this thesis, there is growing evidence that parametric models employed in practice lack the flexibility to accommodate certai, and the relationship between the design of software and the designs of flexible parametric model is considered.
The practices of programming
Accounts spanning software engineering, bricolage/tinkering, sketching, live coding, code-bending, and hacking are explored, offering potential to inform programming education, tools and work as well as future research.
Towards an Anatomy of Software Craftsmanship
The Manifesto for Software Craftsmanship was formulated as a reaction to how the Agile methods were practised, and in 2009, the concept of software craftsmanship has early roots in computing.
Assembling a prehistory for formal methods: a personal view
  • T. Haigh
  • Computer Science
    Formal Aspects of Computing
  • 2019
Haigh explores some relevant ideas from academic history, sketches historical connections between formal methods and other areas of computer science, and concludes with some suggestion for and challenges to formal methods participants who aim to tell the story of their field.
A model of a system is a description or specification of that system and its environment for some certain purpose, a model is often presented as a combination of drawings and text, and is usually the model of an abstract syntax.
A Software Cost Model to Assess Productivity Impact of a Model-Driven Technique in Developing Domain-Specific Design Tools
This work states that modelling languages support the design of software services in the form of domain models, which become the main development artefacts, which are then transformed using code generators to the required implementation.
Strategies for the intelligent selection of components.
This investigation has focussed on finding and implementing strategies to enhance the selection of software components, targeting characterisation, process, strategies and evaluation using the Spiral Development Model.
Architecture-Driven Integration of Modeling Languages for the Design of Software-Intensive Systems
This thesis contributes to Software Engineering research and practice by proposing the extension and integration of formal and semi-formal modeling languages in a multiple-view software architecture, combined with domain architecture, which are used in practice to develop a family of distributed real-time systems in the road traffic domain.
Beyond Hard and Soft OR: operational research from a software engineering perspective
  • M. Vidoni
  • Computer Science
    Journal of the Operational Research Society
  • 2021
This paper proposes OR Engineering to tackle the model/program perspective, and identifies five areas for future works, intertwined between Soft OR and OR Engineering: agility, documentation of versioning, technical debt, systems testing and architecture.


A critical review of the state of the programming art
What follows is intended not as a scholarly review of the programming art, but as a personal appraisal. The bias is that of one interested in the subject of machine organization and its relation to
An overview of Ada
  • J. Barnes
  • Computer Science
    Softw. Pract. Exp.
  • 1980
The body of the paper is an informal description of the main features of the final language as revised after the Test and Evaluation phase of the DoD project.
Structured programming
The first monograph has suggested that in analysing a problem and groping towards a solution, a programmer should take advantage of abstract concepts such as sets, sequences, and mappings; and judiciously postpone decisions on representation until he is constructing the more detailed code of the program.
The programming language PASCAL
  • J. Wakerly
  • Computer Science
    Microprocess. Microsystems
  • 1979
Communicating sequential processes
This paper suggests that input and output are basic primitives of programming and that parallel composition of communicating sequential processes is a fundamental program structuring method. When
A Plea for Lean Software
The paper discusses some causes of "fat software" and considers the Oberon system whose primary goal was to show that software can be developed with a fraction of the memory capacity and processor power usually required, without sacrificing flexibility, functionality, or user convenience.
Cooperating sequential processes
This chapter is intended for all those who expect that in their future activities they will become seriously involved in the problems that arise in either the design or the more advanced applications
Assigning Meanings to Programs
This paper attempts to provide an adequate basis for formal definitions of the meanings of programs in appropriately defined programming languages, in such a way that a rigorous standard is
Abstract types defined as classes of variables
The concept of “type” has been used without a precise definition in discussions about programming languages for 20 years, but the need for a widely accepted definition became clear in discussions of languages that allow users to add to the set of possible types without altering the compiler.
Notes on structured programming
The final author version and the galley proof are versions of the publication after peer review that features the final layout of the paper including the volume, issue and page numbers.