Not even “engineering” is engineering. It’s equal parts art, craft, and science. And I say that as a classically trained engineer turned software engineer. Every engineering design is a compromise - it can be light, or easy to make, or robust, or cheap, or anything else driven by requirements. There is no such thing as an optimal design unless you pin the requirements down really tight - and this is where the art part comes from.
With “classic” engineering at least you have the immutable laws of physics to judge your work, but with software we have no such luck - software is infinitely pliable in ways equivalent to bending the laws of physics in classical engineering. Your bridge may not be sound at one Earth gravity, or your software might not work reliably with a gigabyte of memory, but it’s like we can place your bridge under half G by giving the software twice as much memory. And we can do all that after building our “bridges”.
I would even suggest software engineering can also be described as “applied poetry”, where we write precise prose designed to elicit specific responses from machines, but I guess that analogy was taken by “prompt engineering”, which feels like “applied sorcery”.
Right! I think a lot of people, who have not done a lot of "things you can kick" engineering, have a very romantic view of it. Especially the relationship with whoever is nominally setting the goals of the project.
The physics works perfectly, of course. But physics is only a third of the constraint in engineering. The other two thirds are project goals and convention.
Project goals are horribly underspecified, every time. It's incredibly rare to be given a project that is completely constrained on that side, and if you do get one, most of the time it's physically impossible to achieve. This is because the people who write those specifications not doing engineering, they're doing marketing or sales or just had a cool idea. Sometimes that can even be the engineer themselves :-) So it's up to the engineer to fill in the gap, and they do it with experience and a sense of aesthetics, of sorts.
Convention is what constrains the physical possibilities of engineering to the practical. Yes, you can build anything and make it work, possibly even better than what everyone else builds. But you will have to invent and construct a lot of new technologies before you can build your perfect mousetrap. So, you settle on standard components and build a decent one instead. But this introduces a gap between physics and engineering, too. A bit of no-man's land that you can reach into to produce truly great results. But it's up to the engineer to know when it's worth it.
From knowing many different types of engineers, not only does software engineering fall pretty neatly within that group of jobs but also software is an integral part of their engineering practices. I know some people who are designing planes and if software isn't an engineering discipline I guess I need to tell them they recently became not engineers (though maybe because they occasionally use physics equations the author would say they still are. It's a silly distinction).
Overall though I found this post incredibly hard to read. It's incredibly long and wordy though that's par for the course for these petty semantic arguments.
Skimmed through, and it sort of confirms my own experience: when a problem isn't approached with an engineering mindset, the resulting work also doesn't qualify as engineering.
The article seems to make some fairly confusing statements. Why is the bar higher for software engineering, than that of civil engineering otherwise? Statements such as:
> "there is no objective reality inside software"
> "if there are many solutions to the same problem, which one is "better"?"
Is the exact same subjective goal that a objective engineering constraint has in any other engineering field. There are many ways to design and build a bridge, but the engineering aspect of it needs to model reality and account for it in such a way that the bridge to build conforms to said requirements, in a provable way. That's why engineers can be held responsible when mistakes are made.
Software Engineering can be done in the same way. This, however, depends entirely on the culture. My first decade in the field, I was fortunate to only be exposed to en environment and culture that developed software in a provably correct way. The latter decade, not so fortunate. With the advent of generative ai, it's become far worse. The challenge is to carve out enough space outside the purview of "management" that wants problems solved with particular tools, regardless of applicability to said problems, and it's becoming insurmountable. Signal to noise disappearing. The idea of buying land and tending to a farm, evermore appealing.
Because that diminishes the work people do. A programmer takes logic and encodes it for a machine to execute. Being an engineer suggests solving problems and defining logic.
The engineer title is apt in my opinion, because if you look at construction as a parallel, the architect designs the shape of the building, engineers determine how to build it so it doesn't collapse, and builders actually make it real. Programming is like digital building, the architecture and implementation details are both separate.
In my country (France), being an engineer (ingénieur, in French) is regulated but tied to a particular degree (which must be approved by the Commission des titres d'ingénieur), and as such I am legally a software engineer.
Same here in Poland. I believe the equivalent term in English is "Bachelor of Engineering". Four years instead of the regular three to obtain a typical bachelor's degree.
I studied at a technical university at its faculty of electrical engineering, but those who study at a "normal" university indeed go through the usual three years and are not engineers.
I guess the main difference is that I learned about analog circuits, semiconductors and all that, while those other guys didn't.
I don't have any special professional certificates, though I could optionally enroll on a course allowing me to work with voltages up to 1000V.
Ok, then there is regulated engineering and unregulated engineering. If you are doing engineering and it's not regulated (for many different reasons) it does not make it any less engineering. Animals do engineering, insects go engineering, it is based on science (empirical), whether they know it or not.
In the US, professional licensure is left to the states, and most states have some form of licensing for engineers along with reciprocity for transferring a license from one state to another. Commonly, engineers have an "industrial exemption" if they work for a company that makes a product rather than offering engineering services directly to the public (such as a civil or structural engineer might do).
I've held an "engineer" title at my day job from time to time, though I'm not an engineer and have no engineering degree. Only a couple of engineers at my work site have licenses. On the other hand, my brother in law was a nuclear engineer, and all of the engineers at the power plant were licensed.
One thing you'll notice is that small companies that do contract or consulting work will call themselves "research" or "technology" rather than using the E word on their web page.
It many countries it actually is, if you call yourself an engineer professionally without a license you can be heavily fined. Canada, Germany, France..
Except for when it is, the constraints of software engineers has always been bound to the constraints of Classic Computing, but over the years we've abstracted that away to the point of where many in the field may not even realize it.
Fine, but then what am I? I'm certainly not a scientist. And calling me a "programmer" is like calling an accountant a "calculator".
I design solutions to computational problems. I also happen to implement them a lot of the time, because code was trivial to implement even before LLMs. What does that make me if not an engineer? I'm open to suggestions.
If someone told me I couldn't call myself an engineer and instead I had to call myself a software developer, I'd turn around and tell them I just forgot all my theoretical computer science, and of course we can do a bubble sort on the multi-terabyte database, LOL.
Thankfully; else we'd have big heavy things with real claws and kinetic force grabbing at us endlessly, snatching our wallets with too much precision. We'd need Arnold not AdBlock, just to leave the house.
I'd say software engineering better fits economics these days. Maybe with a Psych major to maximize the dark patterns.
Dave Farley has done some writing on what makes "Software Engineering" "Engineering"
e.g. his 2021 book " Modern Software Engineering"
> Software engineering is the application of an empirical, scientific approach to finding efficient, economic solutions to practical problems in software.
Dave Farley's book is really good, and I'd highly recommend it.
However, I do have an issue with his focus on applying science in the definition, even though it doesn't come across in his final conclusions. In the history of engineering, that's a relatively new development. It started, to some extent, in Europe in the 1700s, but it really took off in the 1920s and exploded in the United States after World War II (1940s-1950s). It culminated with the Report of the Committee on Evaluation of Engineering Education (the Grinter Report) in the mid-1950s.
This isn't to say that science isn't important to engineering, since it absolutely is. Science provides knowledge used to better understand the world being changed by engineering. But there are also plenty of examples of engineering going ahead of science - the steam engine, the airplane, generative AI. We didn't fully understand the governing rules before the technology existed.
Any definition of engineering needs to be broader. Ferguson (Engineering and the Mind's Eye), Florman (several works, but primarily The Existential Pleasures of Engineering), and Vincenti (What Engineers Know and How They Know It) all explore ways in which engineering can't rely on science alone. I think Koen (Discussion of the Method) puts it best, where the application of science is one heuristic that engineers may choose to draw upon.
>An engineer's model must be tightly bound to the laws of physics and chemistry.
Anything that exists in reality and is observable by definition is tightly bound by the laws of physics and chemistry. Software is too.
>Software is a lot like math,
Probably referring to computer science. Computer science is neither about computers nor is it a science. It is a math. Software is like math but applied.
>The only limitation is the imagination of the creator of the virtual world (and perhaps the pesky limitations of computer resources)
computer resources: AKA physical laws. And these "laws" highly limit us in what we can do. We are definetely not operating in some kind of playground where we can be virtual gods, not even close, that's why entire swe teams are involved and paid a lot in software.
Honestly the main difference between "Software Engineering" and "Engineering" is that software is more an "art". We make up a bunch of technical nomenclature for it (like design patterns which sounds technical but is mostly made up and more artsy then say statistical mechanics) but it's mostly similar to sculpture or some artistic creation as we sort of piece everything together by instinct.
The difference between this and engineering is usually engineering involves mathematical modeling and testing heavily in development, while software engineering (usually) does not involve mathematical modeling and software testing is more of a catch-all to find bugs.
Type checking is mathematical modeling, but I wouldn't call it the core of software engineering. I guess this is where the categories get blurry.
> software engineering does not involve mathematical modeling
it absolutely can, approximately nobody was doing that because it was insanely expensive. if we narrow down the definitions, modern static typing (where modern means universally accepted nowadays) is a form of mathematical modeling and proof construction that software does what it says it does.
the economic calculation is changing extremely rapidly now with LLMs though. some of my software is now proved to be correct at some levels, e.g. I heavily (that is, LLMs I pilot) use TLA+ for tricky but nowhere near foundational distributed systems work (as in, I don't work on core S3, but do distributed transaction stuff).
> Anything that exists in reality and is observable by definition is tightly bound by the laws of physics and chemistry. Software is too.
Agreed. If I have to guess, the relevant fields in physics for software engineering would be quantum mechanics and thermodynamics. Of course, we don't see any direct relation as of now but it feel it should be important to determine the physical basis of software. The basis of software cannot be just math. It has to be physics.
> > An engineer's model must be tightly bound to the laws of physics and chemistry.
> Anything that exists in reality and is observable by definition is tightly bound by the laws of physics and chemistry. Software is too.
No. Software is only loosely bound by physics and chemistry. Sure, the bounds exist - they're real - but most software, most of the time, does not bump into them much at all.
But
> > An engineer's model must be tightly bound to the laws of physics and chemistry.
is also wrong. This is using a pre-software definition of engineering to try to define software engineering. It would be like trying to use a pre-Faraday definition of physics to define microwave engineering.
With “classic” engineering at least you have the immutable laws of physics to judge your work, but with software we have no such luck - software is infinitely pliable in ways equivalent to bending the laws of physics in classical engineering. Your bridge may not be sound at one Earth gravity, or your software might not work reliably with a gigabyte of memory, but it’s like we can place your bridge under half G by giving the software twice as much memory. And we can do all that after building our “bridges”.
I would even suggest software engineering can also be described as “applied poetry”, where we write precise prose designed to elicit specific responses from machines, but I guess that analogy was taken by “prompt engineering”, which feels like “applied sorcery”.
The physics works perfectly, of course. But physics is only a third of the constraint in engineering. The other two thirds are project goals and convention.
Project goals are horribly underspecified, every time. It's incredibly rare to be given a project that is completely constrained on that side, and if you do get one, most of the time it's physically impossible to achieve. This is because the people who write those specifications not doing engineering, they're doing marketing or sales or just had a cool idea. Sometimes that can even be the engineer themselves :-) So it's up to the engineer to fill in the gap, and they do it with experience and a sense of aesthetics, of sorts.
Convention is what constrains the physical possibilities of engineering to the practical. Yes, you can build anything and make it work, possibly even better than what everyone else builds. But you will have to invent and construct a lot of new technologies before you can build your perfect mousetrap. So, you settle on standard components and build a decent one instead. But this introduces a gap between physics and engineering, too. A bit of no-man's land that you can reach into to produce truly great results. But it's up to the engineer to know when it's worth it.
Cool analogies
Overall though I found this post incredibly hard to read. It's incredibly long and wordy though that's par for the course for these petty semantic arguments.
The article seems to make some fairly confusing statements. Why is the bar higher for software engineering, than that of civil engineering otherwise? Statements such as:
> "there is no objective reality inside software"
> "if there are many solutions to the same problem, which one is "better"?"
Is the exact same subjective goal that a objective engineering constraint has in any other engineering field. There are many ways to design and build a bridge, but the engineering aspect of it needs to model reality and account for it in such a way that the bridge to build conforms to said requirements, in a provable way. That's why engineers can be held responsible when mistakes are made.
Software Engineering can be done in the same way. This, however, depends entirely on the culture. My first decade in the field, I was fortunate to only be exposed to en environment and culture that developed software in a provably correct way. The latter decade, not so fortunate. With the advent of generative ai, it's become far worse. The challenge is to carve out enough space outside the purview of "management" that wants problems solved with particular tools, regardless of applicability to said problems, and it's becoming insurmountable. Signal to noise disappearing. The idea of buying land and tending to a farm, evermore appealing.
The engineer title is apt in my opinion, because if you look at construction as a parallel, the architect designs the shape of the building, engineers determine how to build it so it doesn't collapse, and builders actually make it real. Programming is like digital building, the architecture and implementation details are both separate.
Language is for us, not the other way around. It's common usage changes.
I studied at a technical university at its faculty of electrical engineering, but those who study at a "normal" university indeed go through the usual three years and are not engineers.
I guess the main difference is that I learned about analog circuits, semiconductors and all that, while those other guys didn't.
I don't have any special professional certificates, though I could optionally enroll on a course allowing me to work with voltages up to 1000V.
We need to stop redefining terms.
I've held an "engineer" title at my day job from time to time, though I'm not an engineer and have no engineering degree. Only a couple of engineers at my work site have licenses. On the other hand, my brother in law was a nuclear engineer, and all of the engineers at the power plant were licensed.
One thing you'll notice is that small companies that do contract or consulting work will call themselves "research" or "technology" rather than using the E word on their web page.
I design solutions to computational problems. I also happen to implement them a lot of the time, because code was trivial to implement even before LLMs. What does that make me if not an engineer? I'm open to suggestions.
I'd say software engineering better fits economics these days. Maybe with a Psych major to maximize the dark patterns.
e.g. his 2021 book " Modern Software Engineering"
> Software engineering is the application of an empirical, scientific approach to finding efficient, economic solutions to practical problems in software.
https://www.davefarley.net/?p=352
https://www.goodreads.com/en/book/show/57345270-modern-softw...
https://productdeveloper.net/modern-software-engineering/
However, I do have an issue with his focus on applying science in the definition, even though it doesn't come across in his final conclusions. In the history of engineering, that's a relatively new development. It started, to some extent, in Europe in the 1700s, but it really took off in the 1920s and exploded in the United States after World War II (1940s-1950s). It culminated with the Report of the Committee on Evaluation of Engineering Education (the Grinter Report) in the mid-1950s.
This isn't to say that science isn't important to engineering, since it absolutely is. Science provides knowledge used to better understand the world being changed by engineering. But there are also plenty of examples of engineering going ahead of science - the steam engine, the airplane, generative AI. We didn't fully understand the governing rules before the technology existed.
Any definition of engineering needs to be broader. Ferguson (Engineering and the Mind's Eye), Florman (several works, but primarily The Existential Pleasures of Engineering), and Vincenti (What Engineers Know and How They Know It) all explore ways in which engineering can't rely on science alone. I think Koen (Discussion of the Method) puts it best, where the application of science is one heuristic that engineers may choose to draw upon.
Anything that exists in reality and is observable by definition is tightly bound by the laws of physics and chemistry. Software is too.
>Software is a lot like math,
Probably referring to computer science. Computer science is neither about computers nor is it a science. It is a math. Software is like math but applied.
>The only limitation is the imagination of the creator of the virtual world (and perhaps the pesky limitations of computer resources)
computer resources: AKA physical laws. And these "laws" highly limit us in what we can do. We are definetely not operating in some kind of playground where we can be virtual gods, not even close, that's why entire swe teams are involved and paid a lot in software.
Honestly the main difference between "Software Engineering" and "Engineering" is that software is more an "art". We make up a bunch of technical nomenclature for it (like design patterns which sounds technical but is mostly made up and more artsy then say statistical mechanics) but it's mostly similar to sculpture or some artistic creation as we sort of piece everything together by instinct.
The difference between this and engineering is usually engineering involves mathematical modeling and testing heavily in development, while software engineering (usually) does not involve mathematical modeling and software testing is more of a catch-all to find bugs.
Type checking is mathematical modeling, but I wouldn't call it the core of software engineering. I guess this is where the categories get blurry.
it absolutely can, approximately nobody was doing that because it was insanely expensive. if we narrow down the definitions, modern static typing (where modern means universally accepted nowadays) is a form of mathematical modeling and proof construction that software does what it says it does.
the economic calculation is changing extremely rapidly now with LLMs though. some of my software is now proved to be correct at some levels, e.g. I heavily (that is, LLMs I pilot) use TLA+ for tricky but nowhere near foundational distributed systems work (as in, I don't work on core S3, but do distributed transaction stuff).
Agreed. If I have to guess, the relevant fields in physics for software engineering would be quantum mechanics and thermodynamics. Of course, we don't see any direct relation as of now but it feel it should be important to determine the physical basis of software. The basis of software cannot be just math. It has to be physics.
https://youtu.be/-J_xL4IGhJA
> Anything that exists in reality and is observable by definition is tightly bound by the laws of physics and chemistry. Software is too.
No. Software is only loosely bound by physics and chemistry. Sure, the bounds exist - they're real - but most software, most of the time, does not bump into them much at all.
But
> > An engineer's model must be tightly bound to the laws of physics and chemistry.
is also wrong. This is using a pre-software definition of engineering to try to define software engineering. It would be like trying to use a pre-Faraday definition of physics to define microwave engineering.
This is definably not engineering.