The Grammar Geek: My Favorite Error

By and large, I conform well to American business writing grammatical standards. There is one way, however, in which I simply prefer to be wrong: the placement of commas and periods in relation to non-conversational quotes. If the punctuation is not part of the phrase, I prefer to put it outside the quotation marks instead of (correctly) inside.

As I discovered earlier this week in conversation with some fellow MIT alums, this is a classic geek preference. According to,

Hackers tend to use quotes as balanced delimiters like parentheses, much to the dismay of American editors. Thus, if “Jim is going” is a phrase, and so are “Bill runs” and “Spock groks”, then hackers generally prefer to write: “Jim is going”, “Bill runs”, and “Spock groks”. This is incorrect according to standard American usage (which would put the continuation commas and the final period inside the string quotes); however, it is counter-intuitive to hackers to mutilate literal strings with characters that don’t belong in them. Given the sorts of examples that can come up in discussions of programming, American-style quoting can even be grossly misleading. When communicating command lines or small pieces of code, extra characters can be a real pain in the neck.

Consider, for example, a sentence in a vi tutorial that looks like this:

Then delete a line from the file by typing “dd”.

Standard usage would make this

Then delete a line from the file by typing “dd.

but that would be very bad — because the reader would be prone to type the string d-d-dot, and it happens that in vi(1), dot repeats the last command accepted. The net result would be to delete two lines!

This was a revelation for me, because my preference for the error is directly related to exactly these two things. Perhaps it simply seems less precise to me to include punctuation in phrases where it did not originally exist. For whatever reason, unless I am writing for publication, I put my commas and periods outside. Well, I do so until the grammar-check inside my application corrects them…