In Richard Gabriels berühmtem Aufsatz The Rise of Worse is Better stellt er karikaturisierte Versionen der Designphilosophien MIT / Stanford (Lisp) und New Jersey (C / Unix) in Bezug auf Einfachheit, Korrektheit, Konsistenz und Vollständigkeit gegenüber. Er führt das Beispiel des "PC-Verlierer-Problems" an ( das an anderer Stelle von Josh Haberman erörtert wurde ), um zu argumentieren, dass Unix der Einfachheit der Implementierung Vorrang vor der Einfachheit der Schnittstelle einräumt.
Ein anderes Beispiel, das ich mir ausgedacht habe, sind die unterschiedlichen Herangehensweisen an Zahlen. Lisp kann beliebig große Zahlen darstellen (bis zur Größe des Speichers), während C Zahlen auf eine feste Anzahl von Bits begrenzt (normalerweise 32-64). Ich denke, das zeigt die Richtigkeitsachse.
Was sind einige Beispiele für Konsistenz und Vollständigkeit? Hier sind alle Beschreibungen von Gabriel (die er zugibt, dass es sich um Karikaturen handelt):
Der MIT / Stanford-Ansatz
- Einfachheit - Das Design muss sowohl in der Implementierung als auch in der Benutzeroberfläche einfach sein. Es ist wichtiger, dass die Schnittstelle einfach ist als die Implementierung.
- Korrektheit - Das Design muss in allen beobachtbaren Aspekten korrekt sein. Falschheit ist einfach nicht erlaubt.
- Konsistenz - Das Design darf nicht inkonsistent sein. Ein Design darf etwas weniger einfach und weniger vollständig sein, um Inkonsistenzen zu vermeiden. Konsistenz ist ebenso wichtig wie Korrektheit.
- Vollständigkeit - das Design muss so viele wichtige Situationen abdecken, wie es praktisch ist. Alle vernünftigerweise erwarteten Fälle müssen abgedeckt werden. Einfachheit darf die Vollständigkeit nicht übermäßig beeinträchtigen.
Der New Jersey-Ansatz
- Einfachheit - Das Design muss sowohl in der Implementierung als auch in der Benutzeroberfläche einfach sein. Es ist wichtiger, dass die Implementierung einfach ist als die Schnittstelle. Einfachheit ist die wichtigste Überlegung in einem Design.
- Korrektheit - Das Design muss in allen beobachtbaren Aspekten korrekt sein. Es ist etwas besser, einfach als richtig zu sein.
- Konsistenz - Das Design darf nicht zu inkonsistent sein. In einigen Fällen kann die Konsistenz der Einfachheit halber geopfert werden. Es ist jedoch besser, diejenigen Teile des Designs zu löschen, die mit weniger häufigen Umständen zu tun haben, als entweder Komplexität der Implementierung oder Inkonsistenz einzuführen.
- Vollständigkeit - das Design muss so viele wichtige Situationen abdecken, wie es praktisch ist. Alle vernünftigerweise erwarteten Fälle sollten abgedeckt werden. Die Vollständigkeit kann zugunsten einer anderen Qualität geopfert werden. Tatsächlich muss die Vollständigkeit geopfert werden, wenn die Einfachheit der Implementierung gefährdet wird. Konsistenz kann geopfert werden, um Vollständigkeit zu erreichen, wenn die Einfachheit beibehalten wird; Besonders wertlos ist die Konsistenz der Schnittstelle.
Bitte beachte, dass ich nicht frage, ob Gabriel Recht hat (eine Frage, die für StackExchange nicht geeignet ist), sondern nach Beispielen, auf die er sich möglicherweise bezogen hat.