Live data from Hacker News

What Should We Do to Prevent Software from Failing?

sloanreview.mit.edu

121–128 of 128 posts

Re: What Should We Do to Prevent Software from Failing?

#121
post #77
post #66

Earlier quoted context omitted.

> Occupational licensing only serves to raise barriers to entry and crowd out competition without raising quality. To put my opinion bluntly, Bernie Madoff had a license. Almost every country in the world established at one point or another some kind of licensing for various professions. I think the barrier of "this is all bullshit" is a bit higher than one bad apple for something found to be a good idea by so many p…

Look at teaching in the United States. All states require teacher licensing at public schools. However private schools do not and get better outcomes. Same thing with many unions for trades. I have yet to see any evidence a union electrician or plumber is better than a non-union worker, however unions do all they can to keep competition off the market.

> All states require teacher licensing at public schools. However private schools do not and get better outcomes.

Some private schools get better outcomes than some public schools, but that is not universally true. The factors involved in outcomes in education are a whole lot more complicated than teacher licensing.+

Re: What Should We Do to Prevent Software from Failing?

#122
post #113

Earlier quoted context omitted.

Is static typing really what you want? I would think that if you want safety against failure, you really want redundant systems that live in separate failure domains and can coordinate in the event of failure.

Why can't you have that with static typing? Btw I think only strong static typing really helps (C is statically typed but allows way too many implicit conversions). There's also the question of what you regard as safety. Fault tolerance (like in elixir/erlang), or a design for fewer faults (e.g. ADA/Rust)? Fault tolerance is good for high availability, which can be a safety goal (e.g. What does your airplane do when…

Static typing doesn't help you if your software doesn't crash but does the wrong thing (like the Boeing). In that case not even dimensional analysis helps you, because by my understanding that code was really stupid.

I find that if you're only documenting via types, that's a problem. You should also document by writing documentation.

Re: What Should We Do to Prevent Software from Failing?

#123
post #66
post #39

Speaking as someone who builds mission critical software, licensing is not the answer to this problem. Occupational licensing only serves to raise barriers to entry and crowd out competition without raising quality. To put my opinion bluntly, Bernie Madoff had a license. The things you should do to prevent catastrophic failure: - Reduce your attack surface as much as possible. - Automate your infrastructure, human in…

> Occupational licensing only serves to raise barriers to entry and crowd out competition without raising quality. To put my opinion bluntly, Bernie Madoff had a license. Almost every country in the world established at one point or another some kind of licensing for various professions. I think the barrier of "this is all bullshit" is a bit higher than one bad apple for something found to be a good idea by so many p…

"one bad apple destroys the whole batch" you need one bad example to disprove the validity of this kind of approach, unless standards are enforced to get the bad apples out as early and as quickly as possible.

Re: What Should We Do to Prevent Software from Failing?

#124
post #16

Earlier quoted context omitted.

None of the above changes the discussion. It's a very elaborate way of saying "writing correct software is hard". You know what's also hard to do correctly? Designing airplanes. Building skyscrapers. It's not that their designs are made flawless, it's that (in theory) the sheer volume of man-hours spent pouring over every minute detail of them, incorporating lessons learned from every failure that's ever happened in…

A key difference between physical engineering and software engineering is that the economics of over-engineering to improve safety margins are wildly different. For physical engineering, the costs of substantially decreasing failure risk (e.g. via increasing strength, different materials, more complex design, etc) is approximately linear. For software engineering, that cost is something closer to quadratic or worse.…

> Verifying the safety of a bridge design is computationally trivial

I wouldn't trivialize the models used to verify bridge designs. You can't just make a couple free body diagrams and call it a day. You have to model the dynamics to avoid Tacoma Narrows Bridge type disasters. And there is a significant stochastic component that needs to be considered as well, which can't really be solved except by rigorous simulation.

Re: What Should We Do to Prevent Software from Failing?

#125
post #10

The analogy between software "engineering" and structural engineering is used a lot to point out the failures of software. I think this analogy is a category mistake caused entirely by the misapplication of the word "engineer" to software developers. We have already solved large areas of common classes of bugs at the language level, through strong static typing, memory safety and safe concurrency (Rust is the vanguar…

There is another problem, that software developers in general hate maintenance work. People should be working on keeping existing stuff working and well-oiled. We want exciting work where we get to learn some new tech. Nobody wants the janitorial jobs where you're just keeping things ticking along and running smoothly. Ofcource there are people who work on legacy systems - banking systems, old mainframes, etc. We alr…

[deleted]

Re: What Should We Do to Prevent Software from Failing?

#126

Earlier quoted context omitted.

There is another problem, that software developers in general hate maintenance work. People should be working on keeping existing stuff working and well-oiled. We want exciting work where we get to learn some new tech. Nobody wants the janitorial jobs where you're just keeping things ticking along and running smoothly. Ofcource there are people who work on legacy systems - banking systems, old mainframes, etc. We alr…

I'd argue that there are an awful lot of us who would like nothing better than to spend our time cleaning up the codebase, refactoring risky code, getting the whole thing under test, etc. Unfortunately, most organisations only grudgingly fund such work, and if I were to spend a significant portion of my time on such work (without being on a team dedicated to a critical modernisation effort), my performance reviews an…

Bingo. Hell, I'd love to do nothing but maintenance work, but I'd have a hard time paying the bills that way.

Re: What Should We Do to Prevent Software from Failing?

#127
post #66

Earlier quoted context omitted.

> Occupational licensing only serves to raise barriers to entry and crowd out competition without raising quality. To put my opinion bluntly, Bernie Madoff had a license. Almost every country in the world established at one point or another some kind of licensing for various professions. I think the barrier of "this is all bullshit" is a bit higher than one bad apple for something found to be a good idea by so many p…

"one bad apple destroys the whole batch" you need one bad example to disprove the validity of this kind of approach, unless standards are enforced to get the bad apples out as early and as quickly as possible.

The given example was send to jail until the end of his life. Looks like standards enforced to me.

It's also the whole point of licensing: You have a standard you can enforce and if people fail to fulfill it there are consequences.

Re: What Should We Do to Prevent Software from Failing?

#128
post #113

Earlier quoted context omitted.

Why can't you have that with static typing? Btw I think only strong static typing really helps (C is statically typed but allows way too many implicit conversions). There's also the question of what you regard as safety. Fault tolerance (like in elixir/erlang), or a design for fewer faults (e.g. ADA/Rust)? Fault tolerance is good for high availability, which can be a safety goal (e.g. What does your airplane do when…

Static typing doesn't help you if your software doesn't crash but does the wrong thing (like the Boeing). In that case not even dimensional analysis helps you, because by my understanding that code was really stupid. I find that if you're only documenting via types, that's a problem. You should also document by writing documentation.

I dont think anybody argues that types replace documentation. However, documentation without types tends to get repetitive and requires you to come up with ways to structure it properly. Turns out, you can encode a lot of information into a type and now it can be automatically verified and frees you to write documentation for things that can not be expressed in types.
Post reply on HN