Если вы используете что-то вроде Doxygen , вы можете полностью документировать ваши возвращаемые типы, аргументы и т. Д. И генерировать хорошее "руководство по исходному коду". Я часто делаю это для клиентов, чтобы команда, которая наследует мой код, не была полностью потеряна (или не была вынуждена просматривать каждый заголовок).
Блоки документации часто перестараются, особенно это касается строго типизированных языков. Гораздо разумнее быть многословным с чем-то вроде Python или PHP, чем с C ++ или Java. Тем не менее, это все еще хорошо сделать для методов и членов, которые не говорят сами за себя (например, не с именем update).
Я сэкономил много часов на размышления, просто комментируя то, что я хотел бы сказать себе, если бы я читал свой код в первый раз. Больше повествования и меньше наблюдений. Комментарии должны помогать не только другим, но и себе ... особенно, если вы не трогали его в течение пяти лет. У меня есть десятилетний Perl, который я написал, и я до сих пор не знаю, чем он занимается.
Что-то очень грязное, что я сделал в PHP и Python, - это использование отражения для извлечения блоков комментариев и элементов меток в пользовательском интерфейсе. Это случай использования, хотя и неприятный.
Если вы используете трекер ошибок, я также сбрасываю идентификатор ошибки рядом со своими изменениями, чтобы у меня была ссылка на трекер. Это в дополнение к краткому описанию изменения (встроенные журналы изменений).
Я также нарушаю правило «только комментарий, почему не что», когда я делаю то, что мои коллеги редко видят ... или когда важна тонкость. Например:
for (int i = 50; i--; ) cout << i; // looping from 49..0 in reverse
for (int i = 50; --i; ) cout << i; // looping from 49..1 in reverse