Live data from Hacker News

Why Software Engineering Isn’t Engineering

blog.iancackett.com

41–50 of 59 posts

Re: Why Software Engineering Isn’t Engineering

#41

Earlier quoted context omitted.

Yep, you're right... I'm forgetting that physical engineering also suffers from some of the same problems. The thing that it adds though is a level of rigour, and ability to reason about the project, that we're still struggling with somewhat in the software world. Believe me, in 20 years since I was taught it's not strict "engineering", I've yet to see that change much, other than in safety-critical and cleanroom pro…

Engineering is much more straightforward, you have the plans and know that you need X amount of parts and Y amount of labour. Software is more like research, where you don't even know if you can solve the problem acceptably, most of the time.

If you have the plans, it's manufacturing, not engineering.

The engineering in the design is in developing the prototypes and proving that theoretical concepts can be implemented practically. There is nothing straightforward about that, unless it is an incremental improvement to an existing implementation.

The engineering in manufacturing is about deriving ways to manufacture parts with greater yields and greater efficiency. In some cases, it is about developing manufacturing techniques that were hitherto impossible. Again, not much straightforward about this.

All of the above is rigorous, but that is not the same thing. This rigor can be applied to software development just as easily as any other product development, and when it is it becomes software engineering.

Re: Why Software Engineering Isn’t Engineering

#42
I like that he included the counterpoint to his position early on in the article (Cleanroom etc). The article is correct that our type of engineering is a bit different with all the interactions between components and the fact that they're often different. Yet, there's a subset of the field that counters these problems through choice of development style (eg Cleanroom) with well-understood components with consistent interfaces. The style is fairly easy to pick up but the good components are built up incrementally over time.

Truth is, manager's and developer's choices are why most of this isn't the case. Management might push use of a problematic technology, give too little time to assure quality, and so on. Developers might care little about making things maintainable, prefer a style which impedes it, or use fad technologies with tons of unknowns. The combination led to pervasive issues in the industry the article references.

The solution is for quality-centric IT shops to differentiate by going in the opposite direction. The same for FOSS projects. Fortunately, we see a little bit of this here and there. Altran-Praxis was delivering engineered software via Correct by Construction methodology. One student's combination of Python and Cleanroom was promising. Ada and Eiffel communities are using Design-by-Contract to aid predictability/maintenance. So, we see pieces of how vanilla IT shops & FOSS can raise the bar closer to engineering. We just need courageous groups to jump and grab it.

Re: Why Software Engineering Isn’t Engineering

#43
This guy seems to be stating a made up tautology due to the fact that he is redefining eng.

According to this guy we do mostly design and specification. Of course then you could say the Bay Bridge, the Space Shuttle, the 787 and every product that requires a long design and exploration pathway is not engineering. I don't know of anyone at Google who considers dev the same as mechanical engineering. It's more of an exercise in managing complexity, mathematical optimization, social science and design theory. But we sure as heck aren't designing for the knowns required to do what this guy defines as engineering.

But so what?

Re: Why Software Engineering Isn’t Engineering

#44

You see this sentiment come up about every few months here. We're not rigorous enough. Or we can't estimate our build time well. Or we don't have any liability. Or we don't have a codified set of morals that govern us. BS. We're still exploring the space, and most of the time the things we build are good enough to work - just like the first wooden planks across streams were good enough. We also do have the capability…

What will be the incentive of a start up company to follow these new rigorous software engineering practices? How many other engineering disciplines could get away with cutting those types of corners for a first version of a product? Perhaps people put planks over gaps when the standard for bridges was lower. It's hard for me to imagine a world where customers demand a product built with strict software engineering practices. Though, that would be nice if that happened, as a user.

Re: Why Software Engineering Isn’t Engineering

#45

You see this sentiment come up about every few months here. We're not rigorous enough. Or we can't estimate our build time well. Or we don't have any liability. Or we don't have a codified set of morals that govern us. BS. We're still exploring the space, and most of the time the things we build are good enough to work - just like the first wooden planks across streams were good enough. We also do have the capability…

> You see this sentiment come up about every few months here. We're not rigorous enough. Or we can't estimate our build time well. Or we don't have any liability. Or we don't have a codified set of morals that govern us. BS.

I don't see the BS. Coming from a traditional engineering discipline, I'd agree with each of those. The scariest to me is on professional standards and ethics: it seems to be an almost point of pride among some HN commenters that they operate outside of any formal standard. That baffles me.

Re: Why Software Engineering Isn’t Engineering

#46

You see this sentiment come up about every few months here. We're not rigorous enough. Or we can't estimate our build time well. Or we don't have any liability. Or we don't have a codified set of morals that govern us. BS. We're still exploring the space, and most of the time the things we build are good enough to work - just like the first wooden planks across streams were good enough. We also do have the capability…

You have a good point about timing. I often bring this up myself. The major fields of engineering have hundreds to thousands of years of work that went into them. They also went in the same direction more. I challenge any architect that mocks our work to build his next house using methods that existed in their first 100 years then live in it.

None have taken me up on the offer.

Re: Why Software Engineering Isn’t Engineering

#47
I think the biggest difference is tradition engineering systems are mostly linear, while software rarely is. Even non-linear mechanical or electrical systems can typically be modelled.

Modelling is a key activity of engineering - it allows predicting the behaviour of a final system. Linear systems are handy because they are scalable. A bridge to hold 10 people can be scaled to hold 100, 1000, or 10,000 people (usually) quite easily. A software processing scaling from 10->10,000 will often fail in all sorts of interesting ways in the process.

Software often fails silently. In mechanical systems, there is often noises, vibrations, or yielding to give warning and insight to where problems are happening. Software often doesn't have this inherently, but can be overcome with debugging and testing.

I think a large part of this is the newness of the field. People were building bridges, houses, and carts long before Newton. But after we had the modelling tools and theory, we were able to go much further.

(I'm a mechanical engineer, who tends to do a lot of software for controls and models, and increasing web development)

Re: Why Software Engineering Isn’t Engineering

#48
post #5

So I decided to search the definition of engineering on the internet because I've heard this whole "software engineering is not engineering" thing before: > Engineering (from Latin ingenium, meaning "cleverness" and ingeniare, meaning "to contrive, devise") is the application of scientific, economic, social, and practical knowledge in order to invent, design, build, maintain, research, and improve structures, machine…

I don't think it uses science, other than scientifically studied development processes, and how many start ups use thast? If you count computer science, I'd kick the can down the road and ask if computer science is a real science? Does it use the scientific method? It seems more as applied mathematics.

Re: Why Software Engineering Isn’t Engineering

#49
post #47

I think the biggest difference is tradition engineering systems are mostly linear, while software rarely is. Even non-linear mechanical or electrical systems can typically be modelled. Modelling is a key activity of engineering - it allows predicting the behaviour of a final system. Linear systems are handy because they are scalable. A bridge to hold 10 people can be scaled to hold 100, 1000, or 10,000 people (usuall…

Great point. Modelling and understanding what's being built are certainly important aspects of engineering.

Re: Why Software Engineering Isn’t Engineering

#50
post #4

We've been talking about this for over forty years now and it just hit me - engineers are categorized by what they build whereas software engineers are categorized by what they build with . If you asked an engineer who's an expert at building bridges to then build a skyscraper, they're likely to have estimates that are off-base. Meanwhile in the software world we say we're Java developers or Ruby developers or Haskel…

Do we?I thought there were clear differences between web dev, in-house corporate data mining, mobile dev, scientific computing, NLP, DSP, infosec and crypto, and so on.

Management doesn't really care what tools or environment you're working in as long as things get built, and they (mostly) work.

You could argue that the more rigorous the math, the more "engineeringy" the programming. So DSP and crypto are very mathematical, data mining and machine learning have strong elements of pure math, and so on.

But what about web UX/UI? The reason they seem lacking in rigour is because they are. There's the infrastructure layer which is usually an ad hoc collection of bolted-together toolkits imported from elsewhere, with varying amounts of glue logic. And there's the user layer which is supposed to create a persuasive customer experience.

Ad hoc infrastructure is hard to formalise because the technology keeps changing. It's not like materials science and structural engineering, which have a core that hasn't changed for maybe a century and are - relatively - trivial to model.

At the top level, creating experience is what the arts do. So you're not going to get much mileage out of expecting them to be amenable to formal methods.

So in fact there's no such thing as software engineering. There are a lot of slightly overlapping disciplines that happen to use code as a raw material, all of which use different models and techniques and have different requirements. There's actually no equivalent to materials science, because the best you can hope for are a few standardised best-of-breed algorithmic solutions to common problems, like search/sort/learn.

But more, when you build something out of atoms, it stays put. Chances are you know the range of temperatures/pressures/forces and other conditions under which it has to work. So you have a well-defined problem.

Code is always a symbolic processing machine, and the range of possible inputs, and the timing relationships, are practically infinite. You can only build a full model when the range of inputs is very constrained - like DSP, which takes an array of floats and produces an array of floats, but doesn't work so well with text strings.

If you're dealing with general user input, it's impossible to build a general model, because you always have to account for as many inputs as possible - explicitly. Some of the inputs may be malicious.

It would be like trying to build a bridge that spent most of its time dealing with cars and foot traffic, but everyone so often someone would try to spill a truckload of acid in the middle, or a nuclear war would break out, or someone who was wearing the wrong kind of shoes would make all the cables snap on Thursdays only, because one of the developers forgot to guard against that brand of problem shoe leather.

It's a completely different class of problem. The reasons it's not rigorous is because it's impossible to be rigorous when your inputs can be infinitely variable, but you still have to account for as many as you can.

Post reply on HN