Programmers should stop calling themselves engineers (2015)
theatlantic.com
theatlantic.com
The lecturers that had actually worked in real industry for any period of time had another line, "Most of what you do as engineers could be done by many people, but it the engineer that does it safely in a predictable time, budget and quality".
There is no, "move fast and break things" in designing bridges, the electrical grid, chemical plant, airplanes, or even the town sewerage system. If there is it is normally baked in as a "proof of concept" phase very early on.
When it comes to unwanted consequences, the whole engineering approach is built around conservative, known approaches with low risk of harm to humans, demonstrable in court if need be.
Often the exposure of humans to harm from engineering decisions is involuntary, whereas to software is voluntary. There are even special branches of engineering that use software in preventing harm to humans that are tightly controlled and have certified practitioners (Functional Safety - IEC 61508)
I don't think people who write software for a living are any less, or less important, than engineers. In recent times it is hard not to argue that production of software has been instrumental in changing the world more rapidly than any other one profession or pursuit in the history of man.
But I do think that a lot of the time the workflows and methodologies employed in the pursuit of these very rapid developments we have witnessed are not of an engineering paradigm.
The majority of software development lives by different rules (appropriate for the outcomes, consequences and potential rewards) and should be considered as a different kind of activity, with it's own approaches.
Thank you
I did Computer Engineering in EE, and I think there are much more Engineering involves in that doing very low level, direct to hardware and Firmware stuff.
But to me anything above OS is purely Software Writer, especially on the web. I remember DHH said something similar in one of his talk. It is more like you don't really know how it works, but it works and that is ok. No one bother about writing Spec anymore, mainly because your spec changes in the mid week. You don't "design" before you code.
And these software engineers gets to be paid a lot higher than other engineers in different fields. You get to be Engineers within 3 months of a BootCamp.
I trained as an electrical engineer (but I'm now %100 software), yes there was a lot about responsibility, safety etc, but to me the core of engineering and in being an engineer is to be able to apply theoretical math and physics concepts to real world problems.
That is why I did what I did, I didn't want to be an engineer to be an on time, on budget, project manager. I did it to combine design, maths and physics to build real world solutions to problems.
And this is why I would 100% consider myself a software engineer.
The accreditation and certification is missing (so far) because we are still figuring out the best ways to apply engineering to building abstractions (which is what I believe our field is). To me this doesn't make us any less engineers.
In this sense, quality doesn't mean "goodness", rather it implies predictability and repeatability. eg Are you doing what you said you would do to make something of "goodness" you defined?
Under the ISO standards it is entirely suitable to have a quality assurance system in your company that says, "we will make minimum effort to make to minimum quality, to the measurable metric of x failures per y products and intended product life span of z days".
The colloquial use and technical use of the word quality are quite different.
Software development feels the same as other engineering design. You generate requirements, prototype, test and iterate.
To argue that it's not engineering because it's not regulated is stupid, partly because most engineering fields outside of buildings aren't particularly regulated anyway, and partly because there's loads of regulations which are just as relevant to software engineering.
Generally safety standards apply to the whole system - not just the electronic design, but the software and hardware interaction. The complexity of software means you have to take a slightly different approach to actually quantify risk of failure, but it's still very much engineering.
Back in Portugal no one can call themselves Engineers if their degree wasn't done at an university validated by the Order.
And even then, you are only allowed to sign certain kinds of projects after getting the professional title.
Naturally coders, with roles similar to construction workers, can be anything.
'Engineer' can mean a couple of different things depending on culture & context, including I think a 'person who works on engines'. However, professional engineers are technical decision makers.
A good engineer will think through a project from start to finish, anticipate all the decisions that will come up, and make them. Not obvious trivial decisions like 'does the bolt need tightening' but the big picture ones like 'is this standard acceptable?', 'is this trade off acceptable?'.
Big companies separate engineering from programming. Small companies will not have the resources, so the roles will be combined. Adding a dependency, changing an API and choosing major data structures are all engineering decisions. Deciding how comprehensive the testing framework needs to be. Maybe some algorithm choices.
Typing Python code is not engineering. Implementing some well established algorithm like Quicksort is not engineering. Doing something using an API because someone told you to is not engineering. Writing a unit testing is probably not engineering. Move-fast-and-break-things is not engineering, although it does seem to work very well.
There is overlap. I don't see why someone who is making big picture decisions shouldn't call themselves an engineer. Being regulated and certified is only mandatory if the government says it is.
To be honest any decent dev is interchangeable between positions in a corporation, its simply better for your career.
I can create whole systems from ground to top, from design through backend and frontend with infrastructure and orchestration. Can i call myself an Engineer then ?..
Legally, I don't know. Personally, if you might be making a lot of engineering decisions then I wouldn't object. I would probably consider a lot of full stack developers to be basically engineers.
A FSD isn't necessarily making engineering decisions though. I can imagine a FSD who is expected to make all elements of a stack work together without having any real control over what composes the stack - maybe doing bugfixing, configuration and integrating new bits on demand. That wouldn't be engineering to me because there isn't a lot of control over high-level decisions.
I’m curious which companies you mean. Everywhere that I’ve seen, most people who write code are called engineers.
TBH, it just seems like “developer” or “programmer” has been mostly supplanted by “engineer” by way of title inflation, starting with big tech companies and valley-style startups.
I think it's fine, really, it's not really hurting anyone.
It is hurting everyone at the end of delivery chain.
Until people start doing returns in mass for software that breaks fast and fails to deliver, this won't change most likely.
As a teacher of mine used to say, feels like buying shoes that explode when tied the wrong way.
How about when it involves getting the best possible performance out of the given hardware architecture?
Someone who codes up QuickSort is probably, at the time of coding, not making engineering decisions because the decisions inside a QuickSort implementation have largely already been made. This is simply a view on where the dividing line sits between an engineering decision and something else.
Or is it rather the case that it is an engineering discipline with frighteningly little done to train, apprentice, vet, and self-regulate its practitioners?
Is it the nature of the work or the workers that define engineering? I'd argue the former, every time.
As for 'the public good', that sounds like a convenient definition to make a point, but didn't seem like an actual boundary one can set, beyond perhaps the common bindings of engineering ethics blatantly missing in the software world.
Engineering is mostly about making tradeoffs.
It’s not that software does things different that other engineering fields, it’s just that it faces different cost structures.
Bridges, buildings and infrastructure face huge costs when making changes in the middle of the project. Some operations make changes almost impossible, or so expensive that they are considered impossible. The worst case scenario for software is starting over, but a lot of stuff can be fixed even after release.
By the way, bridges, buildings and the like also have BIG blunders, but since they are not necessarily visible from the outside, we assume they are nowhere to be found. The internet exposes your app to thousands if not millions of people with technical knowledge, but no one can see the cracks on the main pillar of your building, so you fix it, you keep quiet and go on.
But what's frustrating to me is the blatant comparison of structural engineering with computer security. The comparison stops at the point that they're both in place to make sure nothing bad happens. Imagine building a bridge and having to fend off hundreds of adversaries continuously getting more advanced in finding ways to destroy your bridge.
Maybe the author should do more research.
It is because software plays a critical role in society that it needs to be done by engineers; but it largely isn't, and it shows.
20+ years further, I am starting to agree with many of his points.
It is a way of archtitecting systems building software, sometimes quite trivial in terms of "code lines" to an attempted known quality which suits the consequences of failing.
You generally only use it when the result will be litigation around fatalities or permanently disabling injuries, so this just proves the whole point - some software needs engineering, some software is better to produce as quickly as possible and see where it goes.
Some experience you just can't overwhelm with any amount of youthful vigor or brilliance when the consequences are substantial enough.
I know a bunch of people who worked at lockheed around here, and, like you'd get literal MIT rocket scientists with security clearances making... dramatically less than me, even though I have one of the lower paid technical roles you can find at the FAANG companies.
Where I live, and in most places - I believe - there are some traditional engineers and architects that earn more than a software engineer. However, they are outliers, a regular one is comically bad paid comparing with a regular software engineer.
Disclaimer: I worked as an architect in a previous life.
An important part of an engineer that the article fails to mention is the use of the tools of applied mathematics. If you use an RDBMS and you normalize your database, you are closer to an engineer than someone who can only handle NoSQL.
a) computer science
b) computer engineering
c) business and management
One who is an engineer (b) by training can spend most of his life implementing the wishes of the (c) people, basing his work on some results obtained by the (a) people, and the product can still be against the "public interest" as in the implementation of the MCAS for Boeing 737 MAX (where it can be said that the software was actually produced "according to the specifications" but that the "specifications" were faulty). But that doesn't mean he isn't an engineer, only that he works in an environment that is driven by the goals which aren't of "public interest."
There are even more extreme "non-public interest" stories to be told, but that just means that on many levels there should be more done to move the society to do what the "public interests" are. Which as we know is not easy at all, and surely not decided by the practitioners of of some engineering discipline themselves.
(and moderators, please add 2015 in the title).
In other fields where the title most designates that you regularly do an activity and does not imply certification and strict regulation I think it's fine to call yourself by that title even if you are a student. Many CS students are programmers, or PhD candidates in mathematics are mathematicians.
"I swear by Hephaestus, god of technology, that I will write only software that causes no harm to humans, and does not infringe on their privacy ..."
Regulators should treat software as a licensed engineering discipline though.
Needs a [2015] in the title.
I wonder what your definition of a doctor is then.
Being a guilded engineer myself but now called a software engineer, I can tell you with absolute certainty that software engineers as defined by industry today do not make the cut.
They are the equivalent of witchdoctors to doctors. Make of that what you may and then tell me again what an engineer is and what software engineer is
Security aspects are typically even worse in non-software development fields. Just look how awfully unprotected things like babyphones, elevators, cars etc. always were and are.
Only that hardware hacking is usually riskier and less convenient (and often not very rewarding).
But yeah, of course... The threshold to get started with software is lower.
What I find objectionable to the pigeon-holing is that 'engineering' is one of the most creative disciplines there is, whether you are engineering a bridge or even software. But the wider world of artists can't see this. If you use maths to make something then that is not 'creative' it is 'technical'.
This segregation of 'technical' and 'artistic' starts out in school, so if you end up as an artist making brown pots then that is deemed 'artistic' and thereby wonderfully creative despite the fact that brown pots have been made in a similar way since before recorded history. If you teach an AI system that has been trained on the Utah Teapot to make a brown pot in polygons then that can't be 'artistic', even though art only ever innovates when new mediums come along.
There is a related wrong-phrase with 'Computer Science'. How much science is there is new ways of doing things with ones and zeroes? Or is this 'technology' that we are talking about?
I am not entirely happy with the word 'developer' either. Therefore the phrase 'computer programmer' works for a general audience as in 'I just do programming' or 'oh, here is one of our programmers' (before door to darkened room gets shut). If your work gets used by people then the validation should come from the metrics that come from that, not from a title that is slightly inflated.
But I think the article is right that programmers are cheapening the term “engineer” by their incompetence. Anyone can call oneself a programmer and for a non technical business owner, there is no way to know that their programmers are not going to pepper their systems with rookie mistakes: sql injection vulnerabilities, unvalidated user inputs, unpatched software, default, shared, hardcoded or missing credentials, clear text passwords, etc. None of this is hard or expensive but this is the cause for the quasi totality of data leaks in the past.
How do we create confidence in this profession? It’s not a university degree, I am not sure any CS course even covers this basic stuff, and that does nothing for the stock of existing programmers.
Well, that's what some of the so-called software engineers actually do. And they are not necessarily doing programming.
I would agree that most of the programmers should stop calling themselves engineers because programming is not engineering per se. I would agree that we must stop considering "SE" and "programmer" synonymous in most cases. Maybe the term "software craftsmanship" can be a good alternative.
However, it does not mean that "software engineering" as a discipline does not exist. I think it exists and people doing it should call themselves software engineers. And those people are not necessarily doing programming.
There are a lot of degrees combining electrical & computer engineering. My diploma was in such a degree and my PhD was in informational technology and electrical engineering. I think the lines between the two fields are blurred and by no means do I believe that one title/specialisation is better or harder.
I started working as an EE and later on moved to coding and both fields have their own challenges and hurdles. I never felt that a person that didn’t get a degree explicitly in engineering doesn’t get to call themselves an engineer.
I disagree with the author, some of our work is definitely not engineering, making yet another e-commerce look nice is not engineering) developing browsers, web servers, cryptographic libraries, databases and all the basic tool used in the profession is definitely engineering.
There is a certain level of expectation beyond such title.
https://en.wikipedia.org/wiki/Regulation_and_licensure_in_en...
If Linux, Google, networking, etc.. were to stop working what would be the global economic cost?
If your work requires using formal methods, maths and extensive testing to ensure the reliability of the most complex systems known to man, than your an engineer not just a programmer.
Speaking of which, a CPU is typically designed in a programming language such as VHDL, so by the logic of the article Intel's engineers are mostly just programmers as well ...
A programmer is the person who wrote that software.
The article was a "lets take an ideal apple and compare it to a rotten organge"