Say O(n²) Eighty Eight Times Fast

The symbol < is spoken "less than", but how did you know that? Unfortunately, it's common practice for documentation and educational material to teach words and symbols without an adequate explanation of how to say them. And often, googling it doesn't work.

Why does it matter? Of course for communicating, but also for your own skill and understanding. When you read, you still think the word verbally, so you would end up choosing a word like "left angle bracket" which is less intuitive, and probably leaves a lingering sense of uncertainty about it. Yuck.

Separately, some technical terms have multiple equivalent spoken variations and which one is best to use when and why is an unsolvable mystery. One such case is the verbal equivalent of Big O notation (update: what I mean here is not strictly big o notation, but the language around it for computer science context). I've done a few interviews recently, and I noticed that my interviewers used a variety of terms, and my own phrasing has awkwardly shifted around too. Maybe we can figure something out together:



My next blog post has the results.

Where did I get these terms? Just a few clicks around the internet and my own experience. I started idly writing a few, which started to become a Backus–Naur Form (BNF). Then I got quite annoyed that I couldn't figure out how to properly pronounce Naur. Turns out it's like now-ah. Then I wrote a python program which expands the BNF to all possible combinations:

from itertools import product

def bnf_expand(*args):
    result = []
    for arg in args:
        result.extend([" ".join(filter(None, x)) for x in product(*arg)])
    return result

# the BNF in reverse of normal order
asymtotic = ['asymtotic', '']
asymtotic_modified = ['bound', 'run time', 'growth', 'growth rate']
commonly_modified = ['complexity', 'efficiency', 'growth rate']
common_modifiers = ['computational', 'big oh', 'algorithmic', 'time', 'asymtotic', '']
unmodified = ['big oh', 'order', 'order of complexity', 'time']
O = bnf_expand([asymtotic, asymtotic_modified],
                [common_modifiers, commonly_modified], [unmodified])
of = ['of', '']
On2 = bnf_expand([O, of, ["n squared"]], [['quadratic'], O],
                 [['oh n squared']], [['oh of n squared']])

# Print the top level expanded BNF
print On2

The result is 92 terms which can work the same in a conversation (unless your votes/comments say otherwise). And that doesn't even consider whether to say something is O(n²), has O(n²), or is of O(n²).

The list is a bit long, so I put them in javascript and made some buttons.

You might call all these words "terms of art", or "jargon", or "lingo"... orrr, let's call the whole thing off.

More comments at reddit, hacker news