I think "software engineers aren't really engineers" is putting "real engineering" on a pedestal that is borne of ignorance. Hillel Wayne's engineer interviews were eye-opening on this: https://www.hillelwayne.com/post/are-we-really-engineers/
Programmers calling themselves software engineers suddenly is a very recent phenomenon (barely a decade). Dunno who pushed that, but it's mostly basically (cognitively difficult) Lego at this point.
That said, it's also on the order of a hundred years younger a discipline and our theory is not so well developed.
Try longer than my career (approaching 30 years in the business), often pushed by the business and kicked into high gear with the rapid need for development resources with the combination of Y2K mitigation and the first dot-com boom.
Yes, there are a lot of "developers". But there are also software engineers, even if our engineering craft is less-well developed by the standards of civil engineering or mechanical engineering. I understand engineering organizations (like those in Canada) who oppose the use of the term "software engineer" because there's no common code of practice or standards in the same way that those who wear the iron ring claim is incorrect.
I think that we, as a profession, need a code of ethics (and the ACM has a good one, https://ethics.acm.org/code-of-ethics/) and the application of software in certain cases should absolutely be regulated the same way that the various physical engineering practices are (healthcare, AI, finance, legal applications) so that there are consequences for the businesses and potentially the software engineers involved with those businesses when they cause harm (see sentencing guideline software in the US; see the contract that developed the Royal Mail "audit" software that could never work as advertised; see the rampant fraud that is crypto; see the abuse of generative models to software-wash copyright violations).
But the lack of regulatory bodies does not mean that there's not a practice of engineering involved, it just means that there's no regulatory body that governs said practice.
> Yes, there are a lot of "developers". But there are also software engineers, even if our engineering craft is less-well developed by the standards of civil engineering or mechanical engineering. I understand engineering organizations (like those in Canada) who oppose the use of the term "software engineer" because there's no common code of practice or standards in the same way that those who wear the iron ring claim is incorrect
Just to clarify, there's no issue in Canada with "software engineer" specifically. "Engineer" is the protected term, and you have to be licensed to use it. So the issue applies to calling yourself any kind of engineer without being licensed.
If you are a licensed professional engineer in the software field, you can refer to yourself as a software engineer. This is just uncommon because there are not a lot of programs that grant BEng in software, the licensing is rarely relevant, and most people take CS anyway.
> "Engineer" is the protected term, and you have to be licensed to use it.
The IEEE documented that a little different:
It is the IEEE-USA position that:
• Individuals who have graduated with an engineering degree from an ABET/EAC accredited program of engineering education should not be prohibited from using the title “Engineer.”
• The protected titles “Professional Engineer,” “Licensed Engineer,” “Registered
Engineer,” and variations thereof, should be reserved for those whose education and experience qualify them to practice in a manner that protects public health, safety and welfare -- and who have been licensed to practice engineering by a jurisdiction.
That seems to me to be a much more sensible position than that of the provincial licensing bodies here in Canada, who attempt to regulate all uses of the term "engineer", even though many uses are orthogonal to the regulated profession.
The objection is IMO as linguistically specious as the one aimed by MDs against PhDs. Both are entitled to the honorific Doctor, and context is as important as anything else.
Ah yes. Meanwhile, my friend who's a mech-e at a car company starts from scratch on every single last project, never reusing components, and also machines every component from scratch because there's no such thing as McMaster or any other vendor. When he works on a project, the physical parts never ever fit together like Lego. It's not like he'd use calipers or something to do what's called measuring (twice!) so that things fit together.
There are plenty of places to demand more rigor from people writing software before considering it engineering, but reuse of parts, and having them fit together nicely is a weird one.
In the 90s it sounded pretentious and people used to joke about it. In the early days of Google they tried to label themselves as engineers to set themselves above the rest of silicon valley. It was a way to try to signal that their work was somehow more technical
I have a different take. Engineer is basically synonymous with application physicist. Someone why applies the laws of physics to achieve a goal. I don't think this is so much a pedestal, or why some software engineers are passionate. Is being a computer scientist somehow negative?
I think of applied physicist as something very different, closer to science than engineering. The kinds of people who research new battery chemistries, or the techniques to unlock new semiconductor process nodes. Basically, scientists do hardcore research and expand the field, while engineers apply the techniques and formulas that the scientists have discovered, and craftsmen combine prepackaged modules built by engineers for a job.
So an applied physicist discovers the light-emitting diode. An electrical engineer designs an LED light panel. An electrician wires light panels into a home.
Likewise, a computer scientist discovers NFA reduction, an engineer uses it to build a regular expression compiler, and a developer writes a regex to validate email addresses.
An electrician who designs a complex light panel using 120VAC for use in a habitable or public building needs to submit the plans to the building department to get a permit and certify that it's not a fire hazard. You need to be a Licensed Engineer™ to do certain levels of certification.
People certified to be licensed engineers didn't necessarily graduate from a School of Engineering at a famous university that is also filled with physicists and mathematicians and English literature. Instead they need to study, learn, and pass the tests that legally certify them as Licensed Engineers™ to keep us all safe. It's much of the same material, overlapping, but not the same. They're less likely to consider themselves ready to move over to building rocketships to the moon on the basis of their bachelors degree.
This is the source of all the debate about who is an Engineer and who is not. Licensed Engineers don't want to consider unlicensed engineers as engineers. People who went to universities and had to study a dose of liberal arts along with control theory to get their "Engineering degree" don't want to consider the choo choo Train Engineer™ as an engineer.
In the US there is a bit of academic snobbery around, it's not universal but, University of Michigan is harder to get into academically, and a little more high falutin'. Michigan State is a bit more plebian but more practical. University of Washington vs. Washington State, same thing, and so on. The licensed engineers are more likely to come from the State school, the unlicensed engineers more likely from the University of. Both want recognition for their training, which makes sense.
I'm exaggerating for effect, but this is the issue. Whether software engineers are engineers is a minor skirmish on the flank of this larger war, both because there are no certifications for computer engineers, and because mathematicians are not engineers and programming languages can be studied from a mathematical perspective or from something closer to Electrical Engineering.
I'm confused, is the electrician in this example the Licensed Engineer(tm)? They definitely have to be licensed, since they can burn your house down if they don't know what they're doing. And checking that the plans aren't a fire hazard isn't done by an electrical engineer, is it? I definitely wouldn't trust the electrical engineers I went to school with to do DIY home wiring, by the same token.
To the extent that Australia and the US are similar, various things require a licensed tradesperson to certify.
The sticking point is what licensed tradesperson would sign off on work done by another unlicensed person?
Here, I've often done full 240 V AC wiring and gas fitting for houses, workshops, abd glass blowing | ceramic studios .. but never connected or made any of it live, instead I've called in local tradespeople to inspect and test the work from end to end, just as they would check the work of an apprentice, and then certify it.
It's been cheaper for me that way as well as allowing for better control of how I want things to go, it's been less hours work for them in an area where they're in high demand and a bit of a win-win.
On at least two such jobs I've been advised to change some details as the most recent codes had changed and required things I'd been unaware of, no drama.
And no, in general university electrical engineers don't leave university with the practical trades skills to wire looms between power plants and racks of mills, screens, and grinders drawing high voltage high amp three phase and requiring complex control and instrumentation circuits.
They can sketch that out but they rarely get the practical cable pulling, wire cutting, box layout, etc experience outside of an actual trade apprenticeship type role.
absolutely, you nailed it! "collegy" engineers don't know a damn thing about safety in the home, and what causes electrical fires. They know kinda ("resistance results in heat") but they don't know specifically a zillion little gotchas that have killed thousands of people in electrical fires.
if you want to cut a hole in your wall to put in a window, it could be as easy as cutting a hole and putting in a window. Or, it could be that it's a "load bearing" wall, and you need to put a wide I-beam over the new window to safely redistribute/bear the load that the formerly intact wall was carrying. Or, you could have chosen a spot on the wall that has a column/pillar that's holding the roof up. Probably you'd choose a different spot, but if wanted that spot you could hire some engineers to figure out a new set of "cantilevers" or "flying buttresses" or (i'm not this type of engineer, I'm just throwing around words).
As the work you do becomes more and more dangerous to more and more people, you need somebody with higher levels of certification/licensure to approve the plan.
an electrician, who has a license, is not an engineer, but a good electrician could become one if she wanted, it would require study and exam passing. Some electrical work an electrician is allowed to do, they can "self certify", but the city might spot inspect it. The next level of complexity they perform the work, but a building inspector needs to inspect. The next level of complexity, the plans need to be certified and approved in advance.
I'm sort of making this up, piecing it together how steam fitting is done (that's mechanical engineering), how air handling is done (also mechanical engineering), plumbing, etc. But this is the general scheme.
some of this is legacy disputes left over from the 19th century. When they were inventing electrical circuits, everybody was an engineer and everybody could do everything, and people just invented stuff on the spot and tried it. After enough people died, it was decided we needed standards. And slowly a white collar/blue collar sort of distinction started to emerge, for work that required calculus vs work that requires knowledge of lots of specific requirements.
Calculus people design cars and planes with smooth sleek shapes, but those items can't be constructed without the other type of engineer saying "hey, that's not strong enough"
I liked these interviews but I do find the result kind of... apathetic? I feel like you can read these and just come to a sense that nothing is engineering because everything is amorphous, which is not (I think) Hillel’s thesis but he doesn’t really want to anchor the discussion in principle because he is fundamentally asking for opinions.
For a more principled approach, I would say (as one of these “licensed engineers who has not done as much actual engineering”) that engineering as I have seen it kind of has three really major themes:
• Prototyping/building/creation. Tinkering. I guess the reason we don't talk about this is that everybody finds it trivial? But when you talk to ChemEs and they discuss optimizing pipelines for chemical processes you do see that it can get a little abstract so it's worth pointing to as a baseline.
• An underlying scientific theory that guides the models used. Building stuff has happened since way before science but engineering is clearly a postscientific endeavor, “here’s the underlying mechanical principles of how this works.” This is probably the sketchier principle in how we talk about “is this software design really engineering,” we tend to not have a firm scientific understanding of the problem domain of building software. Some things like CAP theorem, patch theories in version control (Darcs, Pijul), distributed consensus algorithms, TCP/IP, I would say really rise to that challenge and say something hard-learned about real systems. Things like OS kernels also have so much trial and error, so much prototyping that it feels like “yes you really did do enough hypothesis-test-reëvaluate cycles that the result embodies a model of the problem domain that counts as a scientific understanding.” But a lot of our work is just gluing systems together and that seems more “electrician” than “electrical engineering.” Now, science uses math, so people think of engineering as highly mathematical, I am not sure that it has to be. Whereas I do think it has to be scientifically based.
• The last big thing that I think we don't talk about enough is risk assessment. The reason that we’re doing all of this science and math to build a bridge, is so that we can assess how strong it needs to be to just barely survive the peak loads that it will ever have, and then double that strength just in case.
I think that when we say “not all programmers are doing software engineering” a good proxy for that is looking at, first, do you have a scientific model of the sorts of approaches that you can do; and then, do you use it to assess numerically the kind of loads that your system will come under up-front and design accordingly—writes per second, queries per second—and set realistic targets and choose caching and consensus and whatever else to achieve those and measure that you have... Or do you work via crude heuristics, “we use Kubernetes so I'm sure it will scale later, we do ‘best practices’ so we don't have to think about those,” and related kludges where we can comfortably say you're just tinkering rather than being principled about it.
And then, this reveals that maybe you don't need to be doing engineering, maybe you really do just need to tinker in the problem space while you achieve better product-market fit. Maybe you are doing science rather than engineering, and that is okay. Like, the idea that you are going to launch the next space shuttle with your reliability, I am sure that makes for a very energized, focused workplace, but it's not a precondition, it's not the only way to get there.
When did software estimates ever factor into deadlines? I have always found that my estimates + a bit of padding are generally correct. Then management just picks an arbitrary due date that has nothing to do with programmer estimates.
It isn't difficult to find non-software projects that overshot deadlines by years and costs by tens of millions or more, just to still have a leaky roof. Including, whether you believe it or not, engineering work.
Because software development isnt an engineering task.
Engineers are good at building bridges, and artists are good at making paintings. That doesnt mean it is a good idea to have the engineers paint paintings.
It might help to learn a little more about Engineering.
Leaving aside the four splits, Civil, Mechanical, Electrical, and Electronic with the obvious corollary that few Engineers build bridges, I'm reminded of my first student Engineering project back in 1983 (ish).
Building a sheep shearing robot - hardware and software, with no pre existing libraries of control software, etc.
A great chunk of software was written by Peter Kovesi .. a mechanical engineer still working on computer vision projects today: https://peterkovesi.com/projects/
You sound more than a little ignorant of the breadth and depth of talent in the world and more than a little inclined to believe that people can be boxed up and ring fenced by your particular world view.
No sheep were harmed in the making of this robot. Sheep literally fell asleep when secured.
Nobody reasonable is saying that software isn't important, technical, or valuable. It isnt a dig.
It just has to do with the subject matter and definition of Engineer. The clearest delineation is that an Engineers work is the application the laws of physics. Software developers are more akin to Scientists than Engineers. They work in the arrangement of logic and the semantic relation of abstractions.
That is to say, Engineers work within a framework of rules, and Computer scientists construct frameworks of rules.
The definitions you just came up with are completely arbitrary. Worst yet, your definitions aren't even shared.
It's hard to pin down exact agreed upon definitions in English, but I searched many popular dictionaries and none of them have "Engineers work is the application the laws of physics".
Fair enough if you want to have personal definitions of words, but don't try to gaslight the rest of us into thinking your understanding is the canonical one.
Here's my facetious definition to illustrate how dumb the discussion - I think an engineer is a person who works with ENGINES (duh it's in the name). Obviously people who build bridges aren't engineers; do bridges have engines?
I brought up a definition shared by many people, and did so without hostility. Do you have a real definition that you can bring to the table? Is there a reason why you are taking things personally?
Can you articulate the difference between an engineer and a scientist?
No you didn't have hostility, but you had a boat load of pretentiousness, and unfortunately that's often indistinguishable.
> I brought up a definition shared by many people
What you did is discount the definition used much more widely and commonly. You didn't just bring up a new possible definition, you declared another one invalid by saying "Because software development isnt an engineering task".
If you want social counter-proof you can go to LinkedIn and type "Software Engineer" to see how many people consider Software Engineering to be a form of engineering.
> Do you have a real definition that you can bring to the table?
Yes, the definition that I think has the most use to society and is most precise while still being inclusive is "Engineers are people who solve real world problems in resource constrained environments". In fact I think the best engineers work across mediums, including software. For example, someone who engineers a robot has to do mechanical and software.
> Is there a reason why you are taking things personally?
I'm not, not sure what leads you to conclude this.
> Can you articulate the difference between an engineer and a scientist?
That’s the point. It’s not software developer’s fault that things are the way they are. Anyone with strict engineering discipline or whatever is welcome to create software the right way.
I learned ForTran whilst studying Civ Eng. back in '89 - '91 . Notice the two digit year - you software lot gave us the Y2K snag 8) It seems rather silly these days when terabytes are trivially available but when every bit, byte and nybble costed rather a lot, it nearly made sense.
If software techies/engineers wish to push back, may I suggest: Tay bridge, Tacoma Narrows, Millennium bridge and concrete cancer. Comet commercial jet airliners and the many snags that lead to fillets and rounded corners on ships int al. Do we count Titanic as "user error" or inappropriate expectations exceeded?
Building as practiced by hardware engineers is not linear in number of unique components. Building as practiced by software engineers is, at a terrible price.
But I think it's also partly illuminating the fact that hardware engineers are true engineers, while software engineers mostly aren't.