Positional arguments

If you have to stop and think about which one comes first, that’s already an indication that it shouldn’t be positional.

Only use positional arguments when they are completely expected e.g. copy this to there.

Positional arguments are difficult for people to remember and use correctly, especially if they could be used interchangeably!

$ ln -s <target> <the other target> # !?!?

This section is short enough that it could be subsumed into the Command structure section.

However, perhaps it would be more helpful if it expanded to describe what to do instead of positional arguments. For example, ln’s arguments work the same way as mv and cp: <existing-thing> <new-thing>. So should mv and cp not have used positional arguments either?

I’d like to keep them separate in order to highlight the importance of paying attention to the appropriate use of positional arguments.

Both mv and cp are “simple” and somewhat trivial - everyone uses them constantly thus the positional arguments of them are more of a learnt behaviour. ln is different as it’s something one uses more rarely and the two arguments are not as obvious. The reason behind this section is to nudge engineers to consider whether the positional arguments are easy and obvious or not - and if not, to use flags.