A *(term). We say that A is orthogonal to B if you don't have to think about feature A while thinking about feature B.

This is desirable because humans aren't good at reasoning about more than one thing at a time.

_(C++), for example, embodies lack of orthogonality in language features. it's like a swiss army knife with all blades soldered in open position; you can do lots of things with it, but everytime you use one feature, the other ones get in the way.

<blockquote>experienced C++ developers know that understanding inline functions and understanding virtual destructors does not necessarily mean you understand inline virtual destructors. Such battle-scarred developers recognize that comprehending the interactions between the features in C++ is of the greatest possible importance in using the language effectively.<br> --Scott Meyers, <u>Effective C++</u></blockquote>

At the other end of the spectrum, _(OCAML) is a language with a lot of orthogonality in features, and it's like a tool box where you can choose the right tools for the right job, and leave the other ones in the box.