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?
-
5So... software programmers/developers/architects can't use formal specifications and methods?– FrustratedWithFormsDesignerCommented May 23, 2012 at 17:43
-
3Is it well know who the first programmer was? I would guess "Ada Lovelace" but that may be debatable as Babbage's computational engine was only theoretical (I think) while she lived.– Loki AstariCommented May 23, 2012 at 17:46
-
@Loki Ada was the first programmer, we already decided that, with Archimedes also being a solid candidate ;) - Also, yes the Analytical Engine wasn't build in either Ada's or Babbage's lifetime.– yannisCommented May 23, 2012 at 17:59
4 Answers
The first discussions of software engineering began in the mid-1950s, which places it around the same time as the SHARE user group previously mentioned in a now-deleted answer.
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.
-
"The widely accepted beginning to software engineering as a profession was at the NATO Science Committee conference in 1968 in Garmisch, Germany." though the committee used the term as a straw man, as noted in the extract quoted in programmers.stackexchange.com/a/149886/4051.– user4051Commented May 23, 2012 at 21:40
-
@GrahamLee That is true, however their work led to software engineering as not only a profession, but by the late 1990s, an academic discipline in its own right. Straw men typically get built up and (no pun intended) fleshed out, and that's exactly what happened.– Thomas Owens ♦Commented May 23, 2012 at 21:55
-
pretty sure dijkstra would have been horified to be called a software engineer.– jk.Commented Nov 21, 2017 at 21:16
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.
-
Engineering follow deterministic and linear rules. Good point made. So can software engineering be called Software Modeling since modeling in economics is naturally non-linear and complex (though theoretically a lot of linear models are taught in economics) Commented May 24, 2012 at 12:06
-
-1: I don't entirely disagree with your first sentence, but the argument is full of holes. Claiming software is not deterministic, if software isn't, what is? Full of bugs - just because a majority of us cannot get it right does not mean it is not possible. Buildings fell down and killed people in the city I live because a "Civil Engineer" got the design wrong, and another because the building was not constructed to the design, just one recent example of professional engineers being human.– mattnzCommented Jun 27, 2012 at 22:41
-
I said physics is deterministic, software doesn't follow the rules of physics like material based engineering does, humans don't alter the rules of physics, sad you down voted me because a lack of reading comprehension. A metal at a given specification that tests to that specification is going to be deterministically able to perform to those specifications, no software, especially concurrent software system can claim that.– user7519Commented Jun 28, 2012 at 0:17
-
@Jarrod -1: In software engineering, software can be also written to specification and tested to prove that it conforms. It is a logical fallacy to believe software cannot perform to specifications. See IEEE 830-1998 and regarding the definition see SEVOCAB pascal.computer.org/sev_display/index.action.– user42242Commented Dec 30, 2012 at 1:24
-
1Physics isn't deterministic. Heisenberg's uncertainty principle means that you don't know what state a system is in, and quantum theory means that you don't know what it is going to do even if you did know what state is was in.– Simon BCommented Nov 22, 2017 at 8:51