Що з усіма цими правилами кодування?


10

Я завжди підтримував ідею наявності правил кодування для розробників у компанії чи конкретному проекті. Особливо, якщо компанія розміром більше 10. Чим більше компанія, тим більша потреба. Я знаю, що багато людей не погоджуються, але я бачив проекти, які їх не мають, і код виглядає як тотальна катастрофа.

Справжня проблема, що випливає з цього, полягає в тому, як змусити тих, які не хочуть використовувати дужки, якщо заяви, або використовувати ту саму рядок з'єднання скрізь у коді чи будь-що інше, використовувати правила кодування, не змушуючи їх протиставляти Ідея?


3
Якщо ви використовуєте C # як мову, тоді використовуйте StyleCop. Якщо ви використовуєте Java ...
Job

@Job - Так, ми в основному використовуємо C #. StyleCop виглядає цікаво.
TheBoyan

Відповіді:


9

Залучіть їх до вирішення проблеми, а не до правил боротьби. Я особисто віддаю перевагу ідеї "настанови стилів", "стандарти кодування" або щось подібне, сподіваючись, що це запобігає реакції на "коліні = погані" в коліні.

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

Іноді тиск однолітків є найкращим рішенням для цього.


Тут грають захисника диявола, правила завжди можуть бути невірними (наприклад, щось встановлено для минулого проекту, але це тягар для розробників у поточному проекті) - тому маючи процес перегляду / скасування правил - навіть якщо це використовується рідко - також може бути корисним для запевнення людей у ​​тому, що правила - це корисна інструкція, а не нав'язування свободі розробника.
Beekguk

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

6

У своїй роботі ми використовуємо всі три наступні рішення:

1) Прийміть перевірку стилю коду, наприклад, відмінний Checkstyle (для Java) або StyleCop (для C #). Це легко налаштовані засоби, які можуть автоматично виділити стиль кодування / відхилення правила. Це дає кожному нейтральну третю сторону визначити, що є, а що не прийнятно.

2) Прийміть шаблон коду переформатування автоматичного збереження (ось приклад за допомогою Eclipse) (та інший для Visual Studio), який автоматично відформатує ваш код при збереженні. Це чудово для того, щоб хтось міг кодувати те, що він бажає, але форматувати код однаково під час збереження / фіксації. Мені це дуже подобається, і наш код ніколи не був більш послідовним.

3) кодові огляди. Сподіваємось, ви все одно це робите, але одне, що слід виділити, це те, де правила / стилі кодування порушують умовність.

Окрім сказаного, важливо, щоб усі були на одному човні та домовилися стилів / правил, над якими вони працюють. Дайте зрозуміти, що ви не будете домовлятися з усіма про все, але попросіть зобов’язання колективу виконати те, що вирішує команда. Не забудьте час від часу переглядати стилі / правила, вибрані для врахування досвіду в реальному світі, використовуючи їх та перетворюючи команду.


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

4

Справжня проблема, що виникає з цього, полягає в тому, як зробити ті жорсткі голові, які не люблять використовувати дужки, якщо оператори, або використовувати ту саму рядок з'єднань скрізь у коді, або що завгодно,

Це вони "жорсткі голови", якщо вони не використовують дужки, чи це запит "жорсткого голови"?

Виберіть свої битви. Я сумніваюся, що це один із тих, кого варто вибрати. Мені б не сподобалося працювати де-небудь, що очікується десь поблизу такого рівня деталізації на "першу перевірку коду". Це червоний прапор, що команда не розуміє рефакторингу.

OO 101 : "Рефактор, коли виріб робить те, що йому потрібно зробити". Не раніше.


Невикористання дужок було лише прикладом :), хоча я працював у великій компанії, у якої була книга> 200 сторінок правил кодування, і це було одне з них. У всякому разі, я впевнений, що ти погодишся зі мною, що хтось, хто навмисно використовує ту саму рядок з'єднання (приклад знову) знову і знову в коді, просто тому, що він / вона лінивий, щоб помістити його в конфігураційний файл і прочитати воно звідти, потребує уваги, і треба знати, як впоратися з подібними ситуаціями.
TheBoyan

2

Досить складно сидіти на плечі кожного окремого розробника у великих командах, переконуючись, що вони ставлять дужки туди, куди ви думаєте, що їм слід йти - довіряйте мені на цьому;).

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

Звичайно, деякі компанії повністю відбирають пільги на реєстрацію молодших програмістів. Коли вони нарешті вивчають правила кодування компаній, тоді вони отримують привілей.


2
Якщо розміщення брекетів - це ваша найбільша проблема якості, я думаю, вам дуже пощастило. Це правильний рівень, на якому слід зосередити увагу?
Бо Персон

Чисто приклад, взятий із запитання. Принцип полягає в тому, що "рекомендації" щодо дизайну коду, як сказано нижче в розділі "bethlakshmi", - це лише те, що - керівництво. Якщо ви дійсно стурбовані тим, як вони дотримуються, то пункти в процесі повинні виникати, щоб нагадати / навчити / виконувати їх.
Мартін Блор

Але дужки, куди ви думаєте, вони повинні йти ... Це говорить про багато. Я думаю, що є більш фундаментальні аспекти кодування читабельності / стандартів кодування, ніж розміщення дужок. Я погоджуюсь, що всі в проекті повинні дотримуватися того самого стандарту, але один над іншим тут не має великого значення. Можливо, ви можете дозволити їм «виграти» битву розміщення брекетів в обмін на прийняття ними інших пропозицій щодо стандартів кодування? Мало того, але вони будуть відчувати себе частиною рішення, якщо їх ідея розміщення брекетів буде відповідати стандартам.
Жиль

1
Саме так. Я відмовився від спроби переконати розробника робити дужки по своїй лінії, а не вбудовані дужки, в обмін на його навчання SOLID і TDD ... я б сказала велику торгівлю;).
Мартін Блер

1
"Звичайно, деякі компанії повністю забирають привілеї на реєстрацію молодших програмістів. Коли вони нарешті вивчають правила кодування, вони отримують привілей". - це єдиний спосіб зробити це, коли це має значення.
ocodo

2

Я думаю, ви говорите про проблеми дуже різного рівня:

як змусити тих завзятих, які не люблять використовувати дужки, якщо заяви,

Це здебільшого проблема стилю / читабельності, якщо не існує явної проблеми пріоритетності оператора. Останнє не повинно бути дуже поширеним, і все-таки перевіряється одиницею, таким чином, легко виправити. Перший легко може перейти у Священну війну з невеликими вигодами, але серйозними негативними наслідками для моральної сили команди. Тож будьте обережні - використовуйте лише перевірені і перевірені правила, які були прийняті принаймні деякими командами / спільнотами та перевірені на роботу.

або використовувати однаковий рядок з'єднання скрізь у коді,

Якщо ви маєте на увазі Magic Constannts, це справді проблема технічного обслуговування (плюс потенційно безпека), і як такий IMHO будь-який досвідчений розробник зрозуміє і прийме, що це погана річ.

або що б там не було, використовувати правила кодування, не змушуючи їх протиставити ідею?

Ви не можете змусити людей погоджуватися з будь-якими правилами кодування - ваш єдиний шанс - дійти до загального розуміння та придбання від членів команди шляхом обговорення та (іноді запеклих) дебатів . Потрібно використовувати логічні та переконливі аргументи , показуючи значення, яке стоїть за кожним правилом, та пояснюючи, як слід слідувати за незручності коригування вбудованих звичок. З іншого боку, прагніть зробити перехід максимально простим , наприклад, запровадивши автоматичне форматування коду під час реєстрації відповідно до прийнятих правил.

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


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

@bojanskr, більшість основних IDE в даний час підтримують правила форматування коду в меншій чи більшій мірі, і можуть автоматично відформатувати ваш код після збереження або реєстрації. Для Java, як Eclipse, так і IntelliJ, я думаю, що і NetBeans, але в мене немає великого досвіду з цим. Для C # див. Коментар @ Job вище. Але є й окремі інструменти, такі як Artistic Style для C / C ++. І більшість SCC, яких я знаю, підтримує виконання сценаріїв / тригерів для користувача, наприклад, при реєстрації.
Péter Török

2

Залучіть їх до встановлення правил. Зазвичай це допомагає спонукати людей слідувати за ними.


1

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


1

Один і той же рядок з'єднання скрізь? Рішенням цього є рефакторинг, поки ви не видалите всі дублювання. Кодери для копіювання та вставки повинні потрапити до в'язниці програміста. (Не смійся! Стів Баллмер - наглядач.)

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

Як я вирішував би це:

  1. Наполягайте, щоб у команди був загальний стандарт кодування. Це може бути 5 рядків, але всі вони повинні погодитися.
  2. Кожен раз, коли ви помічаєте аргумент, наполягайте на тому, що вони вирішують його разом і ставлять у стандарт кодування. Якщо ви помітили, як люди переформатують речі туди-сюди, розглядайте це як аргумент.
  3. Щоразу, коли стандартний елемент узгоджений, подивіться, чи є інструмент, який очистить всю базу коду відразу.
  4. Кожні пару місяців проходьте стандарт кодування і подивіться, які з них все-таки є правдивими та актуальними. Стандарт просто документує, що люди роблять. І немає сенсу зберігати в стандарті елементи, які стали очевидними.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.