Live data from Hacker News

What Should We Do to Prevent Software from Failing?

sloanreview.mit.edu

31–40 of 128 posts

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

#31
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…

Reminds me of Michael A. Jackson's paper [0]. He specifically discusses this very same issue. I think it was posted on HN a while back but can't dig up the link.

0. http://mcs.open.ac.uk/mj665/FoSEZurich2010.pdf

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

#33
post #19

Licensing is not the solution. Here are some things that can help: 1) Limit mutations, shared state, and side effects to very small sections of code. The majority of code should be pure functions and immutable code. 2) Tooling and IDE's should have "code coverage" to show where code is pure and referentially transparent and where it is not. 3) Learn from mathematics / computer science. Adopt formal methods and proof…

> Licensing is not the solution. > Here are some things that can help: Maybe license people who can demonstrate that they really understand this stuff then?

Certification might be less heavy handed and flexible. It keeps control within the industry and out of gov't where there can be lots of other inefficiency and conflicting interests.

Laws also tend to be very slow to change (software moves too fast). If colleges are struggling to keep up with relevant skills how much worse will it be for laws?

Licensing typically also creates a paywall (student loan debt) and denies access to otherwise bright and capable people who don't have the resources to go through a college / licensing system.

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

#34
post #14
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 no magic formula for ensuring your ideas are always sound. If the idea is wrong you can't even write tests to ensure it's correct. There are two parts to this. A wrong idea as in building the wrong product, and a wrong idea as in building the product wrong. There aren't any mechanical processes to protect against the first, but building the wrong product is rarely catastrophic (maybe only from a business p…

TLA for the curious.

https://learntla.com/introduction/

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

#35
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…

I've heard the analogy of a software developer to a mechanic, and I like it much more. Developer = Mechanic Computer = Car Make = Language Model = Platform Year = Version A mechanic is licensed by ASE to work on cars in the USA and there are 50 different certifications [1], depending on the type of car/truck/bus. I don't want to see software development go this route, where developers have to get multiple certificati…

That happens already. As things stabilize you tend to value predictability. You can have 6-10 smart people do the architecture and design work that drives the work of hundreds of developers.

Programmers want programming to be about ideas, but many/most problems are applying patterns to process.

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

#37
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…

We could start by not allowing pseudo-engineers out of bootcamps.

Yes, specs and tests don't cover everything, however without them software is much worse.

I guess only an increase in lawsuits and product returns will eventually change the status quo.

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

#38
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…

I've heard the analogy of a software developer to a mechanic, and I like it much more. Developer = Mechanic Computer = Car Make = Language Model = Platform Year = Version A mechanic is licensed by ASE to work on cars in the USA and there are 50 different certifications [1], depending on the type of car/truck/bus. I don't want to see software development go this route, where developers have to get multiple certificati…

It is already like that in the enterprise, where certifications are the entry point for certain partnerships.

As engineer I find there should be a baseline.

I also don't expect weekend cooks to keep a Michelin restaurant running.

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

#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 input should be nonexistent

- Write a lot of automated tests

- Take the time to learn attack methods and actively try to break your own systems

- Have an external firm that will try to break your systems

- Add additional redundancy for hot spots in codebase

- Code reviews are mandatory and you should follow an internal style guide.

- Adopt a maintenance first culture, it should take less than 48 hours for you to be on the most recent version of all your dependencies. Bug fixes are your #1 priority.

- Educate your customers on what your potential failure conditions are, your recovery point objectives, and your recovery time objectives.

- If you do have a failure, fail loudly in a way that a customer can understand, report the failure and hopefully have a backup plan that users know and can run through.

- Customer support is a responsibility of the engineering department.

- Learn from others and contribute back with your tooling.

You can write mission critical code in any language. (Some are definitely better than others) You can't manage a mission critical application without investing in great operations.

Read google's SRE books for more practical information: https://landing.google.com/sre/books/

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

#40

Civil engineers aren't asked to design a small 2-story building that can be retrofitted as a 300-story skyscraper when the time comes. Or connect two buildings 15km apart over the weekend.

Exactly. I could make my stuff super rock solid if I could focus on that for the next few years. I am sure we can improve but the main reason for failing software is the speed we are developing at. And the fact that organizational learning gets prevented by constantly hiring “fresh” people who have no knowledge of the work that was done previously.
Post reply on HN