Most active commenters

    ←back to thread

    873 points belter | 18 comments | | HN request time: 1.15s | source | bottom
    Show context
    GuB-42 ◴[] No.42948407[source]
    Just personal opinions, I guess, I agree with most, but here are some I disagree with:

    - There is no pride in managing or understanding complexity

    Complexity exists, you can't make it go away, managing it and understanding it is the only thing you can do. Simple systems only displace complexity.

    - Java is a great language because it's boring

    That is if you write Java the boring way. A lot of Java code (looking at you Spring) is everything but boring, and it is not fun either.

    - Most programming should be done long before a single line of code is written

    I went the opposite extreme. That is, if you are not writing code, you are not programming. If you are not writing code on your first day your are wasting time. It is a personal opinion, but the idea is that without doing something concrete, i.e. writing code, it is too easy to lose track of the reality, the reality being that in the end, you will have a program that runs on a machine. It doesn't mean you will have to keep that code.

    - Formal modeling and analysis is an essential skill set

    Maybe that explains our difference with regard to the last point. Given the opportunity, I prefer try stuff rather than formalize. It is not that formal modeling is useless, it is just less essential to me than experimentation. To quote Don Knuth out of context: "Beware of bugs in the above code; I have only proved it correct, not tried it." ;)

    - You literally cannot add too many comments to test code (I challenge anyone to try)

    time++; // increment time

    replies(5): >>42948448 #>>42949655 #>>42949715 #>>42951149 #>>42963604 #
    1. do_not_redeem ◴[] No.42949655[source]
    > time++; // increment time

    This isn't too many comments, it's a poor quality comment. Try:

    time++; // advance 1 simulated second

    replies(2): >>42949812 #>>42958980 #
    2. bluGill ◴[] No.42949812[source]
    What is wrong with

       time++;
    
    That seem obvious enough to me without any comments.
    replies(4): >>42950683 #>>42950807 #>>42956919 #>>42963696 #
    3. smallerfish ◴[] No.42950683[source]
    Is it ms? seconds? days? weeks? months? How far up do I have to read to figure that out?

    When I'm looking at a test case is broken, I ideally want context IN the actual test that lets me understand what the test author was thinking when they wrote it. Why does this test exist as it does? Why are the expectations that are in place valid? Write the comments for you-in-2-years.

    replies(4): >>42951256 #>>42951334 #>>42952723 #>>42960176 #
    4. m-zuber ◴[] No.42950807[source]
    That code (in isolation) does not tell me what unit time is though
    5. bluGill ◴[] No.42951256{3}[source]
    Do you not know the conventions of your project? Doesn't your project have a convention that all time is in ms (second, weeks...)?

    If your project doesn't have that convention such that everyone knows than the code should be

    timeMs++;

    You may also have a time type and so you can use your IDE to examine the type.

    replies(2): >>42956357 #>>42956741 #
    6. danjl ◴[] No.42951334{3}[source]
    I would prefer `somethingSec`, where "something" indicates the usage better than "time". E.g. `delaySec` or `elapsedSec`.
    replies(1): >>42960504 #
    7. vunderba ◴[] No.42952723{3}[source]
    Pedantic but a comment clarifying the unit of measurement belongs with the declaration of the variable, not an increment statement.
    replies(1): >>42962621 #
    8. rovolo ◴[] No.42956357{4}[source]
    I agree that the time unit should be in the variable name. The code itself should do a good job of explaining "what" is happening, but you generally need comments to explain "why" this code exists. Why is the test advancing the time, and why are we advancing the time at this line of the test?

        networkTimeMs++; // Callback occurs after timeout
    
        timeSec++; // Advance time to check whether dependent properties update
    
        utcTime++; // Leap second, DON'T advance ntpTime
    replies(1): >>42956777 #
    9. stickfigure ◴[] No.42956741{4}[source]
    > Do you not know the conventions of your project?

    I just started yesterday! No, I don't.

    10. stickfigure ◴[] No.42956777{5}[source]
    > I agree that the time unit should be in the variable name

    Also a terrible solution!

    The code suffers from primitive obsession. Unless you're in a code section that is known to have performance issues, use real types.

        time = time.plusMilliseconds(1);
    replies(1): >>42962556 #
    11. johnnyanmac ◴[] No.42956919[source]
    It will vary immensely on how readable the actual code base it, but what comes to mind:

    1. what units? I was just caught in this with a function with a timeout. I had to look at the docs to find out this was actually in nanoseconds (stuff like this is why I came more around to verbose parameter names).

    2. what's the function of the timer?

    3. (potential code smell) Do I need to manually increment such a timer for the test? is the time library a necessary part of the test (or perhaps what we testing)?

    12. steve_adams_86 ◴[] No.42958980[source]
    Like many comments, I find we can eliminate it without losing anything by using better variable names.

       seconds++;
    
    That gets the idea across very clearly to me and has the benefit of (likely) making the rest of the code clearer too
    replies(1): >>42966525 #
    13. kelnos ◴[] No.42960176{3}[source]
    That just means the variable isn't named correctly, not that it needs a comment. Just name it 'time_seconds" or whatever and save yourself the extraneous typing.

    I tend to be a minimalist when writing comments. If I have to write out a comment to describe what I'm doing (like "advance 1 simulated second"), then I have failed at writing clear code. Sometimes I will write a comment to explain why I am doing something, if it's not clear (like "manually advance time to work around frobbing bug in foobar").

    Comments add to your maintenance burden. Writing clearer code can often reduce that burden.

    14. creamyhorror ◴[] No.42960504{4}[source]
    Same here - unit-specifying variable names like "delaySecs" and "amountBaseCcy" (where any possibility of ambiguity exists) are exactly what I enforce on our projects (when types aren't providing the guarantee). It makes avoiding and detecting mistakes easier, because you can immediately see where logic has gone wrong.
    15. tialaramex ◴[] No.42962556{6}[source]
    In a performance language your "real types" aren't somehow more expensive and so you should only use the built-in primitives when they accurately reflect your intent. So I would write:

    time += Duration::from_millis(1);

    But I would expect that "time unit should be in the variable name" is a reasonable choice in a language which doesn't have this affordance, and I needn't care about performance because apparently the language doesn't either.

    I also wonder why we've named this variable "time". Maybe we're a very abstract piece of software and so we know nothing more specific? I would prefer to name it e.g. "timeout" or "flight" or "exam_finishes" if we know why we care about this.

    16. tialaramex ◴[] No.42962621{4}[source]
    The problem, in this case, is that the correct size of the increment involves the unit of measurement. If we change the unit of measurement and go update your comment on the declaration of the variable, now everywhere which uses the variable is wrong.

        int time; // in seconds
        /* thousands of lines away or in another file */
        time += 1;
    
    Later we change the time to be in milliseconds. We update the comment on the declaration, but now that code is wrong and we have no reason to know that.

    That's a bad choice, languages should do better (and some do - where they do, use the better features and this problem vanishes) but when it's forced upon us it makes sense to either put the unit in the name of the variable or ensure comments about changes to the variable explain the units consistently, even though that's lots of work. This extra work was dumped on you by the language.

    17. Daishiman ◴[] No.42963696[source]
    Advance a frame, a second, or a millisecond?
    18. sethammons ◴[] No.42966525[source]
    and the variable will invariably store milliseconds because someone didn't read the docs on timelib.Now() or store an int as a counter for makeshift vector clock :p

    types for the win