I'm very interested in systemic solutions to problems. Blaming an individual when they make a mistake *feels* reasonable. When a significant percentage of people make the same mistake (70%, 2%, it doesn't matter as long as it is measurable, predictable and has a negative impact), then it's *not* a persons fault.
We know how to tackle those kind of problems: we change the environment to minimize the likelihood of mistakes. Traffic and pedestrian safety is an example of a well explored space where we know what works. Bollards, narrower streets, slower speeds, raised pedestrian crossings, providing good alternatives to driving to reduce traffic...
Similar in industrial spaces: clear signaling, segregate heavy machinery from human limbs, clear and practiced process to get out of dodge when things go poorly...
It's always about looking for solutions to eliminate mistakes, and when they can't be eliminated, minimize the blast radius.
This is why I like #Rust: it's a language and tooling that applies the industrial approach of "if two people make this mistake, figure out how to mitigate it".
We can't "individual responsibility" our way out of systemic problems.
I want more software with bollards.
This (regurgitated, I've said similar things in the past) comment brought to you from seeing people notice some of the work that goes into tiny checks to help you make your software (and documentation!) as good as it can be. It's not technically impressive work. (Not in isolation, maybe on aggregate, through sheer volume.) This case won't save any lives. But a little bit of effort on the tooling side makes the user's code slightly better, which in turn makes their users' day a little smoother. It is worth it.
https://namtao.com/@noboilerplate/116798014108260430
I compare it to making the joinery visible at the bottom of a chair, beautiful (regardless of what rubric you use for that): it's unnecessary, as most people will never see it and no one will expect it. But it is there as much for the rare person that notices it, which can work as a proxy for the amount of effort spent in the rest of the chair, as it is there for the creator who knows they spent a tiny bit more time making something good all around. It's not always possible to do that, when the objective is maximising profit. But FLOSS can be something closer to artisanal work. Anyone who's passionate about tiny details can work on them. Have enough of them in the same place and you can end up with software that could never be accomplished under economic constraints.
Also, relatedly, you don't ever have to be a mythical 10x coder. It's hard, unlikely, and maybe even not worth it as it is a recipe for quick burn out. But you *can* be a coder that makes thousands of other coders 1.1x more effective.
@ekuber I found that framing very powerful when I was working on build and test tooling!

@ekuber have you discovered aviation crash explanation videos on youtube yet?

aviation is an amazing example of what giving a shit about getting things right can do. crash reports authors will not just carelessly say "pilot error" and if they do, they often won't leave it at that - they'll want to know why it wasn't caught and compensated for by something else? and was there some way in which the airline contributed, e.g. a culture of corner cutting?

@dysfun Not videos, but yes. Same with the introduction of checklists and processes in operating rooms.
In *every* industry some people notice some mistakes happen over and over again, pushes to introduce checklists with the expectation of improvement, cowboys complain loudly about being baby sitted*, and if the checklists still end up being used despite the loud complainers the clearly measured result is "these work, who would have thought".

* hell, reading about the whole collective "You want *me*, a *surgeon* to wash my hands!? You're calling me filthy!?" and fallout has made me drastically change how I approach proposed changes.

@dysfun I certainly think of this when I see people state "just get good and don't make mistakes while coding". It always makes me wonder "do they wash their hands or wear their seatbelt...?"
I had some rando aggressively reply "I cut the seatbelt of my car if I want to! I'm a free man!" That was a very easy block.
@ekuber i did get good, but i still make mistakes. many fewer than i used to, at least. but that just makes me wish i had tools that could catch the errors i do make. i feel like whichever tool we use these days we're making compromises.
@dysfun We train people in factories to do their job well and safely. We also design those machines to make them safer by construction. Sometimes the safety comes from process, which relies on people repeating manual steps.
In top rope climbing, you set up your harness. Then you check it. Then your partner checks it. And even then as people get comfortable in the routine, the checks get sloppier. An effect that I work hard against by stopping talking when doing the checks. The more experienced I am in a discipline, the more important it becomes to emphasize the basics.
@dysfun @ekuber god, I remember reading some railway safety reports which apparently felt like "human error" is an appropriate place to stop. the contrast with aviation reports was jarring!

sometimes I wonder if being a scapegoat in case of accidents is just considered part of the job description...
@mei @dysfun ah, yes. Good old "human responsibility fuse" job description.
@mei @dysfun also seen it called "moral crumple zone", which is likely more evocative.

@ekuber I fully agree, but as you know #Rust wasn't designed to prevent as many bugs and vulnerabilities as possible, only some of them, mostly memory safety issues.

That's why I've been trying to make a comprehensive list of problems and how they might be solved or mitigated by a next-generation programming language: https://github.com/gato-lang/gato/blob/main/design/bug-types.md

#ProgrammingLanguages

gato/design/bug-types.md at main · gato-lang/gato

The Gato programming language. Contribute to gato-lang/gato development by creating an account on GitHub.

GitHub
@Changaco I disagree that it is focused *mainly* on memory safety issues (they are the big ticket feature, but a garbage collected Rust would still be a nice language, just not as useful).
That is a good list of things that need mitigation of some kind, and some that Rust doesn't tackle. If Rust is only a step on the way to better technology, it will have been worth it. I believed that it still has gas in the tank to tackle some of the items in your list.
@Changaco Would love to see experimentation on what addressing these would look like, but when bolted onto existing languages as well as in tabula rasa efforts.
@ekuber yeah but have you watched drivers on US streets?
@kdwarn I have, and I'm convinced that drivers would behave better if the infrastructure was built for safety. Streets where sideshows/street takeovers are possible are unsafe by design. Roads where the posted speed is 30 but that are designed for 60 are improperly built. Human nature is what it is, but we can nudge behavior.

@ekuber I mostly agree with what you’re saying, and think better design/constraints can nudge people towards better/safer behavior, but at the same time I disagree in that it seems there will always be a not-insignificant amount assholes who are unwilling to consider anything other than their supposed rights to do whatever the fuck they want.

Edit: probably easier with software, which is your main point anyway.

@ekuber this book drives home this concept and is one of the few I can say really changed the way I see the world https://en.wikipedia.org/wiki/The_Design_of_Everyday_Things
The Design of Everyday Things - Wikipedia

@smlx can't stop seeing push doors with vertical handles without thinking of this book.