Live data from Hacker News

Comment your damn code

tech.collectedit.com

41–50 of 68 posts

Re: Comment your damn code

#41
post #13

I'm against commenting code, with two exceptions: - You're implementing something complex (like an algorithm) - You're implementing something stupid (typically a workaround for something that could not be done in a more elegant way, and you want to explain why it can't be refactored) If the code is well written it is also self explanatory. This can be done by structuring / formatting the code well, into methods, clas…

I agree with this, but I have to admit I have met many developers who have the same philosophy but can't code simple, readable code in the first place. Given how easy it is for people to overestimate their skill and how well they are building any one piece of software, I just default to writing sensible comments whenever possible.

Re: Comment your damn code

#42
post #12

Note that the following does not count as commenting your damn code: // Get the account holder currency $currency = $accountHolder->getCurrency(); Imagine several 10s of KLOCs where 99% of the comments are as worthless as this and most people are content with their efforts because they believe they are commenting thoroughly.

Two years later:

    // Get the account holder currency
    $security = $counterparty->getSecurity();

Re: Comment your damn code

#43
post #14
post #11

I think Jeff Atwood sums things up nicely: http://www.codinghorror.com/blog/2008/07/coding-without-comm...

Except In my opinion he gets it very wrong. His comment free code doesn't include the the string "Newton-Raphson" anywhere, making it non-trivial for anyone not familiar with the code to work out what is going on. Secondly, and more importantly, he never explains why he is using Newton-Raphson to approximate the square root. If I was handed this in some code I was to maintain I would really really like to know that.

Note the he does say the following: When you've rewritten, refactored, and rearchitected your code a dozen times to make it easy for your fellow developers to read and understand -- when you can't possibly imagine any conceivable way your code could be changed to become more straightforward and obvious -- then, and only then, should you feel compelled to add a comment explaining what your code does.

It does make sense.

Re: Comment your damn code

#44

ok, so i wrote some code yesterday. i didn't write it expecting anyone to read it (i mean, not critically on hn), and it's not as good as i would like, but it has no comments (apart from at the top of the file explaining how to use the program). so, people who are saying "just comment it" - what would make a big difference to this code? https://github.com/andrewcooke/amcl/blob/master/amcl.py

[deleted]

Re: Comment your damn code

#45

ok, so i wrote some code yesterday. i didn't write it expecting anyone to read it (i mean, not critically on hn), and it's not as good as i would like, but it has no comments (apart from at the top of the file explaining how to use the program). so, people who are saying "just comment it" - what would make a big difference to this code? https://github.com/andrewcooke/amcl/blob/master/amcl.py

[deleted]

Re: Comment your damn code

#46

ok, so i wrote some code yesterday. i didn't write it expecting anyone to read it (i mean, not critically on hn), and it's not as good as i would like, but it has no comments (apart from at the top of the file explaining how to use the program). so, people who are saying "just comment it" - what would make a big difference to this code? https://github.com/andrewcooke/amcl/blob/master/amcl.py

First of all, I have written only very little Python in my lifetime.

Second, I thought the code was pretty clear except for the refresh function in the TextLine and BarLine classes. The only other thing that could use a comment was the track_data function to show what the string looks like that is being returned.

Re: Comment your damn code

#47
Every line of code is a liability.

Every comment is also a liability, especially in light of the fact that the comment may, over time, drift away from the code. I sometimes wish I had an IDE that would color nearby comments red (and prevent commits) when code changes.

Which is to say, make comments where necessary, but own the liability, and strive to remove comments you find by making the code more obvious, just as you would strive to remove code to make it simpler.

If you want to record your intent, write a test.

Edit: accidentally a word.

Re: Comment your damn code

#48
This comment leaped out at me:

> what is going on in this icky mess

This is a sign that your code is poor, and comments aren't going to help poor code. When you need to comment to overcome poor code, that's a sign your code needs help, not your comments. Thinking comments are going to solve this is a losing game. If this is the way you think, then you'll continue focusing on propping up poor code with comments.

Comments are inherently dangerous. Not because commenting is bad, but because comments are inaccurate. When you write a comment about a block of code, the comment will never be as precise as the code. You'll write about the intent of the code, but even the intent is unclear. The reason for this is with the language we use to write comments. These comments rely on context of the person writing them. And writing is not easy. Describing a block of code that will determine the longitude and latitude is difficult. Do you describe how it does this, the reason it's doing this? Do you talk about how it accomplishes this? Why you are doing it this way? What's important.

For example, take this bit of advice about "good comments":

> A comment should describe the why or the goal, not the how.

So, a good comment would be as follows:

    // We accept a search string from the user and transform it 
    // into a latitude and longitude from the location service.
    // We do this because the user knows about where they are, but
    // we don't have access to their GPS data at the time, so this
    // is a great way to get local data at some level
So, this explains "Why" we are doing this, "what" we are doing, and the goal. However, nothing here is special to a comment over well written code,

    public Location getLatLongFromUserLocationSearch( String search );
That does far more, and is more accurate, then the original block of text. More importantly, that original block of text is fundamentally flawed: it's blatantly inaccurate. It also encourages laziness. After all, if your poorly written code is resolved by simply adding a comment, instead of tackling the more challenging part of writing quality code, you take the simple way out of adding in a, most likely, poorly written comment.

> Look, there is what you intend and what you write.

This remark is amusing. Between the two, the chance of a comment being wrong is greater than that of the code. The code is at least tested at some level. The comment is not.

> Don't be lazy

This is an article focusing on writing comments well to cover up for confusing code? The assumption here is that it's easier to write comments well. I'm sorry, but if you can't write the code cleanly in the first place, how are you going to effectively write a comment that will clear things up.

> You're a Journeyman

Damn right, and I know that there are far better avenues than writing comments in code to accomplish that. On top of this, the example is absurd, as he's suggesting not limiting what your comment includes to what and how, but also why: "Tell them why you choose to use a Tuple in this case."

> So you type 40 - 60 wpm. So then tell me again why aren't you writing comments while you blaze through your code?

Oh, the travesty. To equate typing speed with quality. And make no mistake, that's what is being done here. Somehow, typing speed is the issue. It's akin to relating line count to performance. Listen, typing speed isn't the issue. It's quality, and quality takes time. Writing quality code is not defined by your typing speed. Neither is writing quality comments. It doesn't take a long time to write quality comments because you lack typing speed, but because writing clear comments is hard work.

> You're going to get old

If you weren't clear that an ego the size of Jupiter was writing this post, this section will slam the point home.

First, let's get this out of the way:

"I've been doing this for a while, probably before you entered middle school."

Your age does not qualify you. Bringing it up again and again only means it's the best qualification you've got. Wisdom isn't about age, though age gives you more opportunities for obtaining wisdom.

As for getting older, there are far better mechanisms for ensuring that you know what the intent of the code is, from both a business sense, and from a code sense.

Honestly, the biggest warning to relying on comments to resolve deficiencies in other areas is this article itself. It's poorly written, confusing, and even contradicts itself.

In the end, it's some of the same tired advice presented in a brash way. This brash method, employing vulgarity and rudeness, fails. "Comment your damn code because I said so and I'm old and that makes me right" is essentially what it amounts to.

I'm harsh, James, because your article is harsh. It preaches writing comments, and does so in poorly written English.

In the end, commenting your code is the worst thing you can do.

Commenting your code well, however, is not. But commenting your code well is a challenge. It's not easy, and should not be seen as trivial.

Well written code takes longer than 30 seconds to write. Well written comments take longer as well. And well written comments in well written code are not added every 3 to 7 lines.

Re: Comment your damn code

#49
post #16

Earlier quoted context omitted.

If a programmer is incapable of doing this: maybeGetFileHandle :: FilePath -> IOLikeMonad (Maybe Handle) Why do you think they are capable of doing this? foo :: FilePath -> IOLikeMonad (Maybe Handle) -- If the file is available and can be read -- return Some handle. Otherwise, return None.

A nice example which expresses the bulk of the issue: Comments are largely there to compensate for the lack of information held in the type system. Adding comments which just reiterate what is said in the function signature is redundant and not worth the time. Of course, this doesn't apply to all comments - but specifically those insane policies where you're required to write a description of every method, argument a…

I wasn't actually trying to make a statement about type systems. To translate my example to python:

    def getFileHandleOrNone(filename, config):
        ...

    def foo(filename, config):
        """get file handle or none, 
           based on context and filesystem"""
You are correct that the type system also provides documentation, but so does giving your methods a name indicating what you want them to do.

Re: Comment your damn code

#50

ok, so i wrote some code yesterday. i didn't write it expecting anyone to read it (i mean, not critically on hn), and it's not as good as i would like, but it has no comments (apart from at the top of the file explaining how to use the program). so, people who are saying "just comment it" - what would make a big difference to this code? https://github.com/andrewcooke/amcl/blob/master/amcl.py

PRESETS could use a brief explanation. Even after reading all of the code I'm not entirely clear on what it's being used for, and there's no hints to its purpose where it first appears.
Post reply on HN