Дізнаймося, як якнайкраще висловлювати свої ідеї та пропозиції
Привіт 👋 Хтось надіслав посилання на цю статтю у відповідь на пропозицію, як можна покращити Exercism? Перш ніж наша команда витратить час на вивчення цієї ідеї, є сподівання, що варто прочитати цю статтю й подумати, чи не спадала така думка комусь раніше і які пастки вона може містити. Якщо додати ці міркування й можливі пастки до пропозиції та подумати, чому цю ідею досі не втілили, відповідь, найпевніше, надійде швидше й буде прихильнішою.
Ідею паркана Честертона навіяла цитата з книжки письменника Г. К. Честертона The Thing, що вийшла 1929 року. Вона набула широкої відомості завдяки тому, що її процитував Джон Ф. Кеннеді. Ось оригінальна цитата:
У такому разі існує певна інституція або закон; скажімо, для простоти, паркан або брама, зведені поперек дороги. Сучасніший тип реформатора весело підходить до них і каже: «Не бачу в цьому жодного сенсу; нумо його знести». На що розумніший тип реформатора добре зробить, якщо відповість: «Якщо хтось не бачить у цьому сенсу, то я тим паче не дозволю його знести. Хай іде й подумає. А коли повернеться й скаже мені, що таки бачить у цьому сенс, я, можливо, дозволю його зруйнувати».
Ідея паркана Честертона полягає в тому, що коли ми не розуміємо, чому щось тут стоїть, то, ймовірно, не розуміємо й того, чому це варто прибрати. Так само, якщо ми не розуміємо, чому чогось немає, то, ймовірно, не розуміємо й того, чому це свідомо залишили поза увагою.
Запамʼятаймо просте правило: «Не знось паркан, доки не знаєш, навіщо його взагалі поставили».
У Exercism нам пощастило: до нашої спільноти постійно долучається безліч людей, які діляться своїми думками та ідеями. Багато з цих ідей нові, інноваційні, захопливі й розширюють наше мислення. Тож якщо є ідея чи пропозиція, ми її вітаємо!
Однак частіше люди пропонують ідеї, які вже обговорювали багато разів. Відповідати на такі ідеї, знову пояснювати й обґрунтовувати свої рішення може вкрай виснажувати нашу команду. Ця стаття покликана допомогти зберегти цей час і сили.
Exercism спроєктували, розробили й побудували тисячі дуже талановитих людей. Це продукт, у якому все зроблено навмисно: щось присутнє тому, що його задумали присутнім, а щось часто відсутнє тому, що його задумали відсутнім. Майже все в Exercism обговорювали, дискутували й переробляли багато разів.
Тож перш ніж опублікувати ідею, спитайте себе: можливо, ми вже її розглядали? І чому ми зробили щось інакше, ніж пропонується? І памʼятайте: чим очевиднішою здається ідея, тим імовірніше, що її вже обговорювали й дискутували багато разів. Тож коли її представляєте, одразу додавайте можливі застереження й пастки. Якщо виникає спокуса сказати «чому б не просто ...», то це майже напевно саме такий випадок.
Ніколи не бійтеся публікувати свої ідеї, але спершу, будь ласка, добре все обміркуйте!
Часто дратує те, що учні надсилають наставникам код, який не проходить тести. Не менш поширена пропозиція: «А чому б просто не запускати тести в CLI автоматично перед надсиланням коду?» Здається, це чудова ідея: CLI просто викликає команду, яка запускає тести, і не дає учневі надіслати код, якщо тести не проходять.
Тож, по-перше, що означає «просто викликати команду для запуску тестів»? Це означає написати скрипт для кожної з 52 мов на Exercism, який уміє запускати тести й перевіряти результат. Це чимало роботи, але цілком здійсненно.
Але це також означає написати цей скрипт так, щоб він працював на Windows, MacOSX і Linux, у всіх можливих версіях і конфігураціях. А це дуже багато роботи (якщо не безмежно багато).
«А чому це має працювати в кожній конфігурації?» — можна запитати.
Тому що інакше ми фактично блокуємо людині доступ до Exercism, якщо вона не може запустити цей скрипт.
А це також означає, що він не має права давати збої.
Якщо скрипт із якоїсь причини не запуститься, учень опиниться повністю заблокованим.
Помилка в одному з тих 52*3*n скриптів означає, що учень більше не зможе користуватися цим треком у цій ОС.
Як це тестувати?
Ніяк.
Але ж, скажете, можна просто додати прапорець --skip-tests.
Це слушна пропозиція, але вона повертає нас до того, з чого ми почали: люди можуть обходити тести коли завгодно.
Але тепер ми опиняємося в ситуації, коли код із неуспішними тестами надсилають трохи рідше, тож наставники менше цього очікують, і коли тести таки не проходять, це бентежить і збиває з пантелику дужче.
«Але ж загалом люди так не робитимуть», — можна заперечити. Правда, для деяких мов, де запуск тестів займає 0,5 с. Але для мов, де запуск тестів займає 20 с, чекати додаткові 20 с перед надсиланням неймовірно дратує учнів, тож пропускання фінальних тестів стало б звичною справою.
Хоч би чим закінчилася ця розмова, очевидно, що тут набагато більше складності, ніж здається на перший погляд. Варто врахувати технічні виклики, обміркувати проблеми з робочими процесами й усвідомити, що треки настільки різні, що те, що для одного швидко й легко, для іншого болісно.
Тож замість пропозиції «чому б не запускати тести перед надсиланням» поставмо запитання: «Чому люди публікують рішення, які не проходять тести?» І ось тут стає цікаво. Загальна відповідь: бо вони застрягли або заплуталися. І їм потрібна допомога. А отже, надсилання коду з неуспішними тестами - дуже важливий сигнал для наставників, що цьому учневі потрібна допомога. Так, це дратує, бо наставники не одразу знають, «правильний» код чи ні. Однак вони можуть завантажити код і запустити його, щоб перевірити (більшість наставників так і робить із нетривіальними рішеннями), і тоді знатимуть зі 100% певністю, правильний він чи ні. А учні, які застрягли й потребують допомоги, не застрягають іще більше, а потрапляють до наставника, який швидше побачить і підкаже виправлення.
Примітка: насправді ми розвʼязуємо це, запускаючи тести на сервері. Це велика й дорога справа, але вона варта зусиль задля кращого досвіду учнів і, що важливо, економії часу та сил наших наставників.
Три речі: