У мене було враження, що до цього часу всі згодні, що ця сентенція була помилкою. Але я нещодавно побачив цю відповідь, яка викликала коментар "бути поблажливим" 137 разів (станом на сьогодні).
На мою думку, поблажливість того, що браузери приймають, була прямою причиною повного безладу, що HTML та деякі інші веб-стандарти були кілька років тому, і лише нещодавно почали належним чином викристалізовуватися з цього безладу. Те, як я це бачу, бути поблажливим у тому, що ви приймаєте , призведе до цього.
Друга частина максиму - "мовчки відкинути несправне введення, не повертаючи повідомлення про помилку, якщо цього не вимагає специфікація" , і це відчуває образливі межі. Будь-який програміст, який ударив головою об стіну, коли щось мовчки не вдається, буде знати, що я маю на увазі.
Отже, я цілком помиляюся з цього приводу? Чи повинна моя програма бути поблажливішою у тому, що вона приймає та мовчить помилки? Або я неправильно трактую, що це повинно означати?
У первинному запитанні було сказано "програма", і я вважаю, що з цього приводу всі. Програми можуть мати сенс поблажливішими. Що я насправді мав на увазі, це API: інтерфейси, піддані іншим програмам , а не людям. HTTP - приклад. Протокол - це інтерфейс, який використовують лише інші програми. Люди ніколи безпосередньо не вказують дати, які переходять у заголовки типу "If-Modified-Since".
Отже, питання: чи повинен сервер, що реалізує стандарт, бути поблажливішим та допускати дати в декількох інших форматах, крім того, який фактично вимагає стандарт? Я вважаю, що "бути поблажливішим" має стосуватися цієї ситуації, а не людських інтерфейсів.
Якщо сервер поблажливий, це може здатися загальним поліпшенням, але я думаю, що на практиці це призводить лише до впровадження клієнтів, які в кінцевому підсумку покладаються на поблажливість і, таким чином, не в змозі працювати з іншим сервером, який поблажливий дещо іншими способами.
Отже, чи повинен сервер, що відкриває якийсь API, поблажливіший чи це дуже погана ідея?
Тепер поблажливіше керувати введеннями користувачів. Розглянемо YouTrack (програмне забезпечення для відстеження помилок). Він використовує мову для введення тексту, що нагадує Markdown. За винятком того, що це "поблажливіше". Наприклад, писати
- foo
- bar
- baz
це НЕ документований спосіб створення маркованого списку, і все це працювало. Отже, це в кінцевому підсумку багато використовувалося в усьому нашому внутрішньому винищувачі. Виходить наступна версія, і ця поблажлива функція починає працювати трохи інакше, порушуючи купу списків, які (помилково) використовували цю (не) функцію. Зрозуміло, документально підтверджений спосіб створення списків з маркованими списками все ще працює.
Отже, чи повинно моє програмне забезпечення бути поблажливішим щодо того, які входи користувача він приймає?