I am a licensed mechanical engineer working on the development of battery systems for electric vehicles. First question I would ask: Does it really matter? I would say no, because engineering (excluding software) is already such a huge field that it is hard to find common properties. For me it is most obvious when I talk to engineers from other fields like chemical engineering.
I write a lot of software for data management, analysis, simulation automation and optimization in Python, and for me the key differences between software engineering and “classical” engineering are (note this is the perspective of someone working in the automotive industry, not an objective truth)
You not only have to design the machine, but also the machines that build the machine. These machines that build the machine are very specialized. A factory line is built for a specific purpose and it will only do that one purpose for its lifetime and then it will be recycled. So there is no public cloud for manufacturing. You have to build a data center for each specific product.
Abstractions are very expensive. In “classic” engineering, you don’t have zero-cost abstractions, so you only use them abstractions when you’re making small quantities. For larger quantities, you instead integrate a lot of functionality into one or more specialized components. For example the whole car is responsible for crash safety, and although Volkswagen’s MEB battery system is used in many vehicles, you can’t just integrate it without a small to medium engineering effort.
Errors are more expensive. Of course there outliers in software, but generally errors are small cost and it is quite easy to test for them as well. This is because typically either the machine you want to build or the machine which builds the machine is very expensive. Crashing it or changing it therefore is very expensive. This is also why these fields are so conservative. You really want to avoid errors at all cost. This is probably open for debate and Tesla/SpaceX have a great impact with a different philosophy. The capital intensiveness is also the reason why there has only been one new large car manufacturer in decades.
“Classical” engineers don’t build their own software. This is probably the greatest difference and the main reason why “classical” engineers sucks so much as it does. In my opinion (or hopes) I think this is about to change as more people (like me) are in engineering who know how to write software.
Errors are more costly. Of course, there are outliers in software, but in general bugs are low cost, and it is quite easy to test for them. This is because typically either the machine you are trying to build or the machine that is building the machine is very expensive. So crashing it or changing it is very expensive.That is why these areas are so conservative. You really want to avoid mistakes at all costs. This is probably debatable, and Tesla/SpaceX are making a big impact with a different philosophy.Capital intensity is also why there has only been one new major car manufacturer in decades.
“Classical” engineers don’t write their own software. This is probably the biggest difference and the main reason why “classical” engineering software sucks as much as they does. In my opinion (or hope), this is about to change as more people (like me) are in engineering who know how to write software.
I will add that there are definitely a lot of tooling built by process engineers specifically for production line. Engineers definitely build their own tools. It just happens to be other engineers doing the work. Like we do with foss ;)
For error, definitely. Prototyping is also longer timeframe and changing something tend to be harder. In software, changes are cheaper.
This whole argument only makes sense if you think ‘engineer’ is a description of what you do (or a value judgement) rather than a social and legal role you play. The thing that makes a structural engineer an engineer is that when they determine whether that beam is strong enough for this load, the building inspector will trust them, and you can sue them if they’re wrong. I could perform all the same calculations as the engineer and arrive at the same conclusion, but that wouldn’t have any legal significance. ‘Engineer’ is only a meaningful term because of that significance, like ‘doctor’ or ‘lawyer’.
Software engineers won’t be ‘real’ engineers until we can not only lose our jobs if we screw up, but also be legally prevented from working in software in the future.
As noted in the talk, though, that legal role varies widely depending on the jurisdiction, and doesn’t apply equally to all forms of “traditional” engineering.
Plenty of non-software engineers in the US, for example, work without a Professional Engineer license. Either because they’re supervised by a PE, or (very commonly) under an “industrial exemption” where they work for a company which has effective internal processes to and compliance programs. I used to work closely with a lot of chemical engineers, for example, who were almost always not licensed.
Except in some particularly stringent jurisdictions like Canada, civil engineering is the primary field where individual engineers need to be licensed. So that special legal role is pretty narrow across most of what people call “engineering”.
I think some of it is, but not most. For example I think John Carmack (of Doom fame) practices engineering, exemplified by his usage of the BSP paper from the 80s on his software work for games. He used cutting edge academic work to help build the right thing.. I think most engineers of any discipline would likely approach their problem solving using that same rigor. People slamming a web app together with Rails or Flask are not practicing the same sort of “engineering”. I’m probably wrong, but I’m just sharing my off-the-cuff response to the question the title asks, please don’t read it as disparaging the work of a web developer (I do that work) I just think its a different level of software that doesn’t feel like “engineering” to me.
I recommend looking at what hillel present in these.
I was trained as a “classical” engineer, worked as one and have a network of friends in them. They work like us. Slamming together a board with whatever design you find on the internet, slightly modifying it to pass your tests and running with it in prod is the default practice in every EE shop i worked in.
And afaict, it is no different in mechanical and process shops. If anything software people read and practice the research side far more than other engineering disciplines.
I highly recommend checking up Billy Koen writing on what “engineering” actually is empirically. He is still afaict the reference for this kind of work.
I am a licensed mechanical engineer working on the development of battery systems for electric vehicles. First question I would ask: Does it really matter? I would say no, because engineering (excluding software) is already such a huge field that it is hard to find common properties. For me it is most obvious when I talk to engineers from other fields like chemical engineering.
I write a lot of software for data management, analysis, simulation automation and optimization in Python, and for me the key differences between software engineering and “classical” engineering are (note this is the perspective of someone working in the automotive industry, not an objective truth)
I will add that there are definitely a lot of tooling built by process engineers specifically for production line. Engineers definitely build their own tools. It just happens to be other engineers doing the work. Like we do with foss ;)
For error, definitely. Prototyping is also longer timeframe and changing something tend to be harder. In software, changes are cheaper.
This whole argument only makes sense if you think ‘engineer’ is a description of what you do (or a value judgement) rather than a social and legal role you play. The thing that makes a structural engineer an engineer is that when they determine whether that beam is strong enough for this load, the building inspector will trust them, and you can sue them if they’re wrong. I could perform all the same calculations as the engineer and arrive at the same conclusion, but that wouldn’t have any legal significance. ‘Engineer’ is only a meaningful term because of that significance, like ‘doctor’ or ‘lawyer’.
Software engineers won’t be ‘real’ engineers until we can not only lose our jobs if we screw up, but also be legally prevented from working in software in the future.
As noted in the talk, though, that legal role varies widely depending on the jurisdiction, and doesn’t apply equally to all forms of “traditional” engineering.
Plenty of non-software engineers in the US, for example, work without a Professional Engineer license. Either because they’re supervised by a PE, or (very commonly) under an “industrial exemption” where they work for a company which has effective internal processes to and compliance programs. I used to work closely with a lot of chemical engineers, for example, who were almost always not licensed.
Except in some particularly stringent jurisdictions like Canada, civil engineering is the primary field where individual engineers need to be licensed. So that special legal role is pretty narrow across most of what people call “engineering”.
I think some of it is, but not most. For example I think John Carmack (of Doom fame) practices engineering, exemplified by his usage of the BSP paper from the 80s on his software work for games. He used cutting edge academic work to help build the right thing.. I think most engineers of any discipline would likely approach their problem solving using that same rigor. People slamming a web app together with Rails or Flask are not practicing the same sort of “engineering”. I’m probably wrong, but I’m just sharing my off-the-cuff response to the question the title asks, please don’t read it as disparaging the work of a web developer (I do that work) I just think its a different level of software that doesn’t feel like “engineering” to me.
I recommend looking at what hillel present in these.
I was trained as a “classical” engineer, worked as one and have a network of friends in them. They work like us. Slamming together a board with whatever design you find on the internet, slightly modifying it to pass your tests and running with it in prod is the default practice in every EE shop i worked in.
And afaict, it is no different in mechanical and process shops. If anything software people read and practice the research side far more than other engineering disciplines.
I highly recommend checking up Billy Koen writing on what “engineering” actually is empirically. He is still afaict the reference for this kind of work.
“No.”