Fiquei com a impressão de que agora todos concordam que essa máxima foi um erro. Mas eu vi recentemente essa resposta, que tem um comentário "seja branda", votada 137 vezes (até hoje).
Na minha opinião, a clemência no que os navegadores aceitam foi a causa direta da bagunça total que o HTML e alguns outros padrões da web eram há alguns anos atrás, e só recentemente começaram a se cristalizar adequadamente dessa bagunça. A forma como eu vejo, sendo branda no que você aceitar irá levar a isso.
A segunda parte da máxima é "descartar entrada defeituosa silenciosamente, sem retornar uma mensagem de erro, a menos que isso seja exigido pela especificação" , e isso parecerá ofensivo. Qualquer programador que bater a cabeça na parede quando algo falhar silenciosamente saberá o que quero dizer.
Então, eu estou completamente errado sobre isso? Meu programa deve ser tolerante com o que aceita e engolir erros silenciosamente? Ou estou interpretando mal o que isso significa?
A pergunta original dizia "programa", e eu entendo a opinião de todos sobre isso. Pode fazer sentido que os programas sejam brandos. O que eu realmente quis dizer, no entanto, são APIs: interfaces expostas a outros programas , e não a pessoas. HTTP é um exemplo. O protocolo é uma interface que somente outros programas usam. As pessoas nunca fornecem diretamente as datas que entram nos cabeçalhos como "If-Modified-Since".
Portanto, a pergunta é: o servidor que implementa um padrão deve ser branda e permitir datas em vários outros formatos, além do que é realmente exigido pelo padrão? Eu acredito que o "ser tolerante" deve se aplicar a essa situação, ao invés de interfaces humanas.
Se o servidor for indulgente, pode parecer uma melhoria geral, mas acho que na prática só leva a implementações de clientes que acabam confiando na indulgência e, portanto, deixam de trabalhar com outro servidor indiferente de maneiras ligeiramente diferentes.
Portanto, um servidor que expõe alguma API é branda ou é uma péssima ideia?
Agora, no tratamento branda da entrada do usuário. Considere o YouTrack (um software de rastreamento de bugs). Ele usa um idioma para entrada de texto que lembra o Markdown. Exceto que é "branda". Por exemplo, escrevendo
- foo
- bar
- baz
não é uma maneira documentada de criar uma lista com marcadores e, no entanto, funcionou. Consequentemente, acabou sendo muito utilizado em todo o nosso bugtracker interno. A próxima versão é lançada e esse recurso branda começa a funcionar de maneira um pouco diferente, quebrando várias listas que (mis) usavam esse (não) recurso. A maneira documentada de criar listas com marcadores ainda funciona, é claro.
Portanto, meu software deve ser indulgente em quais entradas de usuário ele aceita?