Чи є спосіб підтримати різні стилі кодування в команді розробників


13

Проблема: Два розробники => три думки щодо відступу, дужок на новій лінії чи ні тощо.

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

Отже, питання полягає в тому, чи існує спосіб, щоб кожен програміст жив своїм власним стилем, але мав загальну базу коду всередині сховища? Я думаю про якийсь плагін git / svn / будь-який, який змінюється між особистим та загальним стилем під час оформлення замовлення та фіксації. Мені здається, що складною частиною цього підходу є підтримка правильних відмінностей між версіями файлу


1
Існують автоматичні формати коду для більшості мов, але для деяких (наприклад, C ++) зробити їх цілком надійними через складність розбору мови вкрай важко.
Joris Timmermans

5
Дійсно погана ідея. Попросіть свою команду скласти консенсусний стандарт, а потім змусьте їх застосувати. Якщо трохи вина, скажіть їм трохи підрости.
Климент Герреман

8
Можливо, тут слід зробити ще одне надзвичайно поширене зауваження: чи існує актуальна проблема з відмінностями стилів коду? Не виправляйте щось, що не порушено!
Joris Timmermans

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

4
@MikeWeller Чи не можна стверджувати протилежне? Конвенції про іменування - це єдине, що я коли-небудь вважав важливим, оскільки це полегшує визначення мети речі поза її контекстом визначення. Поки хтось напівпослідовно формує, щоб зрозуміти, де блоки гніздяться, починаються і закінчуються, я ніколи не розумів, чому це має бути така велика справа.
Ерік Реппен

Відповіді:


20

Ні, вам потрібно буде зробити стандарт. Якщо у вас зміниться член групи B (або за допомогою автоматизованого інструменту IDE, або вручну), ціла купа членів команди A з кодом написала, що буде зроблено і відображатиметься як зміна.

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

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


11

Ні, вам потрібно буде визначити стандарт кодування (бажано той, який вже існує) і дозволити вашим розробникам дотримуватися цього. Бути професійним програмістом означає, що ти можеш адаптуватися до того, що застосовується в кодуванні стандарту кодування.


2
+1. Нехай вони виберуть один, але змусьте його застосувати.
Климент Герреман

Я хотів, щоб форматування було частиною стандарту мови програмування, таким чином, що програми не просто "дійсні" або "недійсні", але мають і третій стан, "дійсні та відформатовані".
JesperE

4
це (більш-менш) випадок у python, де відступ є семантичним мовою.
Климент Ерреман

2
Go не строге дотримання таких, але поставляється з вбудованим в вихідному коді formater, go fmt. Дивіться golangtutorials.blogspot.fr/2011/06/…
Клемент Ерреман

1
@JesperE Це буде реалізовано в Python з PEP8 і відповідним інструментом, винахідливо ім'ям pep8 .
фігаг

8

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

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

2
Додам, що професійні розробники часто так чи інакше зливають стилі один одного. Вони матимуть короткі неформальні дискусії з деяких питань та домовляться.
Joris Timmermans

Чудово працює, маючи застереження, що використання автоматичного переформатування коду потрібно звести до мінімуму (якщо не прямо заборонено).
грахаммарки

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

Я думаю, що ця відповідь насправді, можливо, пропустила частину питання "автоматичного форматування"?
Joris Timmermans

Різноманітні стилі між файлами набагато складніше мати справу, ніж просто мати послідовний стиль.
Енді

4

Коротка відповідь - Ні.

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

Метою документа зі стандартів повинно бути застосування / пропозиція набору загальних стандартів / конвенцій кодування, які стосуються

  1. Макети Елементи, такі як вкладка, відступ, використання {, (,
  2. Назва змінної, об'єкта та функції, тобто CamelCase, угорська позначення
  3. Виключення Поводження з тим, як / коли / де це потрібно виконувати
  4. Зауваження до коду. Ви завжди посилаєтесь на документ про дизайн, номер помилки тощо

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

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

Зазвичай при створенні документа про стандарти кодування я переглядаю галузеві стандарти мови, якою я користуюся (C, C #, SQL), використовую найбільш відповідні стандарти, звертаюся до коментарів до найстарших / впливових розробників, включаю коментарі, де це доречно, а потім відпустіть документ.


1
Насправді у багатьох магазинах є один розробник, який, як правило, Олд Рук або ПримаДона, який, схоже, захоплюється створенням форматування Святих воєн для решти людей, з якими мають справу. Професійний == Що б я не сказав. Що б ви не сказали, == Непрофесійно. А потім це переходить. Я бачив стандарти кодування, що передбачають грубі речі, такі як "Використовуйте багато глобальних змінних, ніколи не створюйте нових класів, уникайте об'єктно-орієнтованого програмування за будь-яку ціну і нічого не змінюйте ніколи". На жаль, немає обмежень у тому, що люди намагаються вторгнутись у сферу чогось, що називається "Стандарти кодування".
Warren P

4

Теоретично можливе автоматичне переформатування коду, перш ніж він буде застосований до вашої системи контролю версій.

Однак є одна велика проблема: засоби автоматичного форматування коду не є на 100% надійними. Таким чином, ви могли фактично представити проблеми у своєму коді з цією системою. На мій погляд, це вбиває ідею. Завжди важливіше мати функціональний код, ніж правильно стилізований код!

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

Ось аналогічна дискусія щодо Stack Overflow .


2
Зауважте прийняту відповідь і на пов'язаній дискусії!
Joris Timmermans

1

Односторонній код автоматичного переформатування може бути корисним рішенням, якщо:

  1. Знайдіть автоформат, який насправді працює для конвенції, яку ви хочете реалізувати, і вашої мови програмування.
  2. Можна зробити це заздалегідь, щоб переформатування не відображалось у журналах змін, змішаних із та не відрізняючими від фактичних функціональних змін.
  3. Управління, щоб змусити вашу команду погодитись, яку конвенцію слід застосовувати (адже загалом кажучи, немає "зворотного шляху" для виїзду до особистих переваг розробника, принаймні, не те, що я знаю).

Жоден із них насправді зробити непросто у багатьох випадках, тому подумайте про вибір своїх битв тут! Я бачив, як команди роблять це успішно для проекту C # /. NET, де переформатування відбулося вже на ПК розробника, тому це можливо за деяких обставин.


1

абсолютно ти можеш. Вся справа в тому, щоб не потіти дрібними речами.

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

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

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

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