Sometimes in code we find that the same names are used multiple places to mean different things. This is a CodeSmell that easily leads to misinterpretation. Some examples: '''Overloaded Vocabulary''' : This is the fault of DeGeneralization. Curses! ''Curses = The aptly named cursor control library under Unix??'' * "Thread" as in ThreadMode vs. "Thread" as in multi-threading. * "Pointer"/"Reference" in the C/C++ sense vs. the English sense. * "Serialize," as in "converting an object and, recursively, the objects to which it refers, into a sequence of bytes for storage to disk," vs. "serialize," as in "causing to occur in some sequence as opposed to potentially simultaneously." * "Order" meaning a request or purchase (order me a box of pencils) vs. "Order" for sorting and sequence (put the pencils in order) * "Invoice" (Backup, Archive, and many other words) which can be both noun and verb. "I have to invoice before you can have your invoice." * "static" keyword has different uses in C++: static variable keep its value even after it goes out of scope..and also static member variables, and static member classes. * ...''many others. (TODO)'' '''Identical Identifiers''' : Reusing variables for different purposes is a sign that your function has probably run too long, or that the variable is in the wrong (too global) scope. ''[SplitTemporaryVariable -- page 128 of RefactoringImprovingTheDesignOfExistingCode book.]'' ---- CategoryNaming