In many things in life, but particularly in the world of user interfaces and software behaviours, good programmers subscribe to the principle of least surprise. This means that we, as programmers, attempt to ensure that the ways we accept input, produce output, and perform work, are as obvious to the user as they can be, as consistent as possible across software projects and therefore as unlikely as possible to surprise the user.

Unlike when we're receiving gifts or attending a pot-luck dinner, when we're writing a configuration file, or running a fundamental tool, surprise is a bad thing. Users simply do not like it when something they expect to work doesn't and the principle of least astonishment. This leads to a consistency and uniformity of interface which users appreciate and programmers find handy. For example, many applications use INI file style configuration so that users can be confident that they understand the syntax of the file they're editing.

Programs often use similar key bindings to navigate content. Anyone who has played with Vi/Vim will know about hjkl (bless you). It might therefore surprise you to know that XMonad defaults to using M-h and M-l as "move boundary left/right" and M-j and M-k as focus "up" or focus "down" in the window list. Or that in G+ (yes, Google Plus, and in fact in gmail too) you can navigate between entries using j and k (as does Tweetdeck, Twitter, Facebook and a myriad others).

As an example of where the principle breaks down is in the use of the home and end keys. I personally expect home to be start of document and end to be end of document so when someone else tries to operate my editor and home doesn't take them to the start of the line they're very confused. Equally my fingers are used to C-w being 'delete word' in a shell, but some terminal emulators take that to mean close window which can be a tad confusing.

So next time you're developing a piece of software the user interacts with in any way (even if only on the commandline) -- take a look at how other programs do the sorts of things your UI will have and try and ensure no user will be surprised with how you choose to do things.