Don't get me wrong. I'm not saying "Don't write
documentation." Nobody really doing XP will say that. Sometimes it
is important to the customer to have specific documentation
written. Also, I'm not saying "Never write comments." What I am
saying is "Never write unnecessary comments." Most comments are
unnecessary if the code is written so that the intent is clear. If
and when we do write comments, we need to make sure they
communicate why and not how.
Incomplete
code This type of comment serves as a note to what we were
in the midst of working on, or how we see the code evolving. There
generally is not much need for this type of comment, since tasks
should be no larger than what can be accomplished in a single day.
If you find that you do need to make such a note, choose a standard
tag for it so you can quickly search for loose ends. And stay away
from generic not done yet comments. I'd suggest something
like:
// TODO: The tree should be balanced after doing the insertion.
A valid use for this type of comment might be to
note code that could benefit from being refactored. Maybe we saw
the need to refactor but didn't have time to do it. Make a note so
that someone will spot it and do the refactoring when there is
time. It might be prudent to use standard wording for these
"refactoring To Do" comments so that a global search can be
performed as a rough code-debt metric. I suggest something similar
to the following:
// CODE DEBT: the looping structure is a bit convoluted, could use
// some method extraction.
Refactoring doesn't
make it clear enough This isn't really a valid comment,
rather it is more like the previous type. . . it's an IOU. If
refactoring doesn't clean up the code, either someone else should
try their hand at it, or (more likely) the code in question should
be scrapped and rewritten.
// NEEDS WORK: I tried extract method, but it's still awkward.
// Maybe refactoring to a Strategy would clean it up?
Use of an unusual
algorithm If we use an uncommon algorithm for some reason,
we should make a note of it with a comment. Point the reader to
where they can learn more. Don't try to document
the algorithm in a huge comment. Just note what algorithm it is,
why it was used, and where to find more information.
// I used an AVL Tree algorithm here to keep the tree balanced.
Use of a published
algorithm If we use an algorithm that is published
somewhere, we should add a comment saying where and giving credit
to the author. This type of comment is often used with the previous
type.
// This AVL alorithm was based on Brad Appleton's implementation at
// http://www.enteract.com/~bradapp/ftp/src/libs/C++/AvlTrees.html
Performance
tuning This is important. If we tune for performance, we
should add a comment explaining it. At the very least we need to
add a note saying that the method in question has been tuned. If we
tune without adding such a note we may find that someone later
refactors to make the code clearer, undoing the optimization in the
process. Keep in mind that we generally shouldn't be performance
tuning until late in the project, once performance has been
measured and actual bottlenecks have been found.
// A circular queue is used here for performance reasons: to avoid
// having to move elements around.
Class comment
This is the one case that is often useful, in spite of the general
disapproval of comments. Not much is required. A simple note at the
beginning of the class briefly explaining why the class exists and
what it is used for will suffice. Avoid writing a how to use this class tutorial. That's
one of the things the tests are for.
/**
* This class represents a single movie title. It is responsible for
* maintaining its own ratings, reviews, etc.
*/
A final note related to comments. Programmers
often sign their work by including a comment in the file header
noting who wrote it. That's fine; credit where credit is due and
all that, except:
No comments:
Post a Comment