// HACKER NEWS — CYBERSECURITY
What makes software development engineering
People who make software go by many names. Developer is the most common, while programmer sounds neutral and a little traditional. Coder literally means someone who writes code, but it can also be used disparagingly, suggesting someone who takes a passive role, writing code without participating in the many other activities involved in software development. At the other end of the spectrum is the software engineer.
The title software engineer has a rather different feel. Somehow, a software engineer seems more professional than a coder. For some reason, they seem better at mathematics than a programmer. And somehow, their work seems more important than a developer’s. In fact, in some Canadian provinces, titles in computing such as “software engineer,” “computer engineer,” and others containing “engineer” are (in principle) reserved for people licensed as engineers by the provincial engineering regulator. Many people assume that someone with the title of engineer holds a recognized professional qualification or license.
All of this is about the subjective impression the title engineer gives us. But if many people share that impression, it is worth asking why. If software development were self-evidently a form of engineering, there would be nothing special about the title software engineer in the first place. Where does this impression come from? Why does software engineering feel different from mechanical, electrical, or civil engineering? And what makes software development engineering?
NATO Software Engineering Conference (Robert McClure, Brian Randell)
There is no single definition of engineering, but it can generally be described as a field that systematically solves problems by applying mathematical and scientific knowledge within various constraints to meet human needs. UNESCO[1] and the US National Academies[2] offer the following definitions of engineering.
Engineering is the field of practice, profession and art that relates to the development, acquisition and application of technical scientific and mathematical knowledge. It is about the understanding, design, development, invention, innovation and the use of materials, machines, structures, systems and processes for specific purposes.
Engineering is both a knowledge of the creation and design of human-made products and processes and a problem-solving method called design under constraint.
Attempts to give software development the same systematic foundations as other engineering disciplines date back to the early days of computing. The 1968 NATO Software Engineering Conference[3] is often regarded as the starting point of software engineering. A recurring concern at this conference, held in Germany, was that software was growing more complex as its scale and importance increased rapidly. This became known as the software crisis. The participants reached no consensus, but they seem to have broadly shared the view that software development, still a young field, needed methods and structures comparable to those of established engineering disciplines to address its immediate problems. The editors of the conference report wrote this about the phrase 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.
Thomas Haigh, meanwhile, sees greater significance in a debate that took place before the conference within IFIP Working Group 2.1, which was developing a successor to ALGOL 60[4]. The prevailing view in the group was that it should be possible to express complex programs by combining a small number of basic concepts. This philosophy strongly influenced the ALGOL 68 draft. Those in the group who cared more about making complex programs reliable than about how to express them opposed the direction ALGOL 68 was taking. The opponents o