shoot yourself feet - jmfayard/drafts GitHub Wiki
What are the best tools/concepts to shoot yourself in the foot again?
The best software / programming concepts have put a lot of thoughts on how to prevent developers to not shoot themselves in the foot again and again.
{% embed https://www.youtube.com/watch?v=CDmWJbN8bDo %}
Should we learn from the best? Sure, but most often we don't actually realize how much efforts have been put into preventing those errors. We are focused in the task at hand (thanks to them!). At best we are grateful that the thing we wanted to do wasn't as complex as we feared.
If learning from the best doesn't work, what we can do is to learn from the worst.
And that's where I need your stories and insights
What are the best tools/concepts that empower developers to shoot themselves in the foot again and again?
The kind of things that could have been as welll designed by an evil genius curious to see how much confusion it can infuses in the world.
It could be anything (IT-related):
- a concept considered as harmful as GOTO (nullable booleans?)
- some wonderfully confusing piece of interfaces (git's cli?)
- some overly complex architecture principles (microservices)?
And what lesson can we learn from this? (Because they didn't in fact do it on purpose, so we could too).
Please use your keyboards, release your frustrations and let's celebrate the worst of the worst!

How to quit a program in Unix?
vim has become a meme for being harder to quit than smoking or alcohol
but is it really fair though?
Here is how you can quit vim
:quit
Save changes to "/private/tmp/hello.txt"?
[Y]es, (N)o, (C)ancel:
- the
:part opens a command palette much like in visual studio code or IntelliJ quitseems like... utterly reasonable.- then the user may have unsaved change, what's the right thing to do? That's ...asking to save, discard or cancel. Utterly reasonable as well.
So what's the big deal?
One issue is code golf : developers striving to advertize the shortest possible solution that solves a particular problem (quitting without saving). So they will tell you to use :q! . Code golf is bad. Strives for clarity, not for shortness.
But the true issue is UNIX's masterfully simple yet evil decision to let each program decides what it feels is the best way to quit for himself.
That seems high minded. Aren't app developers adults?
No, what adults do is that they look and only care about the effects in the real world:
- want to quit vim? that's
:q!for ya' - want to quit
nano? That's^X N. Supposedly much easier? - want to quit
man? that'sq. Shorter than vim, code golf win! - want to quit
emacs? That'sC-x C-c - want to quit
python? That's>>> quit() - want to quit
node? That's.exit - want to quit
perl? That's^c - want to quit
telnet? That's^]. For some reason? - want to quit a
sshsession? That'sexit - want to quit
echo <<HERE? That'sHERE - want to quit a java program? That's sometimes
killall java - want to quit something with
kill? often programs will choose themselves how to interpret your signals, very nice and handy
I am sure I forget some, but it's enough I think to see the masterfully evil decision UNIX made.
The evil decision being to not take any decision.
Which is also a decision.
And often a very bad one.
