71 comments

[ 3.8 ms ] story [ 152 ms ] thread
(comment deleted)
What makes the whole thing super weird is that where I live, "software engineers" which is to say, javascript programmers, get paid a lot more, say, than civil engineers or aeronautical engineers... so it's weird that computer technicians try to say they are Engineers rather than the other way around.
Maybe depends where you are, I live in resources city, generally speaking a good experienced engineer gets paid quite a lot more than good programmer.

Some experience you just can't overwhelm with any amount of youthful vigor or brilliance when the consequences are substantial enough.

Yeah, probably depends a lot on where. I'm just a sysadmin, the difference in pay between here in silicon valley and the cheaper parts of the US for my labor are extremely dramatic. I mean, it's dramatic for better educated programmers, too, but not nearly as much as it is for me with no degree and a less prestigious title.

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.

Suply and demand explain most phenomena.

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.

A profession can be high pay and low prestige (ex. prostitution). Engineering is more prestigious than programming, so no wonder than programmers want to be called engineers.
And in a slightly oblique way, when I was studying at engineering school (University it is called in Australia) the joke among the students was that at Uni we had two hours to get four questions half right(exams), but once we were engineers we would have as long as it takes to not make a mistake.

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.

This big difference is in a single word: responsibility. The software industry has somehow gotten away with conflating engineering and the disclaiming of responsibility. In the long run that is not tenable.
Thank You. And I am glad this topic got bought up once again.

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.

In a way I understand these comments, but I think they are drawing a very black white line in a grey area.

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.

It does exist, but sadly not widespread enough for those that care about quality.
Quality isn't the end-all be-all. Engineering is about understanding tradeoffs so that you can actually have a profitable business. It has always been tightly coupled with business. You can't build a bridge if no one wants the expense. Government is OK to regulate outcomes (like bridge can't fall down) but it's not OK for it to start mandating that every bridge must be a suspended bridge.
This is the first misunderstanding of people not involved with QA in any way. (IS9000 series).

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.

Speaking about safety, the problem is that most companies don't want to allocate time and resources to it. E.g. security is often at the bottom of the budget list. You can't really blame the programmers/engineers.
Not individual ones, at least not exactly. That's where self-regulation comes into play.
And what prevents companies to outsource the work to e.g. engineers from Asia, who might be more willing to trade moral standards for better living standards?
I feel dumber having read that.
Companies work by dividing all tasks into smaller tasks and parceling them up among the employees, aiming to specialise to knowledge of individual workers.

'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.

By your definition, anyone who is a full stack developer is actually a software engineer.

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 ?..

If you have an university degree, validated by the Order as providing the necessary knowledge to be one, then go ahead.
> 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.

> Big companies separate engineering from programming.

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.

It's a bit of a common trend in the US. Everyone who works in the medical field is called a doctor, a general partnership already has a CEO, and you are what makes you feel good.

I think it's fine, really, it's not really hurting anyone.

A professional title brings a certain level of expectations regarding the quality of work.

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.

Yes agreed. So when a German says they're an "Ingeneur" you have a certain level of expectations with the title, and probably shouldn't ask them for advice on your React app. If an American says they're an "engineer" you know they're exactly the one to advise you on the React app.
> Implementing some well established algorithm like Quicksort is not engineering.

How about when it involves getting the best possible performance out of the given hardware architecture?

No rule is free from exceptions I suppose. The distinction I'm trying to draw is between the decision to use QuickSort and the actual implementation - so if someone is thinking ahead and decides that QuickSort is the best option on a given architecture (considering a couple of options) is doing engineering.

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.

So the article contends that software doesn't play critical role in society. Apparently the author doesnt know that most power plants, nuclear or even hydroelectric are run by software, not to mention a few small things like medical equipment. Oh and airplanes use sofware too.... wait software is in almost all critical engineering projects.

Maybe the author should do more research.

Also software powers your phone and more importantly the autocorrect feature.
You can edit your posts, you know. Or delete them.
i was using an iphone app at the time that didn't provide the functionality.
I see that you maybe skimmed it a little too fast.

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.

With most engineering there are standards and math is the main constant. Software is more akin to baking you know what to make but how you make it will differ (largely because of different programing languages) as does the taste of the intended customer.
It definitely shows: in my uni I had a professor (pupil of Dijkstra) who we thought was very elitist (not so weird considering his pedigree) ; he said the world will be a bad place if we continue the bad software practices and was all for allowing (!) non engineers to make games and ‘fun things’ but not anything that actually does anything that could lose money or health if done badly. I have not spoken with him for a while but he must be crying every night about the JS uprising.

20+ years further, I am starting to agree with many of his points.

Yep, and most of those applications have a certification attached, "Functional Safety Engineer", which most of of Silicon Valley don't seem to know exists.

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.

Does it stop being an engineering practice because a vast number of practitioners are incompetent, and fail to practice engineering rigorously?

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 not about building robust structures. It can be applied towards that goal but that's it; an engineer takes specifications and constraints and solves the problem within these bounds.

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.

Less death is attributable to software engineering, but certainly more harm could be attributed to it. What happens to our species if you engineer the perfect algorithm for controlling the attention of a whole people group, then use it to stimulate their most base emotions?
As 'software is eating the world' more and more deaths will be attributable to software development and there comes a point where the rest of the world will no longer be content with the crap our industry produces.
An engineer is just someone who uses ingenuity. Same word. (ingenieur I believe)

Regulators should treat software as a licensed engineering discipline though.

Needs a [2015] in the title.

This is a very poor definition. Probably the poorest.

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

The argument about the meaning of the word is a massive and stupid misdirection of attention. What counts is licensure. A point I already addressed.
Perhaps there are arguments that support your claim, but I don't see any in your comment.
> "It undermines a long tradition of designing and building infrastructure in the public interest."

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.

As an engineer myself (EE) I disagree completely with OP.

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.

a term that is widely used will have multiple meanings. considering who gets referred to as an 'artist' these days i can't really be upset with how the term 'engineer' is applied.
I get the premise of the article is to show that software developers aren't all that special, and shouldn't call them engineers.

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.

I've got an aerospace engineering degree and have worked across a number of industries, from satellites to robotics. These days my job is about 50% software.

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.

Thing is, it is regulated, sadly not enough world wide.

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.

I think software development is a wide range of things, all the way from hacking on WordPress plugins to safety critical software. "engineering" comes in somewhere on that spectrum. Some software development is engineering, but not all is.
‘The title “engineer” is cheapened by the tech industry.’? That’s a little over the top ain’t it?

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.

Actually there are different things for which people study:

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).

At very least those that haven't taken an Informatics Engineering degree, with professional title should stop calling themselves engineers.

There is a certain level of expectation beyond such title.

In a somewhat similar vein, I've always found it odd that engineering students commonly refer to themselves as engineers. I agree with much of the linked article and believe the title of engineer implies that one has already gone through a rigorous testing and certification process and that you conform with continual professional development and regulation. So it irks me slightly to hear a first year student call themselves an engineer. It feels like a medical student calling themselves a doctor.

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.

Some countries do require certification, just like doctors.
Then I think there should be something like the Hippocratic Oath, but for engineers.

"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 ..."

https://en.wikipedia.org/wiki/Hippocratic_Oath

While a random js dev should not be called an engineer, the complexity and societal impact of modern software stacks far surpass most "true" engineering projects.

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.

I don't see any difference between a mailfunctioning piece of software creating serious harm to that of a crashing bridge. They can both kill, create huge social disturbance and leave people ruined. The problem is that the field still largely just thinks of them as bugs when it comes to software. That we have an abundance of programmers not taking software engineering as serious as the mechanical engineer is a huge problem today. When someone gets hurt from a bug, the software engineer mostly gets away with it (or get a reprimand from the boss) and doesn't get his/her licence to write professional code away. To be honest, what we would need is a professional certification where the software engineer should at random be required by law to be audited about his/her code and potentially be forbidden to work with some type of projects if it doesn't pass. I have seen way too many nasty outcomes and suffering during my career in the industry to hold any other opinion. We have real software engineers out there who write clean, rigid & maintainable code - but the industry is flushed with hobby tinkerers allowed to work on projects that can result in serious harm. Calling oneself a software engineer should be regulated, audited like any other engineering field. That we don't require it, leaves us with the nasty results that is an ongoing disaster. Anyone can write a piece of software, the way anyone can build a bridge. Ensuring neither of them come crashing down and adhering to principles and practices that doesn't make it come crashing down with high certainty is what's makes engineers different. If you have read the book "structures - or why things didn't fall down", you know that those other engineers from other fields also fail on and off. The difference is that in software we just keep building the next bridge go come falling down when the previous broke.
I wrote about the same topic here: https://redbeardlab.com/2019/04/08/on-dignity-and-self-respe...

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.

Job titles matter to people, why pay someone a raise for being good when you can add an extra buzzword to their job description or change their job title to something that sounds posh? It is a win-win for the company, they can introduce their 'junior assistant' as 'senior engineer' to impress whomever is being given the show and tell.

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.

I think the article is right for the wrong reason. There is nothing in engineering that relates to public interest particularly. I am sure there are good engineers in the tobacco industry. I hold a formal engineering degree myself, not a single line in the curriculum relates to public good.

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.