Ich hatte den Eindruck, dass mittlerweile alle zustimmen, dass diese Maxime ein Fehler war. Aber ich habe kürzlich diese Antwort gesehen, bei der ein Kommentar mit der Überschrift "Sei nachsichtig" 137-mal angehoben wurde (Stand heute).
Meiner Meinung nach war die Milde gegenüber dem, was die Browser akzeptieren, die direkte Ursache für das völlige Durcheinander, das HTML und einige andere Webstandards vor ein paar Jahren angerichtet haben und das sich erst vor kurzem ordnungsgemäß aus diesem Durcheinander herauskristallisiert hat. Die Art und Weise, wie ich es sehe, wird dazu führen , dass Sie nachsichtig mit dem umgehen, was Sie akzeptieren .
Der zweite Teil der Maxime lautet "Fehlerhafte Eingaben stillschweigend verwerfen, ohne eine Fehlermeldung zurückzugeben, sofern dies nicht in der Spezifikation vorgeschrieben ist" , und dies fühlt sich grenzwertig an. Jeder Programmierer, der seinen Kopf an die Wand gestoßen hat, wenn etwas stillschweigend versagt, weiß, was ich meine.
Also, liege ich da völlig falsch? Sollte mein Programm nachsichtig sein, was es akzeptiert und Fehler stillschweigend verschluckt? Oder interpretiere ich falsch, was das bedeuten soll?
Die ursprüngliche Frage lautete "Programm", und ich gehe davon aus, dass dies jedermanns Sache ist. Es kann sinnvoll sein, Programme nachsichtig zu gestalten. Was ich jedoch wirklich gemeint habe, sind APIs: Schnittstellen, die anderen Programmen und nicht Menschen ausgesetzt sind . HTTP ist ein Beispiel. Das Protokoll ist eine Schnittstelle, die nur andere Programme verwenden. Die Daten, die in Überschriften wie "If-Modified-Since" stehen, werden nie direkt angegeben.
Die Frage ist also: Sollte der Server, der einen Standard implementiert, nachsichtig sein und Daten in mehreren anderen Formaten zulassen, zusätzlich zu dem, der vom Standard tatsächlich benötigt wird? Ich bin der Meinung, dass "Nachsicht" eher für diese Situation gelten soll als für menschliche Schnittstellen.
Wenn der Server nachsichtig ist, scheint dies eine allgemeine Verbesserung zu sein, aber in der Praxis führt dies meiner Meinung nach nur dazu, dass Clientimplementierungen auf die Nachsicht angewiesen sind und daher nicht mit einem anderen Server zusammenarbeiten, der auf etwas andere Weise nachsichtig ist.
Sollte ein Server, der eine API zur Verfügung stellt, nachsichtig sein oder ist das eine sehr schlechte Idee?
Nun zum schonenden Umgang mit Benutzereingaben. Betrachten Sie YouTrack (eine Bug-Tracking-Software). Es wird eine Sprache für die Texteingabe verwendet, die an Markdown erinnert. Nur dass es "nachsichtig" ist. Zum Beispiel schreiben
- foo
- bar
- baz
ist keine dokumentierte Methode zum Erstellen einer Liste mit Aufzählungszeichen, und dennoch hat es funktioniert. Folglich wurde es in unserem internen Bugtracker häufig verwendet. Die nächste Version kommt heraus und diese milde Funktion beginnt etwas anders zu funktionieren, was eine Reihe von Listen zerstört, die diese (Nicht-) Funktion (falsch) verwendet haben. Die dokumentierte Möglichkeit, Listen mit Aufzählungszeichen zu erstellen, funktioniert natürlich weiterhin.
Sollte meine Software in Bezug auf die Benutzereingaben, die sie akzeptiert , nachsichtig sein ?