Когда комментариев слишком много, а когда их недостаточно?

Продолжаются небольшие дебаты, в которых я работаю над эффективностью комментариев в коде. Один из ведущих проинструктировал своих разработчиков не использовать комментарии, поскольку они слишком «старомодны», а пара других разработчиков указала, что они никогда не используют комментарии, потому что считают, что все, что они делают, — это загромождают код.

Я всегда в значительной степени придерживался практики, согласно которой я комментирую верхнюю часть каждого файла базовым блоком комментариев, комментирую каждое определение метода/класса/и т. д., а затем комментирую любое место в коде, к которому, как я думаю, я мог бы вернуться через 6 месяцев и думаю про себя: "WTF".

Понятно, что это субъективно, но мне любопытно узнать, есть ли у кого-нибудь действительно веские аргументы или опыт в пользу того или иного способа.


person Community    schedule 13.07.2010    source источник
comment
там, где я работаю, нам не рекомендуется использовать комментарии внутри кода, за исключением комментариев TODO. Это помогает писать понятный код.   -  person Alexandre C.    schedule 13.07.2010
comment
@Alexandre - я бы сказал, что это не помогает писать четкий код, а просто делает чужой неясный код полной тарабарщиной. Наличие или отсутствие комментариев не изменяет написанный код.   -  person Joel Etherton    schedule 13.07.2010
comment
@Joel: причина в том, что имена функций и структура кода должны делать комментарии бесполезными.   -  person Alexandre C.    schedule 13.07.2010
comment
Я мог бы вернуться через 6 месяцев и подумать про себя, WTF - вполне возможно, что код недостаточно описательный и его можно было бы использовать с рефакторингом. Это всего лишь эмпирическое правило, а не догма, но с моим собственным кодом, если я думаю, что могу удивиться, WTF в будущем, кто-то другой в компании будет думать то же самое прямо сейчас. Опять же, здесь я бы провел рефакторинг.   -  person Jamie Dixon    schedule 13.07.2010
comment
@Jamie Dixon - правда, но у меня были примеры, когда код был взломан просто потому, что он был закодирован точно в соответствии с бизнес-требованиями (обычно финансовые вычисления), и, не видя требования передо мной, иногда расчеты становятся лучше меня, когда я смотрю на это снова позже. Еще одна моя грязная привычка, когда я сталкиваюсь с чем-то подобным, — писать название документа с требованиями, раздела и т. д., которые продиктовали сумасшедший код, чтобы я мог, по крайней мере, знать, где его посмотреть еще раз.   -  person Joel Etherton    schedule 13.07.2010


Ответы (9)


Я просто укажу вам на замечательный пост Джеффа Этвуда на эту тему., который попадает прямо в голову.

person Community    schedule 13.07.2010
comment
A - Спасибо за связанную статью. Это было хорошее чтение. - person Joel Etherton; 13.07.2010
comment
@ Джоэл - пожалуйста, Джефф очень хорошо резюмирует проблему. - person Yuval Adam; 13.07.2010
comment
Фу. Он подрывает свою точку зрения своим примером с квадратным корнем; когда он изменяет его на самодокументирующийся стиль кода, он теряет информацию о том, что алгоритм является приближением Ньютона-Рафсона. Хорошие идентификаторы и хорошие комментарии работают вместе. - person Russell Borogove; 14.07.2010
comment
Лучший пост на эту тему от Стива Йегге: steve-yegge. blogspot.com/2008/02/portrait-of-n00b.html - person matt b; 14.07.2010

За всю свою карьеру я ни разу не сталкивался с этим чудесным зверем "самодокументирующийся код". Может быть, мне просто не повезло, но я начинаю подозревать, что его на самом деле не существует.

person Community    schedule 13.07.2010
comment
Я видел его в 2012 году. Я работал в Atlassian над кодом ядра платформы и подумал: «Вау, мне нравится этот код, но этот архитектор не оставил комментариев в коде, вероятно, потому, что он использовал свой стаж, чтобы… избежать соблюдать принципы или что-то в этом роде? Но я понимаю, как это работает, так что, возможно, я такой же хакер, как и он. Затем меня осенила причина: у методов было правильное название, переменные говорили сами за себя, а пути кода были простыми. Я просто не знал, сколько опыта мне потребуется, чтобы достичь такой же простоты. - person Adrien; 22.10.2019

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

В общем случае такой код пишут только действительно великие гуру кода. Остальные из нас сколачивают что-то, что работает.

  • Если вы действительно великий гуру кода, не беспокойтесь о том, чтобы замарать ваш божественный код излишними комментариями.
  • Если вы едва понимаете, что делаете, постарайтесь задокументировать свои ошибки, чтобы другие могли попытаться исправить беспорядок.
  • Если вы средний (а большинство из нас, вроде как, по определению), то оставьте несколько намеков в комментариях для себя и других, чтобы упростить работу во время обслуживания, но не оскорбляйте чей-либо интеллект и не тратьте место, документируя ДЕЙСТВИТЕЛЬНО очевидное. . В идеале ваши комментарии должны описывать ваш код на метауровне, указывая не то, что вы делаете, а почему. Также как, если вы делаете что-то необычное или хитрое.
person Community    schedule 13.07.2010
comment
Одной из существенных черт такой некомпетентности является то, что человек, страдающий таким недугом, не способен знать, что он некомпетентен. Обладание таким знанием уже означало бы исправление значительной части преступления. gagne.homedns.org/~tgagne/contrib/unskilled.html - person sarnold; 13.07.2010
comment
Крюгер-Даннинг! Я искал это. @sarnold: Спасибо! :) - person Carl Smotricz; 13.07.2010
comment
@Carl - Я полагаю, был бы другой вопрос: вы когда-нибудь комментировали наименьший общий знаменатель? Что определяет метауровень (по вашему мнению), на котором группа должна комментировать код? - person Joel Etherton; 13.07.2010
comment
@Joel: я стараюсь последовательно комментировать середину. Мои комментарии объясняют общий подход и все, что неочевидно (или требует изучения других ресурсов или чего-то подобного). Я также комментирую поля (но не геттеры/сеттеры!), где имя не делает очевидным, что в них находится. - person Carl Smotricz; 13.07.2010
comment
В этом есть доля правды, но ахиллесова пята в том, что никто не умеет оценивать собственный уровень мастерства. - person DarenW; 22.09.2010

«Один из ведущих проинструктировал своих разработчиков не использовать комментарии, поскольку они слишком «старомодны», а пара других разработчиков указала, что они никогда не используют комментарии, потому что считают, что все, что они делают, — это загромождают код».

Если бы я когда-нибудь услышал, как разработчик, с которым я работал, говорил подобное, я бы поправил его. Если бы у меня не было нужного звания, чтобы исправить их, я бы ушел с работы.

Четко написанный код с хорошими идентификаторами — то, что иногда называют «самодокументированием», — прекрасно иллюстрирует, что делает код. Это хорошо, насколько это возможно. Задача комментариев — объяснить почему.

person Community    schedule 14.07.2010
comment
к счастью, я не работаю ни в одном из разделов этих разработчиков. В моей команде первое, что было определено, — это документ стандартов для проекта кода (включая комментарии). Случайное обсуждение нашего стандартного документа внутри компании вызвало дебаты между группами. - person Joel Etherton; 14.07.2010

Эта тема часто обсуждается, но вот мои 0,02 доллара США на эту тему:

  1. Я бы предпочел увидеть слишком много комментариев, чем недостаточно. В случае неудачи всегда можно удалить лишние комментарии из кода; однако вы не можете извлечь из них смысл, если их нет с самого начала.
  2. Я слышал, как некоторые разработчики утверждают, что другие разработчики, которые «передокументируют» (определения этого зависят от человека), не являются хорошими разработчиками. Хотя сказать, что вы обновляете счетчик, может быть признаком того, что вы не знаете, что делаете, наличие четкого руководства по некоторой бизнес-логике, находящейся в середине метода, над которым вы работаете, может быть весьма полезным.
  3. Хотя есть несколько отличных разработчиков, которые могут писать чрезвычайно четкий код, не требующий комментариев, большинство разработчиков не так хороши или тратят больше времени на написание кода, чтобы он был самодокументируемым, чем если бы они просто включили пару Комментарии.
  4. Вы не знаете уровень навыков следующего человека, который будет читать ваш код, и если используемые вами языковые конструкции могут сбивать с толку, обычно рекомендуется включить комментарий, который кто-то может использовать для Google учебника.
person Community    schedule 14.07.2010

Проблема с комментариями заключается в том, что они, как правило, остаются надолго после того, как закомментированный код был изменен или даже удален.

Как правило, я бы комментировал только общедоступный API и сложные для понимания алгоритмы.

Не используйте комментарии, чтобы объяснить, что вы сделали — для этого и предназначен код, используйте комментарии, чтобы объяснить, почему вы это сделали.

person Community    schedule 13.07.2010
comment
Настоятельно рекомендуем записывать свои ответы в инструменте, обеспечивающем проверку орфографии. - person sarnold; 13.07.2010
comment
И, может быть, грамматика тоже... Не надо нам объяснять, что вы сделали, это похоже на одно из будущих времен из "Путеводителя автостопщиков". - person Mr. Boy; 13.07.2010
comment
@sarnold, редактор SO проверяет для меня орфографию, может быть, он не заметил красные подчеркивания??? - person John La Rooy; 13.07.2010
comment
Пожалел пост и исправил язык. - person Carl Smotricz; 13.07.2010
comment
@carl Smotricz, я не заметил ссылку «редактировать», спасибо; Я сжалился над постом и исправил сломанную идиому. :) - person sarnold; 13.07.2010

Диомидис Спинеллис только что написал хорошую колонку для колонки IEEE (процитировано в его блоге), описание проблемы и несколько решений:

При комментировании мы всегда находимся в паре нажатий клавиш от катастрофы: перефразируем функцию кода на английском языке. И вот тогда начинаются проблемы.

person Community    schedule 14.07.2010

Комментарий следует писать перед кодом или перед функцией, чтобы в следующий раз, взглянув на функцию, он мог сразу понять, для чего был этот код.
Со мной много раз случалось, что я пишу код, а затем забыл цель этого. поэтому я привык писать комментарии перед кодом.

person Community    schedule 13.07.2010

Я бы хотел увидеть в комментариях объяснение, почему метод, который очевиден и намного проще, чем метод, используемый в коде, не работает.

person Community    schedule 13.07.2010