There is never a new and immature "gravity library" that requires you to rework your existing designs to cope for new slightly different acceleration due to gravity, the "metal fatigue" library does not introduce new unexpected bugs randomly, there is no reason for the "corrosion library" not being able to be used at the same time as the "average human adult male height library" due to obscure dependency issues, you never have shoe-horn in the "compressive strength of concrete" functionality that was originally out of scope but sales now say is P0, you never have bugs like unexpected-yet-sufficiently loud sound waves overflowing to tiny negative values etc and causing a "negative sound area" or something weird and hard to conceptualise.
I.e. physics itself is largely unchanging. We have worked out the fundamentals and they don't really change - gravity never flips direction, bounancy always goes "up" etc - and we're not building on top of a ship that is built on top of another ship that is built on top of a hovercraft that is built in top of raft that is built on logs that is built for a fresh water environment but you are using it in salt water due to the CEO being buddies with someone, but the people building the ship only see the first turtle beneath them.
The standards between Blogging, Banking, and Aerospace are each drastically different and sequentially more rigid. Thinking that we as software creators are failing because we're not holding ourselves to the standards of Aerospace and beyond feels like complaining that some high school kid working at McDonalds is not holding himself to 5 Star Restaurant standards.
You get what you pay for. And you typically pay for what you (think you) need.
edit: structure
There are exciting new materials, as well; would you consider building with cross-laminated timber? Would you build a plane with carbon fiber? Okay, how about one with a maneuvering characteristics augmentation system?
(POSTSCRIPT: Just checked, not the tallest anymore.)
That's not true. Tons of sht goes wrong in civil engineering projects. Like the ground moving, or it is not strong enough to support your building, or the workers bailing on you, or suppliers changing the product, or suppliers delaying a shipment, or suppliers going bankrupt, etc...
I think the difference is that it is mostly* redoing the same thing over and over again with minor challenges overall. Whereas in software development you are starting new every time for every new project.
Transistors don't misfire, CPUs don't miss an operation, firmware invisibly and reliably handle all the internal packets of the motherboard, the screen refreshes millions of pixels every 16 ms. All of this relies on the work of thousands if not millions of people who have never meet each other but whose piece of work communicate flawlessly with each other.
[1] https://en.wikipedia.org/wiki/Metastability_(electronics)
And then nothing. There was variation in the cells, sure, but not really all that much (also we can't really tell). As far as we can tell no multicellular life, no great advances, nothing, other than continued existence. No spreading further. No evolution towards more complexity. Muddling along at best. Total pause at worst.
900 million years of it. Maybe more.
Why ?
I learned this the hard way with my 1U Intel Atom C2000 series server. Completely bricked due to a bug in the CPU.
> Transistors don't misfire, CPUs don't miss an operation
This relies on a lot of testing. We throw the misfiring ones away at the factory. This may be over half the chips: https://www.pcgamesn.com/amd/zen-2-ryzen-3000-cpu-yield-70-p... (AMD are doing well at 70% pass rate but Intel are throwing away more than half their dies!)
In aerospace or high-alpha-radiation environments, people can use "lockstep" processors (e.g. TI Hercules) that can cope with misfires.
In the end, I feel it's quite comparable to software running on layers of layers of abstraction being maintained by the respective experts in their fields (testing, CPU designers, driver implementers, OS maintainers, etc.).
Copy and manipulate any large data set on standard desktop and then on a server with ECC ram and compare the results. All that stuff happens and we go through a lot on the high end to mitigate it.
Unfortunately, once you deploy your software at scale you discover that some CPUs do in fact miss operations. See https://bugs.chromium.org/p/chromium/issues/detail?id=968683 for example, which has also been observed in Firefox crash telemetry (e.g. see https://bugzilla.mozilla.org/show_bug.cgi?id=1593228 and https://bugzilla.mozilla.org/show_bug.cgi?id=1553380#c2 and so forth).
Now CPUs do mostly work; we're talking about single-digit numbers of crashes per day across the thousands of people who run Firefox nightlies. But I wouldn't want to trust a plane's avionics to this particular CPU model, for sure.
(And if they do, that's usually solved by procurement, warranty or is otherwise someone else's problem.)
I don't get it. Is this supposed to be sarcasm?
So in just this story we have a maintenance failure (bearings) and two critical failure (cranes) in physical engineering.
They are replacing the bearings on all the azipods, which tells us this is a design and engineering failure rather than a maintenance failure.
But that also makes it somewhat intangible and the ability to analyze, test and observe a large software construct relies on the mental capacity to read and grasp units of code and its complex interactions. Once components start messaging with each other and cross-influence their state you quickly enter the realm of complexity theory and tight control of information flow is the only way to guarantee some degree of predictable outcomes.
When I see these ship assembly videos, it's very tough engineering and often novel territory but you got something in your hands, you see the parts move and can measure their forces and evaluate interactions. Every nut has a checkbox, but code lines don't.
That’s part of the problem. Usually the output and behavior of a program is well specified enough that we should have a checkbox (test?) for it. This is more about the process of development than the artifacts.
I've literally never worked in a project like this. It's always "here's some general idea of what we want, with a couple of hard constraints. Build it however it makes sense to you, and we'll change anything we don't like after we see it." The only exception I can think of is data import from a known file format or API.
This is the problem with building software. It's intangible and non-developers have a very hard time understanding the tradeoff of doing something "hacky" vs doing it right.
lolnope
Or at least, if there is such a specification, it's never in a single organized form but scattered around the tickets, emails, postit notes and memories of the team members. And filled with assumptions on what's expected.
Only the most complicated, expensive and safety-critical systems get that kind of treatment. At which point people start realising that the requirements engineering is actually one of the most difficult parts for business applications. Some projects have collapsed with millions spent before writing any code, simply trying to untangle the requirements.
This gives me a terrible idea:
Put https://xkcd.com/1737/ (Scale) and continuous integration into a blender.
Stand up a whole new team to build out your Ultimate Last Widget, from first principles, every 5 years. Have maybe 5 teams running continuously.
Each team operates asynchronously from all the others and there is no blocking.
Maybe teams can freely exchange ideas, and maybe workers can switch teams at will.
Hmm. This would unfortunately result in a Super-Team™ that knows how to create a new Widget X from scratch in (eventually) record time, but not necessarily maintain it.
And there's the good question of whether squishy real-world influences would cause the last of the teams to succumb to second-system effect...
Wow this is hard
(e.g. https://en.wikipedia.org/wiki/The_Pentagon_Wars , but also applied to a lot of early WW2 and things like the UK V-bombers)
Though your tale is a pretty close summary of the political story underneath cancelling Supersonic Harrier and TSR2 for F111, and the Buccaneers and Phantoms we eventually ended up with. Though you missed the opportunity beloved of politicians to merge Acceptable Fighter with Acceptable Naval Fighter into one aircraft and end up with White Elephant that barely flies, and certainly doesn't float. :)
Thanks, I needed a good laugh ;-)
Not so say they aren't challenging. But software is billions of parts, and its freaking incredible we can get anything to work at all.
Iteration happens in mechanical designs too, but a lot of that is done virtually before physical parts are made. In software there is no distinction between virtual code and real code. We make a somewhat artificial distinction by having official releases that have hopefully gone through more testing.
Different projects have different priorities. If my app crashes, no one's going to die, but if I'll waste time on formal verification of my database layer, quite a few people will end up losing their jobs and/or investments.
When one section of the dock doesn't work it won't suddenly flip upside down as could be the case for code.
https://catless.ncl.ac.uk/Risks/3.44.html (1986): early F-16 software would flip the plane upside down on crossing the equator :)
From the above page:
> From Dagens Nyheter [Stockholm], Aug. 22, 1986. My translation, abridged.
> The chairman of the governmental data- and public-access committee [offentlighetskommitt'en], Carl Axel Petri, rejects the criticisms which have recently been brought by the moderate party [conservative] and folk-party [liberal conservative] concerning sales of personal information from computer data banks.
> "It is important to quickly get a law that stops general sales. We have allowed some exceptions, nine specified computer companies, but even their sales shall, in the future, be controlled by parliament. Nobody should be allowed to earn money by [selling] personal information. Sales should have a public interest, in principle, the new law will forbid sales" said Petri. ...
I'm removing a bit of context from the above, but it's nice/interesting that this was being discussed in this way back then. Ha.
The fact that this was largely ineffective against giant US multinationals that didn't respect local law is what lead to the giant international reach of GDPR.
In some cases the ship was laid down and was obsolete when launched.
An for Fankenships take a look at French pre dreadnaughts - "when hotels go to war" as some on YouTube put it
This is missing in a lot of software developers nowadays, and we as an industry, don't really see the problem with this... I see people applying for jobs with 8 weeks education in a bootcamp and think they should get a job as a software developer... This is normal, and we are ok with this?
Rather than making our education faculties for computer students more rigorous it seems we are infantilising them.
Garbage in, garbage out. I don't see a path our industry getting better or more mature, if anything I reckon it's going to get way worse before it gets better.
The 8-week-bootcamp graduate is not going out and working for Boeing, MCAS memes notwithstanding.
In software the experimentation cost is very small so it makes sense that there are a lot more prototypes and abandoned projects etc.
So it is not only software that produce faulty products.
If every IT project with an equivalent number of man hours as this ship would produce a physical artifact like this, the sea would be full with abandoned Frankenstein ships, and not a many would actually function. I’m glad that software is invisible, mostly.