Avevo l'impressione che ormai tutti concordassero che questa massima era un errore. Ma di recente ho visto questa risposta che ha un commento "essere indulgente" di 137 volte in più (ad oggi).
Secondo me, la clemenza in ciò che i browser accettano è stata la causa diretta del disordine totale che l'HTML e alcuni altri standard web erano di qualche anno fa, e solo recentemente ha iniziato a cristallizzarsi correttamente da quel pasticcio. Il modo in cui lo vedo, essere indulgente in ciò che accetti porterà a questo.
La seconda parte della massima è "scartare input errato in modo silenzioso, senza restituire un messaggio di errore a meno che ciò non sia richiesto dalla specifica" , e questo sembra offensivo borderline. Qualsiasi programmatore che ha sbattuto la testa contro il muro quando qualcosa fallisce silenziosamente saprà cosa intendo.
Quindi, ho completamente torto su questo? Il mio programma dovrebbe essere clemente in ciò che accetta e ingoiare silenziosamente gli errori? O sto interpretando male ciò che questo dovrebbe significare?
La domanda originale diceva "programma" e prendo spunto da tutti su questo punto. Può essere sensato che i programmi siano clementi. Ciò che intendevo veramente, tuttavia, sono le API: interfacce esposte a altri programmi , piuttosto che persone. HTTP è un esempio. Il protocollo è un'interfaccia utilizzata solo da altri programmi. Le persone non forniscono mai direttamente le date che vanno in intestazioni come "If-Modified-Since".
Quindi, la domanda è: il server che implementa uno standard dovrebbe essere clemente e consentire date in diversi altri formati, oltre a quello effettivamente richiesto dallo standard? Credo che il "essere indulgente" dovrebbe applicarsi a questa situazione, piuttosto che alle interfacce umane.
Se il server è clemente, potrebbe sembrare un miglioramento generale, ma penso che in pratica porti solo a implementazioni client che finiscono per affidarsi alla clemenza e quindi a non funzionare con un altro server questo è clemente in modi leggermente diversi.
Quindi, un server che espone alcune API dovrebbe essere clemente o è una pessima idea?
Ora sulla gestione indulgente dell'input dell'utente. Considera YouTrack (un software di tracciamento dei bug). Usa una lingua per l'immissione di testo che ricorda Markdown. Tranne che è "indulgente". Ad esempio, scrivendo
- foo
- bar
- baz
è non un modo documentato di creare un elenco puntato, eppure ha funzionato. Di conseguenza, è finito per essere usato molto durante il nostro bugtracker interno. La versione successiva viene fuori, e questa caratteristica clemente inizia a funzionare in modo leggermente diverso, rompendo un sacco di liste che (male) hanno usato questa (non) funzionalità. Il modo documentato per creare elenchi puntati funziona ancora, naturalmente.
Quindi, il mio software dovrebbe essere clemente in ciò che input utente accetta?