リチャードガブリエルの有名なエッセイThe Rise of Worse is Betterは、MIT / Stanford(Lisp)とNew Jersey(C / Unix)デザインの似顔絵バージョンを、シンプルさ、正確さ、一貫性、完全性の軸に沿って比較しています。彼は、「PC敗者問題」(Josh Habermanが別の場所で議論した)の例を挙げて、Unixがインターフェースの単純さよりも実装の単純さを優先していると主張します。
私が思いついたもう1つの例は、数値へのさまざまなアプローチです。Lispは任意の大きな数値(メモリのサイズまで)を表現できますが、Cは数値を固定ビット数(通常は32〜64)に制限します。これは正しさの軸を示していると思います。
一貫性と完全性の例は何ですか?ガブリエルのすべての説明は次のとおりです(彼は似顔絵だと認めています)。
MIT /スタンフォードのアプローチ
- シンプルさ-設計は、実装とインターフェースの両方においてシンプルでなければなりません。インターフェイスは実装よりも単純であることが重要です。
- 正確性-設計は、観察可能なすべての側面において正しいものでなければなりません。不正確さは単に許可されません。
- 一貫性-設計は一貫していてはいけません。一貫性を保つために、デザインの単純さや完成度を少し下げることができます。一貫性は正確さと同じくらい重要です。
- 完全性-設計は、実用的な限り多くの重要な状況をカバーする必要があります。合理的に予想されるすべてのケースをカバーする必要があります。シンプルさは、完全性を過度に低下させることは許されません。
ニュージャージーのアプローチ
- シンプルさ-設計は実装とインターフェースの両方でシンプルでなければなりません。実装がインターフェースよりも単純であることがより重要です。シンプルさは、設計において最も重要な考慮事項です。
- 正確性-設計は、観察可能なすべての側面において正しいものでなければなりません。正しいよりも単純である方がわずかに優れています。
- 一貫性-設計が過度に一貫していてはなりません。場合によっては一貫性を犠牲にして単純化することもできますが、実装の複雑さや不整合を導入するよりも、あまり一般的ではない状況に対処する設計の部分を削除する方が適切です。
- 完全性-設計は、実用的な限り多くの重要な状況をカバーする必要があります。合理的に予想されるすべてのケースをカバーする必要があります。他の品質を優先して、完全性を犠牲にすることができます。実際、実装の単純さが危険にさらされるたびに、完全性が犠牲になります。シンプルさを維持する場合、完全性を達成するために一貫性を犠牲にすることができます。特に価値がないのは、インターフェースの一貫性です。
Gabrielが正しいかどうかを尋ねているのではないことに注意してください(これはStackExchangeには不適切な質問です)。