Як я можу розібратися з членом команди, який не любить робити коментарі в коді?


182

Один із членів моєї команди постійно уникає коментарів у своєму коді.

Його код не є самодокументуванням, а іншим програмістам важко зрозуміти його код.

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

Який аргумент я можу представити йому, щоб переконати його правильно документувати свій код?

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


109
Коментування заради коментарів не робить код кращим. Якщо код зрозумілий (в тому числі і чому) без коментарів, то будь ласка, коментуйте інакше.
Мартін Йорк

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

12
@Kaz Sarcasm (сподіваюся) не добре перекладає текст.
deworde

10
@deworde & artjom - так, це сарказм. ні, це не трапляється так чисто, як могло, але це явно сарказм.

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

Відповіді:


430

Коментарі самі по собі не покращують код, і лише натискання на "більше коментарів", ймовірно, дасть вам трохи більше, ніж /* increment i by 1 */коментарі стилю.

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

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

Тому не нарікайте на відсутні коментарі: скаржтеся на нечитабельний код. Або ще краще, не нарікайте, просто продовжуйте задавати питання про код. Що-небудь, чого ви не розумієте, запитайте того, хто це написав. Ви все одно повинні робити це; з нечитабельним кодом ви просто задасте більше запитань. І якщо ви пізніше повернетесь до фрагмента коду, і не впевнені, що правильно запам’ятали, що це робить, задайте те саме питання ще раз.

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

На фронті навичок людей уникайте звучання поблажливості чи звинувачення будь-якою ціною; будьте серйозні та чесні щодо своїх питань.


269
+1 для "не скаржиться на відсутні коментарі: скаржиться на нечитабельний код."
Md Mahbubur Rahman

4
Що робити, якщо відповідь на будь-яке запитання щодо коду уздовж рядків "Що ви зробили, щоб зрозуміти це?"
Саул

40
+1: Натискання начитаних імен функцій може мати додаткові переваги ... При перегляді коду: "Не можу зрозуміти, що робить xg_jkhsfkasq". "О, це промивання буфера основного каналу, тепер я можу випустити?" "Звичайно, але я не вагаюсь схвалити його, поки ви не перейменовуєте функцію flush_primary_buffer" "А-а, але це також очищення основного кешу, щоб це ім'я вводило в оману" "Вимкніть систему до зупинки! Хоча ви змінюєте цю логіку, чи не проти перейменувати цю функцію?"
deworde

18
Мені б не доводилося створювати враження, що я не в змозі прочитати код. Нетехнічний менеджер може просто помітити, що я постійно прошу "Боба" про допомогу, оскільки код Боба для мене занадто розширений. Це означає, що Боб - «просунутий» розробник, і я не готовий працювати на його рівні.
Роб П.

5
@Rob P. Я бачу страх, але якщо ви не можете прочитати код, і очікується, що ви збережете код, код не написаний добре, або ви недостатньо знаєте. Якщо ви не знаєте достатньо, вам потрібно запитати. Якщо запитання виявляє, що код просто важко читати, натисніть на його виправлення. Хитрість полягала б у тому, якщо ви йдете по маршруту соціального інжинірингу, змішати це, чи йде Боб до вашого столу, чи ви йдете до його, і бути дуже активним щодо вказівки на речі. Зрештою,
нетехнологічний

114

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

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

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


5
+1 - це єдиний спосіб реально втілити зміни в колегу, якого я знайшов, насправді сидіти з ними і переглядати / рефактор разом з ними. Якщо ви не можете відмовити у перегляді коду, це може бути складно. Іноді, коли ти середнього рівня, ти просто маєш порушувати питання для людей похилого віку, і якщо вони не слухають, смикають ніс, поки ти не станеш старшим, і не зможеш ветувати таке сміття
Джиммі Хоффа

1
Огляди коду та парне програмування - найкращий досвід із покращення загального стандарту розробників у команді. Йдеться про обмін вміннями та навичками в колективі. Без цього ви змушуєте розробників вчитися на важкому шляху і припускаючи, що вони вийшли з коледжу ідеальними. Загальна відсутність такої практики у галузі, ймовірно, є причиною того, що існує стільки розробників з досвідом 10+ років, які не можуть написати читабельний, добре організований код.
Мартін Браун

27

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


2
+1 - Якщо вам доведеться задати питання про будь-яку частину коду, тоді ця частина або потребує коментаря, або рефакторинг, тому це питання не потрібно буде задавати хтось інший у майбутньому.
Данк

+1 Також здивовані кодові / оціночні відгуки так низько відповідають відповідям. Реалізація кодового огляду на рівні команди (щоб не вибирати особу) може допомогти вирішити проблему (і, можливо, інші, які ви навіть не знаєте, що у вас є :). В крайньому випадку, ви можете застосувати політику без соло-натиску, згідно з якою вам не дозволяється натискати, якщо ваші зміни не переглянули інший член команди.
Chris Lee

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

18

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

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

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

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

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


+1 для обговорення фактичного прибутку від коментарів. Коментарі призначені для додавання значення вихідному коду.
Sparky

1
Re: "Таке насильство, швидше за все, спричинить жахливі коментарі". Якщо ви не коментуєте кодування, то повторне заповнення коментарів після того, як код буде зроблено, майже завжди призводить до жахливих коментарів, вірите ви в них чи ні. Коли ви кодуєте, це час, коли ви точно знаєте, ЧОМУ ви робите щось певний спосіб. Це час, щоб повідомити інших. Якщо ви коментуєте, коли закінчите, шанси ви навіть не згадаєте, про що ви думали, коли писали код, тому ви, як правило, кидаєте марний коментар лише заради коментування.
Данк

3
завжди мали проблеми з підходом до цієї книги. Коментарі можуть бути корисними для пояснення ділового процесу / логіки (або чому), яку не може отримати чистий код.
бхарал

Хоча коментарі в коді були б не потрібні, має бути принаймні опис методу, наприклад, Javadoc
Danubian Sailor

2
Чистий Кодекс - це гідна книга, але до неї не слід ставитися як до Євангелія. Ви повинні застосувати здоровий глузд і вирішити для себе, що працює. Я не погоджуюся з порадами щодо коментарів, оскільки мови програмування орієнтовані на те, щоб висловити проблему з мізерним розглядом причини. Я писав код для Google Shopping, який додав код країни до SKU продукту. Очевидно, що робить код, але якщо ви не знаєте, що один і той же код товару ви можете використовувати лише один раз, навіть на різних ринках, ви б не знали, чому я це роблю. Коментар, який я додав, уточнює його.
GordonM

10

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

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

  1. Він усвідомлює свій вибір коду / дизайну і не хоче викладати їх у прозі. (Огляди коду можуть бути корисними для посилення чиєїсь впевненості в собі, як і для того, щоб знищити їх.)
  2. Він працює дуже лінійно і не думає багато вперед. Коментувати болісно, ​​тому що змушує його вивантажити безпосередній код, який він збирався написати зі своєї робочої пам’яті, щоб скласти свій намір по-іншому. (Якщо це правда, коментування стає дуже важливим для його якості коду.)
  3. Історично люди не розуміють його коментарів.

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

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


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

@GordonM Чи вважаєте ви, що було б краще не повідомляти працівникові, коли його поведінка є невідповідною та якими будуть наслідки тривалої невідповідної поведінки?
kojiro

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

@GordonM Я фактично приймаю виняток із того, що те, що я сказав, загрожує, але все одно я це виправив.
kojiro

8

Отримайте програмне забезпечення для перегляду коду та добре його використовуйте.

Ми використовуємо Kiln, і нам це подобається. У нас є політика, згідно з якою кожен набір змін повинен бути переглянений (хоча ми дозволяємо розробникам підняти / затвердити огляди для себе на тегах і безконфліктних злиттях (хоча більшість з нас використовує rebaseif); таким чином ми можемо швидко помітити набори змін без оглядів).

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

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

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

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

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


4

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

Чому коментарі?

Хоча коментар до коду є формою вбудованої документації, в мовах програмування високого класу існує кілька способів уникнути зайвого "задокументованого" програмування (змістовного коду), використовуючи елементи самої мови. Це також погана ідея перетворити код у списки з підручника з програмування, де окремі висловлювання буквально пояснюються майже тавтологічно (майте на увазі приклад "/ * збільшення i на 1 * /" у вже наданих відповідях), роблячи такі коментарі релевантними лише програмістам, які не знають мови.

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

Читання коду! = Коментарі до коду

Читальний код не потребує анотацій у коментарях. У кожному конкретному місці коду завжди присутній контекст завдання, якого повинен досягти цей конкретний код. Якщо відсутня мета та / або код робить щось загадкове = уникайте його будь-якою ціною. Не дозволяйте дивним хакам заповнювати свій код - це прямий результат поєднання баггі-технологій з відсутністю часу / інтересу для розуміння основ. Уникайте містичного коду у своєму проекті!

З іншого боку, програма "Читаема програма = код + документація" може містити кілька законних розділів коментарів, наприклад, для полегшення створення "коментарів до API" документації.

Дотримуйтесь стандартів стилю коду

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

Стати євангелістом з читабельності коду

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

  • Спростіть іменування, коментування та форматування за допомогою порад, які стосуються кожного рядка коду
  • Уточнити петлі, логіку та змінні програми, щоб зменшити складність та плутанину
  • Проблеми атаки на рівні функцій, такі як реорганізація блоків коду для виконання однієї задачі
  • Напишіть ефективний тестовий код, який є ретельним і стислим, а також читабельним

Вирізаючи «коментування», все ще залишається багато (я думаю, написання коду, який не потребує коментарів, - це одна чудова вправа!). Називання семантично значущих ідентифікаторів - хороший початок. Далі - структурування коду шляхом групування логічно пов'язаних операцій у функції та класи. І так далі. Кращий програміст - кращий письменник (звичайно, якщо брати до уваги інші технічні навички).


Ви можете написати код, який не потребує коментарів лише для розваги. Це дійсно може бути чудовою вправою, але не, якщо вам потрібно повернутися до коду і насправді нічого не зможете змінити, тому що ви не знатимете, чому ця функція працює, як це можливо, можливо, був якийсь клієнт, який цього хотів. Звичайно, ви можете бути в тому, що може бути 1% проекту, який задокументований і аргументований поза проектом, але навіть тоді є рішення, які ви приймаєте під час кодування, які не підштовхуються до документації. І відверто кажучи ... Хто читає документацію, якої немає в коді. Звичайно, не програмісти ;-P.
Nux

1
Хороший інженер піклується про всю систему (включаючи некогенеровану документацію) - але тут, звичайно, ми маємо на увазі кодування в цілому. Моя думка полягає в тому, що відсутність ідентифікаторів у коді під назвою foo , bar , tmpSomething2 та IamJustTooSmartAssToCare вже вдосконалюється ситуація і зменшує загальну потребу пояснювати, що таке код і що він робить. Код слід писати з "режимом мислення", як добре розроблений API, який читають, розуміють, використовують і підтримують людині. Занадто багато коментарів у коді, які інакше важко зрозуміти - дуже поганий знак!
Яуген Якимович

Програмування / кодування BTW будь-якого типу доменної логіки у формі HACK або "тимчасового" виправлення помилок насправді створює "дивні HACKs" - як тільки у вас багато їх буде затиснуто всередині blackbox - очікуйте, що вони провал і відстріл назад. Це може бути виправдано термінами в проектах "реального світу" тощо. але насправді це просто дешеве програмне забезпечення, яке потребує реконструкції логіки домену (або, можливо, пошуку нової роботи).
Яуген Якимович

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

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

3

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

Дещо. Чудовий код не потребує коментарів. Однак, як ви сказали, його код не є самодокументуванням. Тому я б не зосереджувався на коментарях. Ви повинні зосередитись на вдосконаленні майстерності та майстерності своїх розробників.

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


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

3

Перш за все, я б запропонував вам переглянути свій підхід щодо коментарів.

Якщо це коментарі щодо документації на рівні API (відкриті пізніше для публіки), то цей розробник просто не виконує своєї роботи. Але щодо всіх інших коментарів будьте уважні.

У більшості випадків я стикаюся з ними, коментарі є злі. Я рекомендую прочитати розділ коментарів до коду "Чистий код" Роберта Мартіна, щоб добре зрозуміти, чому.

Коментарі коментують ваш код кількома способами:

1) Їх важко підтримувати. Вам доведеться вкласти додаткову роботу при рефакторингу; якщо ви змінили логіку, описану в коментарі, вам також потрібно відредагувати коментар.

2) Вони часто брешуть. Ви не можете довіряти коментарям і повинні замість цього прочитати код. Звідки виникає питання: навіщо вам взагалі потрібні коментарі?

// this method returns the sum of 'a' and 'b'
public int GetHash(int a, int b)
{
    //the calculation of the hash
    int result = a*b;
}

(Хеш - це не сума, а продукт.)

3) коментарі захаращують код і дуже рідко додають значення.

Моє рішення: Замість того, щоб додавати більше коментарів, намагайтеся взагалі позбутися від них!


4
Це просто нерозумно. Я сподіваюся, що ніхто не вірить, що такий поганий стиль коментування є корисним. Але чи чесно ви вірите, що коментарі ніколи не слід використовувати?
jmk

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

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

4
@xaxxon Не кажучи вже про ці яблука, навіть якщо ця людина може бути ти.
пухнастий

3
@mehaase - Не що, не як, а чому найважливіша причина додавати коментарі до коду.
Хенк Лангевельд

1

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

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

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

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


1

Це значною мірою розширення відповіді тадмерів, але регулярно проводити огляд коду.

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

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

Чи перегляд коду є хорошою практикою?


Коли кімната, повна людей, починає сміятися над вашим нечитабельним кодом, ви почнете робити кращу роботу з кодування та коментування. :) Я великий прихильник оглядів коду.
Евік Джеймс

1
Сміятися з коду перед іншими колегами - це не так: - \
Danny Tuppeny

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

1

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

Які аргументи я можу навести, якщо ви збираєтесь написати (нечитабельний) код, що він повинен бути належним чином задокументований?

Розуміння того, як писати корисний та читабельний код, вимагає часу, практики та досвіду. Недосвідчені програмісти (і, на жаль, багато досвідчених) часто страждають від ефекту Ikea ( PDF ). Це тому, що вони побудували його і тісно знайомі з ним, і вони впевнені, що код не тільки чудовий, але і читабельний.

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

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

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

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


0

Для багатьох проектів потрібна документація з кодом: документ інтерфейсу, проектний документ, ...

Деякі проекти вимагають, щоб така документація була поміщена в коментарі до коду та витягнута за допомогою таких інструментів, як Doxygen або Sphinx або Javadoc, щоб код та документація залишалися більш послідовними.

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


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

1
@JanHudec - Я згоден з тобою. Ось чому слід встановити деякий контроль. Автоматична генерація забезпечує, наприклад, що аргументи функцій у коді такі ж, як у коментарях. Більше того, наявність одного PDF замість каталогу вихідних файлів робить документацію більш читаною (тобто, більш оглядовою) більшістю людей.
mouviciel

2
Ну, ні, це не так. Як ви помітите в .pdf, що код насправді робить щось тонко інше, ніж говорить опис?
Ян Худек

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

Так, ви сильно упереджені. У таких областях, як це має сенс, у більшості одиничних тестів достатньо для забезпечення якості та документування кожної останньої функції було б марною тратою часу.
Ян Худек

0

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

Ви вмотивовані бачити коментарі в його коді; чому ? Ви дали причину; чому ця причина для вас така важлива? Він більш мотивований замість цього робити щось інше; чому ? Він дасть причину; чому ця причина для нього така важлива? Повторіть це, поки не досягнете рівня, коли конфлікт дійсно виникає, і спробуйте знайти там рішення, з яким ви можете жити. Б'юсь об заклад, що це дуже мало стосується коментування.


0

Якщо ви будете дотримуватися хорошого стандарту кодування, вам буде потрібно мінімальна кількість коментарів. Конвенції про іменування важливі. Імена методів та назви змінних повинні описувати їх роль.

Мій TL пропонує мені використовувати менше коментарів. він хоче, щоб мій код був зрозумілим і самоописовим. простий приклад: назва змінної для типу рядка, що використовується для шаблону пошуку

   var str1:String="" //not uderstandable
   var strSearchPattern:String="" //uderstandable

0

Любіть відповіді на перегляд коду, але, можливо, мій процес теж допоможе.

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

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

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

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

Серйозно подумайте про те, щоб просунути це як частину свого «Командного контракту» (і, безумовно, створіть контракт, якщо у вас його немає) - таким чином всі погодились на це, і ви маєте його на стіні десь, щоб не було » t будь-яке питання про те, що ви погодилися зробити.


0

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

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

Немає кращого вчителя, ніж суворий досвід!

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

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


-1

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


12
Я ледве уникнув кнопки -1 на цьому. Більшість кодів, які я пишу, мають дуже мало коментарів. Я не думаю, що в мене люди скаржилися, що це не зрозуміло протягом принаймні кількох останніх років. За дуже невеликим винятком, якщо код потребує розуміння коментарів , тоді він не потребує коментарів, він потребує поліпшення для ясності. (Звичайно, ви повинні взяти на увазі базове розуміння синтаксису мови. Такі речі, як, наприклад, в C ++, не виходять з вашої дороги просто, щоб уникнути використання, reinterpret_cast<>()тому що люди можуть вважати це заплутаним; в C #, якщо все ??, що вам потрібно, використовуйте it; etc.)
CVn

2
@ MichaelKjörling: Це може сильно залежати від того, який код ви пишете. Якщо ваш код залежить від нечасто відомих характеристик мови чи API, або ви щось зробили на інтуїтивно зрозумілий спосіб, щоб уникнути незрозумілої помилки, на яку знадобилися години, виявити набагато ефективніше прокоментувати це (можливо, включаючи посилання на статтю), ніж намагатися зробити код "зрозумілим" щодо цієї довідкової інформації без коментарів.
LarsH

@ MichaelKjörling: Я особливо мотивований, щоб сказати, що сьогодні, тому що я останній місяць вела боротьбу з глибоким API ГІС. Засоби API є складними і не дуже ретельно задокументованими. Ми постійно стикаємося з сюрпризами, деякі з яких повертають нас за часом. Очікувати, що комусь іншому (або мені через 6 місяців) доведеться заново відкрити ці самородки, щоб ефективно працювати з нашим кодом, було б величезною тратою часу цієї людини. І ці секрети, як правило, не можуть бути задокументовані без коментарів "покращення для ясності".
LarsH

@LarsH Це, ймовірно, може бути кваліфікованим як один із тих "дуже мало винятків", про які я згадував у своєму коментарі. Я не проти коментувати, де це насправді додає цінності ; але не кількість коментарів робить код легким чи важким для читання. Це означає, що за допомогою API я буду більше схильний документувати ці примхи в іншому місці; скажімо, у вікі чи подібному. Можливо, також додайте посилання на відповідну сторінку поруч із кожним використанням. Таким чином, вам не доведеться шукати якесь інше місце, яке використовує цю особливість API, коли код не працює так, як ви очікували при першій спробі.
CVn

@ MichaelKjörling: узгоджено загалом. Чи є ці винятки рідкісними чи ні, залежить від домену, який ви програмуєте, та API, який ви повинні використовувати. Посилання / посилання хороші для приміток, які застосовуються загалом, а не лише до поточної ситуації. Ніхто не хоче дисертації в самому коді.
LarsH

-1

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

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


1
Такий підхід скоріше змушує програміста кинути, а не навчити їх правильному способу ведення справ.
Мартін Браун

-1

В одному з моїх минулих проектів не вистачало десятків коментарів (алгоритм, результати або якийсь базовий JavaDoc), тому я просто вирішив зробити 130 випусків для нього, повідомляти електронною поштою про кожен випуск кожні 4 дні. Через 3 тижні у нього було 280 випусків, потім він вирішив написати коментарі.


-1

Коментарі мають одну мету і лише одну ціль:

Чому цей код робить це?

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

У мене є звичка робити свої коментарі найбільш очевидною справою в моєму IDE. Вони виділені білим текстом на зеленому тлі. Справді зверніть вашу увагу.

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

Хороший приклад коментаря:

/* Must instantiate clsUser before trying to encrypt a password because the code to 
   encrypt passwords only uses strong encryption if that module is loaded. */

Поганий приклад:

/* instantiate clsUser */

Якщо ви використовуєте коментарі як "секції" коду: Розбийте свій метод мамонта на менші, корисні іменовані функції, і видаліть коментарі.

Якщо ви говорите, що ви робите, у наступному рядку: Зробіть код роз'яснювальним та видаліть коментар.

Якщо ви використовуєте коментарі в якості попереджувальних повідомлень: обов'язково скажіть, чому.


-2

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

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

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


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

Хтось може мені пояснити, що їм не подобається в моїй ідеї ...?
М. Дадлі

-6

Просто: якщо працівник не коментує, скажіть йому натиснути shift+alt+jдля автоматичного коментування кожного методу одночасно з введенням коду. будь ласка, перегляньте код, щоб уникнути цих проблем.


11
"Авто коментар"? Так ось де всі ці «прирощення I на 1» коментарі приходять? Який IDE це робить (щоб я міг уникати робочих місць, де він використовується)?
CVn

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