The following is written for programmers who don't really understand
object oriented programming yet. They probably understand the language
semantics, but don't really understand how to use them correctly.
If you find yourself misusing object oriented semantics that probably
means you don't have the skills to develop good software. This is a
problem because bad software is much harder to develop and even harder