Tuesday, March 28, 2006

Orthogonal

This summary abstracted from a more complete definition in Wikipedia:

In mathematics, orthogonal is synonymous with perpendicular when used as a simple adjective that is not part of any longer phrase with a standard definition. It means at right angles. It comes from the Greek orthos, meaning "straight", used by Euclid to mean right; and gonia, meaning angle. Two streets that cross each other at a right angle are orthogonal to one another.
...
The word normal is sometimes also used in place of orthogonal. However, normal can also refer to vectors of unit length. In particular, orthonormal refers to a collection of vectors that are both orthogonal and of unit length. So the orthogonal usage of the term normal is often avoided.
...
In computer science, an instruction set is said to be orthogonal if any instruction can use any register in any addressing mode. This terminology results from considering an instruction as a vector whose components are the instruction fields. One field identifies the registers to be operated upon, and another specifies the addressing mode. An orthogonal instruction set uniquely encodes all combinations of registers and addressing modes.

Orthogonality is a system design property which enables the making of complex designs feasible and compact. The aim of an orthogonal design is to guarantee that operations within one of its components neither create nor propagate side-effects to other components. For example a car has orthogonal components and controls, e.g. accelerating the vehicle does not influence anything else but the components involved in the acceleration. On the other hand, a car with non-orthogonal design might have, for example, the acceleration influencing the radio tuning or the display of time. Consequently, this usage is seen to be derived from the use of orthogonal in mathematics; one may project a vector onto a subspace by projecting it onto each member of a set of basis vectors separately and adding the projections if and only if the basis vectors are mutually orthogonal.

Orthogonality guarantees that modifying the technical effect produced by a component of a system neither creates nor propagates side effects to other components of the system. The emergent behaviour of a system consisting of components should be controlled strictly by formal definitions of its logic and not by side effects resulting from poor integration, i.e. non-orthogonal design of modules and interfaces. Orthogonality reduces the test and development time, because it's easier to verify designs that neither cause side effects nor depend on them.