Чому дядько Боб пропонує, щоб стандарти кодування не були записані, якщо ви можете цього уникнути?
Якщо ви запитуєте причини його думки, то, можливо, у вас є відповідь, лише якщо він опублікує відповідь тут ( наша думка просто не має значення), однак ...
Чому я не повинен записати стандарт кодування?
Якщо ви запитуєте, чи прав він він у цьому?: Дозвольте мені єдиним непопулярним (поки що) сказати, що у вас немає підстав уникати цього.
ЗАПИСЬТЕ ВНИЗ . Однак я спробую пояснити свої причини ...
Девід запропонував у коментарі, що головний пункт відповіді Стівена полягає не в тому, чому ви не повинні писати документи, а в якій формі вони є. Якщо настанови формалізовані в інструментах (а не лише вручну перегляд коду), я можу погодитись (коли закон не вимагає чогось іншого). Зауважте, що, на жаль, інструменти не можуть перевірити все (теорія обчислень не є нашим другом) часто, оскільки вони обмежені певним перекладом або пакетом або будь-якою вашою улюбленою мовою називають кордоном .
Однак формулювання дядька Боба не змушує мене думати, що він про це говорить.
Чи можна погодитися з таким старшим експертом? Я майже для кожного пункту цитованої публікації (подробиці див. Також у другій частині цієї відповіді). Давайте спробуємо розібратися, чому (якщо ви вже знаєте, що вказівки щодо кодування стосуються не лише незначних проблем форматування ).
- За деяких обставин письмові стандарти кодування вимагаються законодавством.
- Я читаю документацію і впевнений, що не один. Члени команди можуть змінюватися з часом, знання не можуть бути в кодовій базі 5-10 років або в думці членів команди. Організації повинні звільняти людей, які не дотримуються внутрішніх вказівок.
- Стандарти кодування після їх затвердження не змінюватимуться часто, і якщо вони хочуть знати про них. Якщо стандарти змінилися, то ваша документація (у коді) застаріла, оскільки весь ваш код не відповідає новому стандарту. Переформатування / рефакторинг може бути повільним, але ви завжди маєте письмове авторитетне керівництво, яке слід дотримуватися.
- Краще прочитати документ на 5 сторінок, ніж перевірити LOC 10 / 20K, щоб екстраполювати правило (яке ви можете зрозуміти неправильно, BTW), без сумніву в цьому.
- Іронічно, що хтось, хто написав багато книг про принципи дизайну та стиль кодування, припускає, що ви не повинні писати власні вказівки, чи не краще, якщо він кинув нас на приклади коду? Ні, тому що письмові вказівки не тільки говорять вам про те, що робити, але й ще дві речі, яких не вистачає коду: що не робити та причини робити це чи ні.
"Безкоштовне самоорганізуюче програмування" добре для ніндзя 16-річного хлопця, але організації мають інші вимоги :
- Якість коду має надаватися (і визначатися) на рівні компанії - це не те, про що може вирішити одна команда. Вони можуть навіть не мати навичок вирішувати, що краще (скільки розробників, наприклад, має всі необхідні навички, щоб переглянути MISRA або навіть просто зрозуміти кожне правило?)
- Учасників можна переміщувати в різних командах: якщо всі дотримуються одних і тих же стандартів кодування, то інтеграція плавна і менш схильна до помилок.
- Якщо команда самоорганізовується, то стандарти змінюватимуться з часом, коли члени команди змінюються - у вас з'явиться величезна база коду, яка не відповідає чинним прийнятим стандартам .
Якщо ви думаєте про людей перед процесом, то я можу запропонувати лише прочитати про TPS: люди є центральною частиною Lean, але процедури сильно формалізовані.
Звичайно, невелика організація, що має лише одну команду, може дозволити команді вирішити стандарти, які слід прийняти, але тоді вони повинні бути записані. Тут, на Programmers.SE, ви можете прочитати повідомлення Еріка Ліпперта: Мабуть, ми всі згодні, що він досвідчений розробник, коли він працював для Microsoft, він повинен був дотримуватися їхніх письмових рекомендацій (навіть якщо деякі правила можуть бути неправильними , не застосовуються чи марними йому.) Що з Джоном Скітом? Вказівки Google досить суворі (і багато людей не згодні з ними), але він повинен дотримуватися таких вказівок. Чи зневажливо ставиться до них? Ні, вони, ймовірно, працювали над визначенням та вдосконаленням таких керівних принципів. Компанію не створює один член (або одна команда), і кожна команда не є островом .
Приклади
- Ви вирішили не використовувати кілька класів успадкування та вкладених класів у C ++, оскільки фактичні члени команди не дуже добре розуміють це . Пізніше той, хто хоче скористатися кількома спадщинами, повинен переглядати весь LM LOC, щоб побачити, чи він коли-небудь використовувався. Це погано, оскільки якщо дизайнерські рішення не документально підтверджені, вам доведеться вивчити цілу базу коду, щоб їх зрозуміти. І навіть тоді, якщо він не використовувався, це тому, що він суперечить стандарту кодування, або це дозволено, але просто не було жодних раніше ситуацій, коли багатократне успадкування було добре підходить?
- У C # у вас були перевантажені методи надання параметрів за замовчуванням, оскільки база вашого коду запускалася, коли в C # не були доступні додаткові параметри. Потім ви змінилися, і ви почали їх використовувати (рефакторинг старого коду, щоб використовувати їх щоразу, коли вам доводилося змінювати такі функції). Ще пізніше ви вирішили, що необов'язкові параметри погані, і ви починаєте уникати їх використання. Яке правило підказує ваш код? Це погано, тому що стандарт еволюціонує, але кодова база розвивається повільніше, і якщо це ваша документація, значить, у вас виникають проблеми.
- Джон перейшов з команди А в команду Б. Джон повинен вивчити новий стандарт; під час навчання він, ймовірно, введе більш тонкі помилки (або, якщо пощастить, просто знадобиться багато часу, щоб зрозуміти існуючий код і зробити перегляд коду довше).
- Команда A переходить до кодової бази, яка раніше належала команді B. У неї є зовсім інші стандарти кодування. Переписати? Адаптувати? Змішати? Усі вони однаково погані.
Дядько Боб
Нехай вони розвиваються протягом перших кількох ітерацій.
Щоправда, поки у вас немає стандарту, і ваша організація не поставила вам завдання створити його.
Нехай вони будуть конкретними для команди, а не для компанії.
Ні, з усіх пояснених вище причин. Навіть якщо ви думаєте формалізувати просто форматування коду (найменш корисна річ, яку ви, можливо, хочете формалізувати), у мене все ще є пам'ять про нескінченні (і марні) війни щодо форматування. Я не хочу жити їм знову і знову, встановлюйте це раз на раз.
Не записуйте їх, якщо зможете цього уникнути. Швидше, нехай код буде таким, як приймаються стандарти.
Ні, з усіх пояснених вище причин (звичайно, якщо ви не будете переробляти весь код за один знімок, коли зміни керівних принципів) Ви хочете залишити свій код таким, який є? Як ви перевіряєте кодову базу, щоб зрозуміти поточні вказівки? Пошук за віком файлу та адаптація стилю кодування до віку вихідного файлу?
Не приймайте закон про хороший дизайн. (наприклад, не кажіть людям не користуватися goto)
Щоправда, вказівки повинні бути короткими, і ніхто їх не буде читати. Не повторюйте очевидного.
Переконайтесь, що всі знають, що стандарт стосується спілкування, і нічого іншого.
Не тільки, хороший стандарт - це якість, якщо ви не хочете мати стандарт лише про незначні деталі.
Після перших кількох ітерацій зберіть команду разом, щоб прийняти рішення.
Дивіться перший пункт і не забувайте, що стандарт кодування - це звичайно процес, який потребував багатьох років, щоб розробити і вдосконалити: мало ітерацій, можливо, з молодшими розробниками? Дійсно? Ви хочете покластися на пам'ять одного старшого (за наявності) члена?
Три ноти:
- На мою думку, недоліки в деяких мовах серйозніші, ніж інші, наприклад, у C ++ стандарт компанії на рівні компанії навіть потрібніший, ніж у Java.
- Це міркування може не застосовуватися повністю (а причини дядька Боба можуть бути менш крайніми ), якщо ви працюєте в дуже невеликій компанії, де у вас є лише одна невелика команда.
- Вас найняли (як команда), і ви будете працювати наодинці з одним новим проектом, тоді ви забудете його і продовжуєте рухатися далі. У цьому випадку ви можете не байдуже (але ваш роботодавець повинен ...)