I've been a longtime fan of Eric Lippert's blog. And one of my favorite (albeit short-lived) post series was his Five Dollar Words for Programmers. Although I've sometimes been accused of being too wordy, I find that learning the right word to describe something you're doing is a small step on the road towards understanding and eventual mastery.
This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2009/03/five-dollar-programming-words.html
Well, it’s a two word phrase but you have to love ‘Cyclomatic complexity’.
Oh yeah, transitive closure. Understanding that one is important. Luckily it’s pretty simple, and easily explained with a quick whiteboard diagram. It comes from graph theory which many may dismiss as a froofy subject (academic astronauts, anyone?), but you’d be amazed at how applicable it is.
As a simple example, imagine you are trying to remove unused code from your application. Conceptually, all you need to do is compute the transitive closure of functions called starting at main(), and remove everything that is NOT in that set. FxCop does this to generate warnings about unused code, and C++ linkers do as well for removing code from compilation units (i.o.w., if x.obj has 10 functions, but when app.exe links to x.obj there are 3 that app.exe doesn’t use, then those 3 functions are discarded from the final executable).
Garbage collection is also based on this. Compute the transitive closures of reachable objects from all your roots (e.g. local variables at the top of every thread’s callstack, and from all static fields), and anything that isn’t in that set is eligible for collection. Those objects are not reachable.
Thanks for the shout-out once again Jeff.
A favourite five-dollar word not mentioned already that is slightly relevant to programmers is boustrophedonic. Most dot-matrix and inkjet printers are boustrophedonic – that is, they alternate going left-to-right and right-to-left.
Chaos aka Cohesion aka High Granularity
I think Cyclomatic is a pretty good $5 word. As in Cyclomatic Complexity.
Funky and hokey, two very important terms that have been overlooked.
the first time i saw this, i thought my c++ compiler was yanking my chain. But i had done something terribly wrong with virtual functions and i learned a lot that day about multiple inheritance
also: authenticate and authorize. seems trivial now but back then i didn’t understand that there was a difference.
Mine was ‘normalise’ (a long time ago, thanks!). The light that went on at that moment lit up the entire world of databases-as-something-other-than-a-big-file.
I don’t think the second two are $5 words, they’re pretty common. Idempotent is a great one, though. Another one I like is reify: to make something abstract concrete or real. So in programming, you might have something abstract like the intermediate state of a search algorithm. When you make an object that perfectly encapsulates that state, you’ve reified it.
Normalisation would be one for me. It expresses the Don’t Repeat Yourself ethic in terms of minimising the number of copies of data, and instead articulating relationships between the data.
So these are five dollar words…now you know…
Mine is Orthogonality, i first read about it in the Pragmatic Programmer book
I do love things connected to maths!
My big one was Canonicalization. Which simply means removing duplication and creating one unique representation of an object or piece of data.
Canonical - the canonical method recognized, authoritative, authorized, accepted, sanctioned, approved, established, orthodox. antonym unorthodox.
the only aha moment i had was when I found the definition for what it meant - in the context its always used in: examples of doing things the right way.
Polymorphism! Especially parametric polymorphism—a fertile source of reuse.