Slashdot Mirror


Comments are More Important than Code

CowboyRobot writes "I was going through some code from 2002, frustrated at the lack of comments, cursing the moron who put this spaghetti together, only to realize later that I was the moron who had written it. An essay titled Comments Are More Important Than Code goes through the arguments that seem obvious only in hindsight - that 'self-documenting' code is good but not enough, that we should be able to write code based on good documentation, not the other way around, and that the thing that separates human-written code from computer-generated code is that our stuff is readable to future programmers. But I go through this argument with my colleagues, who say that using short, descriptive variable names 'should' be enough as long as the code is well-organized. Who's right?"

13 of 1,021 comments (clear)

  1. Even more annoying... by Anonymous Coward · · Score: 5, Funny

    I used to grade student's code as a TA at my university, and I'll tell you what is more annoying than NO comments, this:

    printf("Encrypt message..."); /* print "Encrypt message..." to the console */

    and then followed by about 150 lines of uncommented spaghetti code

    1. Re:Even more annoying... by coaxial · · Score: 5, Funny

      I came across that with a grad student at my univ. I told him that I couldn't read his code because it wasn't indented. He said, "I was going to back and do that later." WTF? I thought that was going to be the Quote of The Day, but it turned out he wasn't done yet. I started indenting every line as I walked through a function. Seeing this, he inquired, "How are you moving those lines over?" My answer? "Tab."

      Shocking.

    2. Re:Even more annoying... by Gilk180 · · Score: 5, Funny

      An emacs post replying to an Eclipse post and you choose to point out how bloated emacs is?

    3. Re:Even more annoying... by el-spectre · · Score: 5, Funny

      As a freshman I had a professor who kept giving me shit about not having enough comments, so my next program looked something like this: ...
      a=5; //assign integer variable 'a' a value of 5
      b=2; //assign integer variable 'b' a value of 2
      print(a+b); //print to the console the sum of integer variable 'a' and integer variable 'b' ...

      and so on, for about 200 lines. Worthless commenting? Sure, and childish too... but it was amusing and I never got docked for insufficient commenting again :)

      --
      "Faith: Belief without evidence in what is told by one who speaks without knowledge, of things without parallel." - A.B.
    4. Re:Even more annoying... by geminidomino · · Score: 5, Funny

      So tell us, since you have an inside view:

      When is Longhorn actually coming out?

  2. Comments more important? by Rollie+Hawk · · Score: 5, Funny

    Has he read the ones here?

    --
    Before any liberals are tempted to mod up one of my comments, a word of warning: I'm actually making fun of you.
  3. Nah by Anonymous Coward · · Score: 5, Funny

    Variable names should be proportional to the size of their scope within the code.

  4. Uhh... by PrimeWaveZ · · Score: 5, Funny

    UsngShrtCmtsIsOftNotEnghAsOneMyNdToReWrtShtInTheFt r.

  5. Indeed by screwballicus · · Score: 5, Funny
    I was recently reading through some code I wrote ages ago and hadn't looked at in years, and wondering...dear god, what's this confused mess trying to do?

    Imagine my relief when I came upon a helpful comment:

    What the hell was I thinking when I wrote this?

    All it took was one comment to put my mind to rest: no, it's not just me being stupid in the present. This code seemed this terrible back then, too.

    Comments save the day once again.
  6. Re:Gotta document that code... by spammacus · · Score: 5, Funny

    All generalisms are wrong.

    Isn't that a paradox? :)

  7. Re:What do you guys think of the following code? by natrius · · Score: 5, Funny

    Please don't post my code on Slashdot.

    Come see me in my office.

    - Your Supervisor

  8. here's some Pretty Evil Shit - Re:Even more annoyi by Fubari · · Score: 5, Funny
    Here is an example of some Pretty Evil Shit:
    I want to laugh when I read it.
    Some of it is funny.
    Some of it is just scary.
    The human mind can be a freakishly messed up thing.
    http://mindprod.com/unmaindocumentation.html
    It is part of a larger essay about writting crappy code.
    Anybody that even comes close to software development
    should check it out.

    --- begin excerpts ---
    Avoid Documenting the "Obvious" : : If, for example, you were
    writing an airline reservation system, make sure there are at
    least 25 places in the code that need to be modified if you were
    to add another airline. Never document where they are. People who
    come after you have no business modifying your code without
    thoroughly understanding every line of it.

    Units of Measure : : Never document the units of measure of any
    variable, input, output or parameter. e.g. feet, metres, cartons.
    This is not so important in bean counting, but it is very important
    in engineering work.

    As a corollary, never document the units of measure of any conversion
    constants, or how the values were derived.

    It is mild cheating, but very effective, to salt the code with some
    incorrect units of measure in the comments.

    If you are feeling particularly malicious, make up your own unit of
    measure; name it after yourself or some obscure person and never
    define it. If somebody challenges you, tell them you did so that
    you could use integer rather than floating point arithmetic.

    On the Proper Use of Design Documents : : When implementing a very
    complicated algorithm, use the classic software engineering principles
    of doing a sound design before beginning coding. Write an extremely
    detailed design document that describes each step in a very complicated
    algorithm. The more detailed this document is, the better.

    In fact, the design doc should break the algorithm down into a hierarchy
    of structured steps, described in a hierarchy of auto-numbered individual
    paragraphs in the document. Use headings at least 5 deep. Make sure that
    when you are done, you have broken the structure down so completely that
    there are over 500 such auto-numbered paragraphs.

    For example, one paragraph might be: (this is a real example)
    1.2.4.6.3.13 - Display all impacts for activity where selected
    mitigations can apply (short pseudocode omitted).
    then... (and this is the kicker) when you write the code, for each of these paragraphs
    you write a corresponding global function named:
    Act1_2_4_6_3_13()
    Do not document these functions. After all, that's what the
    design document is for!

    Since the design doc is auto-numbered, it will be extremely difficult
    to keep it up to date with changes in the code (because the function
    names, of course, are static, not auto-numbered.) This isn't a problem
    for you because you will not try to keep the document up to date.
    In fact, do everything you can to destroy all traces of the document.

    Those who come after you should only be able to find one or two
    contradictory, early drafts of the design document hidden on some
    dusty shelving in the back room near the dead 286 computers.
    --- end excerpts ---
  9. Re:Top Ten Code Comment Do's List by Wavicle · · Score: 5, Funny
    * Oh man... I'm so tired of typing these numbers!

    You should have written a function to generate the list of numbers for you:

    /*
    * Function: num_list
    * Purpose: Returns a list of positive integers greater than one
    * Input: x, the largest positive integer in the list.
    * Possible return values: "2", "2, 3", "2, 3, 4", "2, 3, 4, 5", "2, 3, 4, 5, 6", "2, 3, 4, 5, 7", "2, 3, 4, 5, 6, 7, 8", "2, 3, 4, 5, 6, 7, 8, 9", "2, 3, 4, 5, 6, 7, 8, 9, 10", "2, 3, 4, 5, 6, 7, 8, 9, 10, 11", "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12", "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14", "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15", "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16", "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17", "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18", "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19", "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20",

    * Hmmm, I think I need a new function to generate the comment for this function...
    */
    --
    Education is a better safeguard of liberty than a standing army.
    Edward Everett (1794 - 1865)