| It's blurry and not so clear cut but certain ranks need to be earned otherwise it's fraud. Like all the "engineers" on HN who are really just programmers. There's a word that's been bastardized over the last three decades. It used to be a common joke: A garbage man is a "sanitation engineer." A housewife is a "domestic engineer." A farmer is an "agricultural engineer." Then for some reason, the SV bubble latched on to "software engineer," without understanding that it was supposed to be a joke. Maybe they felt bad because they had to work with electrical engineers. I ran into a guy in a bar once who introduced himself as a "software engineer." I asked what engineering board licensed him to use that title. He said none, but that he's an "engineer" because he designs complex systems. Structural engineer = engineer. Electrical engineer = engineer. Architectural engineer = engineer. Guy who pushes buttons = programmer. California state law defines engineer: "consultation, investigation, evaluation, planning or design of public or private utilities, structures, machines, processes, circuits, buildings, equipment or projects, and supervision of construction" |
Why? Because the ability to program is a subset of what a software engineer needs to be able to do. Granted, it's an IMPORTANT subset, but to create, or "engineer" good software on any truly useful scale, one needs other very, very important skills.
Engineering is based on the idea that you are using some degree of scientifically sound principle to create something in practice. That applies to creating software. There are clear, scientifically rigorous axioms, corollaries, etc that dictate ways that software can be written effectively, from the basic instructions a computer can process all the way up to the highest levels of abstraction. Software standards are developed that define ways that software should be written to take advantage of this scientific resource, and a huge part of writing effective and useful software is managing how one spends their time creating, refactoring, testing, and deploying/publishing that software. That is NOT an easy problem, and it is distinct from programming in and of itself.
The idea that a "board" has to exist to say whether or not something is an engineering practice doesn't hold water because it's the science underpinning the practice that makes it engineering.