Remix.run Logo
giantg2 2 days ago

Most of software isn't engineering, it's just building.

It's like a lot of these custom car/motorcycle builders vs actual engineers designing for a major manufacturer. You are both building a product but one places a lot more rigor on the science, data, and testing behind the decisions. That doesn’t mean the custom builders don't build good stuff, just that you won't get answers to things like how much force a particular part can take or how much energy it will absorb in a crash.

In software, you might have some people still doing real software engineering, but they are in sectors that take documentation and testing more seriously. Not that every player takes this dedicated approach, but potentially parts of auto, aviation and defense fall into this.

9rx 2 days ago | parent | next [-]

> Most of software isn't engineering, it's just building.

Other way around. The difference between engineering and building is that building refers to the building of a component in isolation, while engineering is about the building an entire system through the combination of multiple components. Most software — and all software that is actually used — is a built system.

> but one places a lot more rigor on the science

That'd be "professional engineering"; sometimes referred to as PE for short. We're talking about engineering (sans professional) here.

HPsquared 2 days ago | parent | next [-]

A house comprises many parts. A custom motorcycle has many parts. These things are designed and built to established practices, but in 99% of cases they aren't really "engineered" with calculations and formalised decision-making processes and the like.

9rx 2 days ago | parent [-]

> A house comprises many parts. A custom motorcycle has many parts.

Hence why they are engineered. I suspect you mentioned houses because the people who build houses are often referred to as builders, but that is because the people working houses often only do work on a single component. The system as a whole is referred to as engineering, though.

> with calculations and formalised decision-making processes and the like.

You too seem to be confusing "engineering" with "professional engineering". While societies of professional engineers would like people to think that engineering is defined by mathematical and scientific rigour, that's not how anyone actually uses the term in practice. The "software engineering" label wouldn't exist if they did.

HPsquared 2 days ago | parent [-]

There is definitely some engineering that goes on in the software world, but it's mostly construction.

hollerith 2 days ago | parent | next [-]

Software development is more like drawing up the blueprints for a building than it is like working with materials made of atoms. (The analog in software to the construction phase of the creation of a physical building either does not exist or proceeds very quickly, is very unlikely to fail or be delayed and is almost completely automated.)

The word "patterns" a la software patterns was taken directly from the writings of an architect of physical buildings (namely Christopher Alexander). It is not an accident that it was not taken from the work of a construction worker, not even a high-level one in charge of hiring subcontractors and of years-long billion-dollar construction projects.

The most salient difference between blueprints and software artifacts is the sheer complexity of software artifacts these days (which is why there aren't organizations that employ many tens of thousands of draftsmen and architects of physical structures) but that is a difference in degree, not a difference in kind.

9rx 2 days ago | parent | prev [-]

While there is construction involved in software, the computer does that work. There is no human analog there. The human end of software is entirely at the design level, which is the defining characteristic of engineering — so long as it is a system being designed, of course, which virtually all software is.

7thaccount 2 days ago | parent | prev [-]

Thanks for bringing up the PE distinction. This kind of argument comes up here ad nauseum. People have different views and we argue semantics.

There is engineering as a discipline (e.g., mechanical, electrical, industrial, civil, aerospace...etc.) and engineering in a more colloquial sense like "I did some hillbilly engineering and rigged up a pea sheller". Both involve solving problems.

The former typically involves the person going through a rigorous 4-5 year program where they take a bunch of advanced math and physics classes and a ton of other classes (including coding and robotics as well as more specific classes such as power electronics) that teach logical thinking and problem solving. I'm always amazed that I can more or less talk to any engineer across the country (different state, different university, different engineering discipline) and still recognize their training and that hyper analytical mindset and feel the kinship. That of course doesn't mean that there aren't similar analytical people that went in other directions, but the training is a real thing.

A professional engineer passed their fundamentals of engineering exam, got their degree, and then took their professional engineering exam. You used to have to get 4 years of work experience before applying, but I think they got rid of that. It's an awful 8-hour exam with a pretty low pass rate. Honestly though, the PE usually just means the engineer was willing to spend 3-6 months prepping for the exam and has a need for the license to stamp papers. A lot of engineers never get it if they don't need it. I believe you need it in some cases for court cases.

As far as software engineering goes. It seems to be a discipline that matches the second colloquial definition more in a lot of cases. In some cases they have actual software engineering degrees where the student takes all the standard intro engineering courses (calculus, linear algebra, statistics, differential equations, statics, dynamics, circuits, thermodynamics) before doing the core classes distinct to that major. In that case, I'd call them an engineer due to the training and think it's an appropriate job title even if they get a job slinging corporate java, which would not typically be viewed as traditional engineering. So they're an engineer...not necessarily doing engineering. Does that really make sense? My own definition breaks down if we apply this to the same engineer becoming a garbage man. They're still an engineer by training, but they're most definitely not doing engineering anymore.

Also, if Pete gets a job slinging code out of highschool...we can say he's doing engineering in the colloquial second sense, but is he an engineer in the first sense? No.

Clear as mud? As an engineer I now must flog myself for my own internal inconsistencies. In all seriousness, language is hard and sometimes imprecise. I didn't realize my rambling got so long and apologize.

gchamonlive 2 days ago | parent | prev | next [-]

It's solving and building, but most of all it's language. It's all language. Either telling the machine what to do or coordinating a group of people cohesively.

HPsquared 2 days ago | parent | next [-]

That's where engineering fits in. It's in the knowledge and information space, you make things like plans, arguments, decisions, documents.

That's not to say it all needs to be written down; someone can do the "engineering" of a small project all in their own head and then implement it themselves.

The engineering process itself is a form of knowledge work. A single person can do both tasks of course.

ratelimitsteve 2 days ago | parent | prev | next [-]

I actually read an interesting study, probably here, about software engineers. It turns out that for as much emphasis as we put on mathematics we actually tend to be better at language, and that even our penchant for maths is less in the way of calculation and more in the way of definition and expression (which is to say, making it the language numbers speak and learning it that way).

gchamonlive 2 days ago | parent | next [-]

This one perhaps?

https://www.washington.edu/news/2020/03/02/not-a-math-person...

sam_lowry_ 2 days ago | parent | prev [-]

It would be nice to have a reference.

cachius 2 days ago | parent | prev [-]

You mean communication, the transfer of ideas. Already hard between humans, machine language and operation is completely foreign.

gchamonlive 2 days ago | parent [-]

No, I mean language. Even if you are alone with yourself in a solo project, you need language to structure your ideas. Communication is when you need to transfer these structures in place (you and a team) and/or in time (you and yourself in different points in time). But it's first and foremost a problem of language, of giving structure to reality.

Marshferm 2 days ago | parent | prev | next [-]

If I understand your analogy correctly, what science in involved directly in software dev other than used directly in already existing models like medicine? (and even this isn't exactly science, as medicine is practice, not analytic discourse). Engineering relies on science, particularly building, vehicles, etc.

bogdanoff_2 2 days ago | parent [-]

I'm thinking things like: do you know what's the latency and throughput of your system, and how it is affected by different conditions? Based on this, people who work on real-time systems (including video games) would be the closest thing to the engineers of the software world.

Marshferm 2 days ago | parent [-]

Right, but then it's A/B cog-sci, which I think is no longer science, but practice completely under software, and in a sense, practice that's no longer science, but behavioral modification.

gosub100 2 days ago | parent | prev | next [-]

Then you get paradoxes like why the rigor doesn't work in practice. These expensive CS books mathematically prove a map has faster access than a vector because it uses a binary tree. Yet the vector works faster because the CPU pipelines sequential operations very efficiently.

layer8 2 days ago | parent | next [-]

CS proves that a binary tree is faster asymptotically, and that’s still true and very much of practical relevance regardless of the CPU you use.

auggierose 2 days ago | parent | prev [-]

No, they don't. A vector has faster access than a binary tree, O(1) vs. O(log n). Maybe read some of those expensive books.

If you talk about editing the data structure, then it depends.

reedlaw 2 days ago | parent | prev | next [-]

Agreed, in the sense that software development is an iterative process of trial and error similar to custom car building. But software isn't like a car. It's more like a car factory. It should produce something of value repeatedly.

amelius 2 days ago | parent | prev [-]

Most of software is just plumbing.

HPsquared 2 days ago | parent [-]

And plumbing is a highly skilled and essential profession. And a lot of plumbing work involves engineering to a greater or lesser extent.

amelius 2 days ago | parent [-]

That's because AI cannot do physical things yet very well.