The underscore character _ is another example of a technical work-around being carried forward long after the particular implementation constraint it was meant to circumvent has gone away. The underscore character was a key on typewriters used to write underlines over typed text — the only available way to emphasize text at the time. When computers arrived on the scene, the character was quickly appropriated for use as a word separator for when one needed to increase the legibility of identifiers in computer programs without actually breaking the word into two. Indeed, the underscore is often treated as part of the the set of characters on computers considered letters, when the hyphen is not.

Aside from being laborious both to type and to say, anyone not a touch typist and/or requisite of bifocals is going to have trouble identifying the underscore character on the keyboard. On the opposite end of the computer expertise spectrum, kill-word key combinations like Control+W, Control+Backspace and Option+Backspace often don't behave consistently when underscores are involved.

The solution here is to eradicate the underscore from all customer-facing identifiers. This includes URIs and e-mail addresses and may well extend to API verbs, XML element and attribute names, CSS class names, et cetera. By extension, I recommend the complete ban of underscores from all text within a given organization that is not part of a programming language for which the use of underscores is a requirement of syntax or a well-established element of style, like C and its derivatives. The other exception, once again for programming and markup languages, would be in prefixing identifiers that would otherwise begin with a number and thus produce a syntax error.

In URIs, the underscore character is already illegal in domain names, and for HTTP URLs it is a trivial task to coerce typed underscores to hyphens by redirecting requests.