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. 
Beyond Hard and Soft OR: operational research from a software engineering perspective
This paper argues that current practice in the Operational Research (OR) discipline needs to tackle management problems from a broader point of view by including a new perspective. While Hard OR is...
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 I consider the relationship between the design of software and the design of flexible parametric models. There is growing evidence that parametric models employed in practice lack the
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.
ion A view of an object that focuses on the information relevant to a particular purpose and ignores the remainder of the information. [IEEE Std 610.12-1990] In order to focus on some aspect of a
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.


A critical review of the state of the programming art
  • R. Barton
  • Computer Science
    AFIPS '63 (Spring)
  • 1963
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.
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.
Programming with abstract data types
An approach which allows the set of built-in abstractions to be augmented when the need for a new data abstraction is discovered and is an outgrowth of work on designing a language for structured programming.
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.