- Be aware of the strength and weakness of different programming paradigm.
- Exploit the strength of a paradigm, but avoid the weaknesses.
- Understand the choice between the addition of types or operations in dynamic polymorphism.
- Prefer an object-oriented solution when you primarily want to add types.
- Prefer a procedural/function solution when you primarily want to add operations.