There exists a formidable body of study describing the practices and theory required to write knowably-correct software, but the software engineering industry treats these ideas with utter derision. Even lighter-weight methods for knowably preventing broad classes of errors(e.g. Haskell-like type systems) are considered niche and pretentious. These opinions are mirrored by many CS programs, so most engineers wouldn’t have the slightest clue how to apply these methods, or even know that they exist, should they decide they were necessary.
With that kind of culture, what can we expect?
It's a rare case of a system its main customer does want to be able to break.
Now, of course we can make things that work. Airplanes and elevators are computing devices too, after all. But a working software is as expensive as a working airplane. People don't want their word processor to cost millions of dollars. OpenOffice is free, MS word is a few bucks, what do you expect?
Many people would be happy to break ATMs or banking software.
https://www.wired.com/2016/05/insane-81m-bangladesh-bank-hei...
Funny you should say that. Yesterday, the buttons for our elevators crashed. Nobody could hail elevators on the touch-screen thing. Because software. Name the last time an actual elevator crashed.
They do it like every day, if, as is the case for software, you use “crash” to mean “experience a sudden and complete cessation of operation.”
They also do crash in the rather more extreme physical sense occasionally, e.g., https://www.thehindu.com/news/cities/Delhi/3-injured-in-elev...
IMO, it is actively harmful to blame the software industry as a whole for voting machines being horrible since however bad most software is there are parts of the industry that can produce software as reliable as bridges and elevators and those are the parts of the industry that should be used for voting machines even if the rest of the industry was quite a bit better. It is only for political reasons that voting machines are unreliable.
Elevators, bridges, airliners and other properly engineered systems, are incredibly safe and reliable. You have to go digging to find exceptional events that remotely compare to the daily chaos found in software systems. The point of my story is that elevators themselves (systems we barely think about on a daily basis) start to become chaotic and unreliable when software is introduced.
...which is not to say that it can't be fixed. My contention is that software engineering is possible, it just isn't fun or easy for inexperienced coders to do, and therefore not valued by the current software industry.
But anyway elevators are quite frequently out of order, and I don't know how often it's a software vs mechanical vs administrative (ie "security check") problem. I just know that, in all instances of elevator crashes I know of, the problem was a mechanical one, not a software one.
> ...which is not to say that it can't be fixed. My contention is that software engineering is possible, it just isn't fun or easy for inexperienced coders to do, and therefore not valued by the current software industry.
It's not that it's not fun, but it's incredibly expensive, and usually not worth the cost.
To use the analogy of the plane designer, it'd be equivalent to building a consumer airliner that can handle flying through a warzone.
It's maddening how preventable a lot of this stuff is, but you can't convince anyone to listen to you because rules and processes aren't fun.
So even if you are the sort of software developer to consider the lifecycle and long-term utility of the products you produce -- good luck with that.
JavaScript is so yesterday, PyChainGo is the newest and best. Get with the times!
In the meantime, a junior programmer on my team just got an assignment (while I was on holiday) to add a feature to an old project she'd never worked on. The feature was described in three sentences, with a budget of "at most two days" as that is what the work was sold to the customer for.
I mean, it's rather hubristic to compare ourselves to those industries, we're closer to the handyman you hire to create a new door in some wall without telling him where exactly, all that matters is that it's done fast.
If every state contracts a handful (some may even contract a single one) of suppliers to crude the voting software, a bad actor that could compromise only one of those systems would have an enormous impact on an election. Contrast that with paper ballots, where an adversary would have to compromise dozens or hundreds of precincts, in-person, in order to have the same effect.
In terms of economics, having each precinct implement its own voting software (or contract uniquely) is not cost effective, nor would I trust small municipalities to be able to judge security.
It’s just too risky all around. Maybe one day when our software systems are better understood, or there are different security mechanisms, electronic voting might work. But not today.
Why is this different for software than for civil engineering? Fundamentally it’s not, except that people are willing to spend money on a new design for every bridge, and generally there is a collective awareness of threat models for bridges.