Avevo l'impressione che ormai tutti fossero d'accordo che questa massima fosse un errore. Ma recentemente ho visto questa risposta che ha un commento "be lenient" votato 137 volte (ad oggi).
A mio avviso, la clemenza in ciò che i browser accettano è stata la causa diretta del caos totale che HTML e alcuni altri standard web erano alcuni anni fa, e solo recentemente hanno iniziato a cristallizzare correttamente da quel casino. Il mio modo di vedere, di essere indulgente in ciò che accetti sarà portare a questo.
La seconda parte della massima è "elimina in modo silenzioso l'input difettoso, senza restituire un messaggio di errore, a meno che ciò non sia richiesto dalla specifica" , e questo sembra offensivo al limite. Qualsiasi programmatore che ha sbattuto la testa contro il muro quando qualcosa fallisce silenziosamente saprà cosa intendo.
Quindi, mi sbaglio completamente su questo? Il mio programma dovrebbe essere indulgente in ciò che accetta e ingoiare gli errori in silenzio? O sto interpretando male cosa dovrebbe significare?
La domanda originale diceva "programma", e prendo il punto di tutti su questo. Può avere senso che i programmi siano indulgenti. Ciò che intendevo veramente, tuttavia, sono le API: interfacce esposte ad altri programmi , piuttosto che alle persone. HTTP è un esempio. Il protocollo è un'interfaccia utilizzata solo da altri programmi. Le persone non forniscono mai direttamente le date che vanno nelle intestazioni come "If-Modified-Since".
Quindi, la domanda è: il server che implementa uno standard dovrebbe essere indulgente e consentire date in diversi altri formati, oltre a quello che è effettivamente richiesto dallo standard? Credo che si supponga che "essere indulgenti" si applichi a questa situazione, piuttosto che alle interfacce umane.
Se il server è clemente, potrebbe sembrare un miglioramento complessivo, ma penso che in pratica conduca solo a implementazioni client che finiscono per dipendere dalla clemenza e quindi non riescono a lavorare con un altro server clemente in modi leggermente diversi.
Quindi, un server che espone alcune API dovrebbe essere indulgente o è una pessima idea?
Ora su gestione indulgente dell'input dell'utente. Prendi in considerazione YouTrack (un software di tracciamento dei bug). Utilizza una lingua per l'immissione di testo che ricorda Markdown. Solo che è "indulgente". Ad esempio, scrivendo
- foo
- bar
- baz
non è un modo documentato per creare un elenco puntato, eppure ha funzionato. Di conseguenza, è stato utilizzato molto durante il nostro bugtracker interno. La prossima versione viene fuori e questa caratteristica indulgente inizia a funzionare in modo leggermente diverso, rompendo un mucchio di elenchi che (mis) hanno usato questa funzione (non). Il modo documentato per creare elenchi puntati funziona ancora, ovviamente.
Quindi, il mio software dovrebbe essere indulgente in quali input utente accetta?