It's fairly well known who the first programmer was but who was or were the first software engineer(s)? By software engineer I mean someone who uses formalized specifications and methods to deliver software not just a batch programming job. When was the term first used?
The widely accepted beginning to software engineering as a profession was at the NATO Science Committee conference in 1968 in Garmisch, Germany. The conference report (PDF) is often considered to be the very first definition of software engineering. A second conference, held in 1969 in Rome, Italy, was also sponsored by the NATO Science Committee and continued the work of the first (conference report PDF). You could define the attendees of this conference as the first software engineers.
However, there is some evidence that the first person to coin the term "software engineering" was Margaret Hamilton. She started to use the term at MIT during the early days of creating software for the Apollo missions.
Some of the earliest contributors to software engineering include:
- Edsger W. Dijkstra, creator of structured programming (1960s) in addition to numerous contributions to mathematics and computer science
- C.A.R. Hoare, creator or Hoare logic (1969) and Communicating Sequential Processes (1978) in addition to the creation of Quicksort
- Winston W. Royce, author of the paper that formally described the Waterfall model and how it was inappropriate for effectively building large-scale software systems (1970)
- David Parnas, credited with creating information hiding (1972) as well as a strong promoter of professionalism and ethics in software engineering
- Fred Brooks, author of The Mythical Man-Month (1975) and other essays about software project management
- Michael A. Jackson, creator of Jackson Structured Programming (1970s) and Jackson System Development (1980s)
- Edward Yourdon, worked on the structured analysis techniques (1970s) and the Yourdon/Whitehead (1980s) and Coad/Yourdon (1990s) object-oriented analysis/design methodologies
- Victor Basili, author of numerous reports and papers on the software development process and often attributed to starting empirical software engineering, specifically the goal/question/metric approach, the Quality Improvement Paradigm, and the Experience Factory while working at NASA's Software Engineering Laboratory from the mid 1970s through early 2000s
- Barry Boehm, creator of COCOMO (1981), the Spiral Model (1986) COCOMO II (2000), the Spiral Model, and author of numerous papers and books about software development process, software metrics, and software cost models (most notably Software Engineering Economics, 1981)
Searching for "father of software engineering" tends to turn up many different names, since there were many people doing both academic research, analysis of software projects, and applied software engineering work at universities and companies around the world. However, David Parnas (professionalism/ethics), Fred Brooks (software project management), Barry Boehm (metrics and cost), and Victor Basili (empirical software engineering) tend to come up pretty frequently in their respective fields.
Something else to consider is that software engineering is a team activity. Many of the people that I named above were leaders of teams or organizations, their work was supported by any number of people "in the trenches" who might never get credit for being a part of a project or research effort that today is viewed as the beginning of software engineering.
From NATO's Software Engineering report in 1968:
In the Autumn of 1967 the Science Committee established a Study Group on Computer Science. ... In late 1967 the Study Group recommended the holding of a working conference on Software Engineering. The phrase 'software engineering' was deliberately chosen as being provocative, in implying the need for software manufacture to be based on the types of theoretical foundations and practical disciplines, that are traditional in the established branches of engineering.
This implies that there were software professionals beforehand, but the job title didn't appear until the late 1960's.
I'd say Herman Hollerith pretty much had "formalized specifications and methods" down in his design for a census tabulating machine back in 1889. His specs are pretty typical for engineer specs from that era. While there's a lot of hardware involved, you can take the software portion of his specs and write a decent tabulation program using modern tools.
I would argue that there isn't a first software engineer because I don't think that Software development is an engineering discipline to begin with.
The American Engineers' Council for Professional Development (ECPD, the predecessor of ABET) has defined "engineering" as:
The creative application of scientific principles to design or develop structures, machines, apparatus, or manufacturing processes, or works utilizing them singly or in combination; or to construct or operate the same with full cognizance of their design; or to forecast their behavior under specific operating conditions; all as respects an intended function, economics of operation and safety to life and property.
The bold part of the quote above is where is my emphasis.
Engineers work with materials that follow rules of physics which are deterministic, there are not any materials in software development, and software, especially concurrent software is not deterministic by nature.
Material based engineering can prove the behaviors of a design under any conditions because those conditions are finite because of the laws of physics.
Even with critical systems software that run nuclear power plants, medical equipment and other control systems, there is no way to prove that the absence of bugs in a system because the behavior of the inputs of a system are not finite and thus the behavior of the system is not deterministic.