Wikipedia definisce l'ortogonalità del software come :
orthogonality in a programming language means that a relatively small set of primitive constructs can be combined in a relatively small number of ways to build the control and data structures of the language. The term is most-frequently used regarding assembly instruction sets, as orthogonal instruction set.
Jason Coffin ha definito l'ortogonalità del software come
Highly cohesive components that are loosely coupled to each other produce an orthogonal system.
C.Ross ha definito ortogonalità del software come:
the property that means "Changing A does not change B". An example of an orthogonal system would be a radio, where changing the station does not change the volume and vice-versa.
Ora c'è una ipotesi pubblicata nella coda ACM di Tim Bray - che alcuni hanno chiamato il Bánffy Bray Type System Criteria - che riassume come:
- Static typings attractiveness is a direct function (and dynamic typings an inverse function) of API surface size.
- Dynamic typings attractiveness is a direct function (and static typings an inverse function) of unit testing workability.
Ora Stuart Halloway ha riformulato Banfy Bray come:
the more your APIs exceed orthogonality, the better you will like static typing
La mia domanda è: Qual è la prova che un'API ha superato la sua ortogonalità nel contesto dei tipi?
Chiarimento Tim Bray introduce l'idea di ortogonalità e API. Dove hai una API e si occupa principalmente di stringhe (ovvero un server web che serve richieste e risposte), allora un linguaggio uni-tipizzato (python, ruby) è 'allineato' a quella API - perché il sistema di tipi di queste lingue non è sofisticato, ma non importa poiché hai a che fare con le stringhe comunque.
Quindi passa alla programmazione Android, che ha un sacco di API dei sensori, che sono tutte "diverse" rispetto all'API del server Web su cui stava lavorando in precedenza. Poiché non si tratta solo di stringhe, ma di tipi diversi, l'API non è ortogonale.
Il punto di Tim è che esiste una relazione empirica tra il tuo "gradimento" di tipi e l'API con cui stai programmando. (cioè un punto soggettivo è in realtà oggettivo a seconda del contesto).