Паркан Честертона

Дізнаймося, як якнайкраще висловлювати свої ідеї та пропозиції


Привіт 👋 Хтось надіслав посилання на цю статтю у відповідь на пропозицію, як можна покращити Exercism? Перш ніж наша команда витратить час на вивчення цієї ідеї, є сподівання, що варто прочитати цю статтю й подумати, чи не спадала така думка комусь раніше і які пастки вона може містити. Якщо додати ці міркування й можливі пастки до пропозиції та подумати, чому цю ідею досі не втілили, відповідь, найпевніше, надійде швидше й буде прихильнішою.


То що означає «паркан Честертона»?

Ідею паркана Честертона навіяла цитата з книжки письменника Г. К. Честертона The Thing, що вийшла 1929 року. Вона набула широкої відомості завдяки тому, що її процитував Джон Ф. Кеннеді. Ось оригінальна цитата:

У такому разі існує певна інституція або закон; скажімо, для простоти, паркан або брама, зведені поперек дороги. Сучасніший тип реформатора весело підходить до них і каже: «Не бачу в цьому жодного сенсу; нумо його знести». На що розумніший тип реформатора добре зробить, якщо відповість: «Якщо хтось не бачить у цьому сенсу, то я тим паче не дозволю його знести. Хай іде й подумає. А коли повернеться й скаже мені, що таки бачить у цьому сенс, я, можливо, дозволю його зруйнувати».

Ідея паркана Честертона полягає в тому, що коли ми не розуміємо, чому щось тут стоїть, то, ймовірно, не розуміємо й того, чому це варто прибрати. Так само, якщо ми не розуміємо, чому чогось немає, то, ймовірно, не розуміємо й того, чому це свідомо залишили поза увагою.

Запамʼятаймо просте правило: «Не знось паркан, доки не знаєш, навіщо його взагалі поставили».

Як ця ідея стосується Exercism?

У Exercism нам пощастило: до нашої спільноти постійно долучається безліч людей, які діляться своїми думками та ідеями. Багато з цих ідей нові, інноваційні, захопливі й розширюють наше мислення. Тож якщо є ідея чи пропозиція, ми її вітаємо!

Однак частіше люди пропонують ідеї, які вже обговорювали багато разів. Відповідати на такі ідеї, знову пояснювати й обґрунтовувати свої рішення може вкрай виснажувати нашу команду. Ця стаття покликана допомогти зберегти цей час і сили.

Exercism спроєктували, розробили й побудували тисячі дуже талановитих людей. Це продукт, у якому все зроблено навмисно: щось присутнє тому, що його задумали присутнім, а щось часто відсутнє тому, що його задумали відсутнім. Майже все в Exercism обговорювали, дискутували й переробляли багато разів.

Тож перш ніж опублікувати ідею, спитайте себе: можливо, ми вже її розглядали? І чому ми зробили щось інакше, ніж пропонується? І памʼятайте: чим очевиднішою здається ідея, тим імовірніше, що її вже обговорювали й дискутували багато разів. Тож коли її представляєте, одразу додавайте можливі застереження й пастки. Якщо виникає спокуса сказати «чому б не просто ...», то це майже напевно саме такий випадок.

Ніколи не бійтеся публікувати свої ідеї, але спершу, будь ласка, добре все обміркуйте!

А чи є приклад?

Часто дратує те, що учні надсилають наставникам код, який не проходить тести. Не менш поширена пропозиція: «А чому б просто не запускати тести в CLI автоматично перед надсиланням коду?» Здається, це чудова ідея: CLI просто викликає команду, яка запускає тести, і не дає учневі надіслати код, якщо тести не проходять.

Тож, по-перше, що означає «просто викликати команду для запуску тестів»? Це означає написати скрипт для кожної з 52 мов на Exercism, який уміє запускати тести й перевіряти результат. Це чимало роботи, але цілком здійсненно.

Але це також означає написати цей скрипт так, щоб він працював на Windows, MacOSX і Linux, у всіх можливих версіях і конфігураціях. А це дуже багато роботи (якщо не безмежно багато). «А чому це має працювати в кожній конфігурації?» — можна запитати. Тому що інакше ми фактично блокуємо людині доступ до Exercism, якщо вона не може запустити цей скрипт. А це також означає, що він не має права давати збої. Якщо скрипт із якоїсь причини не запуститься, учень опиниться повністю заблокованим. Помилка в одному з тих 52*3*n скриптів означає, що учень більше не зможе користуватися цим треком у цій ОС. Як це тестувати? Ніяк.

Але ж, скажете, можна просто додати прапорець --skip-tests. Це слушна пропозиція, але вона повертає нас до того, з чого ми почали: люди можуть обходити тести коли завгодно. Але тепер ми опиняємося в ситуації, коли код із неуспішними тестами надсилають трохи рідше, тож наставники менше цього очікують, і коли тести таки не проходять, це бентежить і збиває з пантелику дужче.

«Але ж загалом люди так не робитимуть», — можна заперечити. Правда, для деяких мов, де запуск тестів займає 0,5 с. Але для мов, де запуск тестів займає 20 с, чекати додаткові 20 с перед надсиланням неймовірно дратує учнів, тож пропускання фінальних тестів стало б звичною справою.

Хоч би чим закінчилася ця розмова, очевидно, що тут набагато більше складності, ніж здається на перший погляд. Варто врахувати технічні виклики, обміркувати проблеми з робочими процесами й усвідомити, що треки настільки різні, що те, що для одного швидко й легко, для іншого болісно.

Тож замість пропозиції «чому б не запускати тести перед надсиланням» поставмо запитання: «Чому люди публікують рішення, які не проходять тести?» І ось тут стає цікаво. Загальна відповідь: бо вони застрягли або заплуталися. І їм потрібна допомога. А отже, надсилання коду з неуспішними тестами - дуже важливий сигнал для наставників, що цьому учневі потрібна допомога. Так, це дратує, бо наставники не одразу знають, «правильний» код чи ні. Однак вони можуть завантажити код і запустити його, щоб перевірити (більшість наставників так і робить із нетривіальними рішеннями), і тоді знатимуть зі 100% певністю, правильний він чи ні. А учні, які застрягли й потребують допомоги, не застрягають іще більше, а потрапляють до наставника, який швидше побачить і підкаже виправлення.

Примітка: насправді ми розвʼязуємо це, запускаючи тести на сервері. Це велика й дорога справа, але вона варта зусиль задля кращого досвіду учнів і, що важливо, економії часу та сил наших наставників.

Щось іще?

Три речі:

  1. Цю статтю із Second Order Thinking варто прочитати. Цитата «Не знось паркан, доки не знаєш, навіщо його взагалі поставили» саме з цього допису.
  2. Книжку Г. К. Честертона, The Thing, можна знайти тут: https://archive.org/details/G.K.ChestertonTheThing.
  3. Ідея справді може бути новою й чудовою. Не бійтеся й не соромтеся її запропонувати!