In particular, why is that sometimes the options to some commands are preceded by a + sign and sometimes by a - sign?
+
-
for example:
It's left to apps to parse options hence the inconsistency. Expanding on your sort example these are all equivalent for coreutils:
sort -k3 sort --k 3 sort --key 3 sort --key=3 _POSIX2_VERSION=199209 sort +2