One of my biggest pet peeves is people defining commands and utilities as shell functions and demanding I source some environment setup script instead of just making regular command scripts and running them as normal programs.
My shell is my computing environment. It's rude for a script author to make me change my computing environment when he could just as easily have made a script and created his own sandboxed environment that wouldn't interfere with mine.
People should never ship end user interfaces as bundles of shell functions that have to be sourced.
I remember when I first interacted with Ruby Gems and learned I needed to source some file to make it work, I thought, "Wow, Ruby is so weird and magical they can't even use the shell normally." The joke was on me when Python virtual envs became a thing.
My shell is my computing environment. It's rude for a script author to make me change my computing environment when he could just as easily have made a script and created his own sandboxed environment that wouldn't interfere with mine.
People should never ship end user interfaces as bundles of shell functions that have to be sourced.
(I'm looking at you, Android build system.)