this post was submitted on 28 Sep 2024
1162 points (99.0% liked)

Programmer Humor

32483 readers
255 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
top 50 comments
sorted by: hot top controversial new old
[–] essteeyou 126 points 1 month ago* (last edited 1 month ago) (2 children)
/**
 * Gets the user
 **/
fun getUser() {
    return this.user;
}
[–] [email protected] 33 points 1 month ago (1 children)

I'm sorry, I don't think I understand what's happening here…

[–] essteeyou 28 points 1 month ago (1 children)

Let me find the sequence diagram...

[–] jaybone 12 points 1 month ago (1 children)

You need the requirements doc from marketing. Then it will all totally make sense for sure. No cap.

load more comments (1 replies)
[–] [email protected] 8 points 1 month ago* (last edited 1 month ago) (5 children)

Okay now I get the joke.
I hate these kind of people.

By the way, your ``` both need to be on their own, separate line

load more comments (5 replies)
[–] [email protected] 81 points 1 month ago (1 children)

My comments are just the code that didn't work but I don't want to delete yet because I might make it work except I never will be cause I already rewrote it so it does.

[–] [email protected] 20 points 1 month ago (1 children)
[–] jaybone 7 points 1 month ago (1 children)
load more comments (1 replies)
[–] [email protected] 51 points 1 month ago* (last edited 1 month ago) (7 children)

Hey thanks for reminding me I made a clock squared in blender about 2 years ago

yes there is an error in the image, and no I'm not telling you where it is

[–] [email protected] 44 points 1 month ago

at 6 it says 12:30

[–] [email protected] 12 points 1 month ago (1 children)

1 o'clock and 10 o'clock are the the wrong angles.

[–] [email protected] 5 points 1 month ago (1 children)

You mean they're slightly off? Like 7:00?

[–] [email protected] 4 points 1 month ago

Yup, like 7 PM.

[–] cmhe 5 points 1 month ago (1 children)

An interesting concept would be if all hand on the 12 clocks would work, but the hands of the clock in the middle are stuck at 12 position, this way the hands in the middle would point to the clock showing the correct time.

load more comments (1 replies)
load more comments (4 replies)
[–] [email protected] 32 points 1 month ago

I know I’m probably doing it wrong but this is how I feel whenever I write unit tests

[–] [email protected] 21 points 1 month ago* (last edited 1 month ago) (12 children)

Asking as a newbie programmer: how do you suggest we write comments that explain the 'why' part of the code? I understand writing comments explaining the 'what' part makes them redundant, but I feel like writing it the former way isn't adding much help either. I mean, if I created code for a clock, is writing "It helps tell what time it is" better than writing "It is a clock" ?

It would really help if someone could give a code snippet that clearly demonstrates how commenting the 'correct' way is clearly better than the way we are used to.

[–] [email protected] 19 points 1 month ago* (last edited 1 month ago)

I recognize three kinds of comments that have different purposes.

The first kind are doc block comments. These are the ones that appear above functions, classes, class properties, methods. They usually have a distinct syntax with tags, like:

/*
 * A one-line description of this function's job.
 *
 * Extra details that get more specific about how to use this function correctly, if needed.
 *
 * @param {Type} param1
 * @param {Type} param2
 * returns {Type}
 */
function aFunctionThatDoesAThing(param1, param2) {
    // ...
}

The primary thing this is used for is automatic documentation generators. You run a program that scans your codebase, looks for these special comments, and automatically builds a set of documentation that you could, say, publish directly to a website. IDEs can also use them for tooltip popups. Generally, you want to write these like the reader won't have the actual code to read. Because they might not!

The second kind is standalone comments. They take up one or more lines all to themselves. I look at these like warning signs. When there's something about the upcoming chunk of code that doesn't tell the whole story obviously by itself. Perhaps something like:

/* The following code is written in a weird way on purpose.
I tried doing <obvious way>, but it causes a weird bug.
Please do not refactor it, it will break. */

Sometimes it's tempting to use a standalone comment to explain what dense, hard-to-read code is doing. But ideally, you'd want to shunt it off to a function named what it does instead, with a descriptive doc comment if you can't cram it all into a short name. Alternatively, rewrite the code to be less confusing. If you literally need the chunk of code to be in its confusing form, because a less confusing way doesn't exist or doesn't work, then this kind of comment explaining why is warranted.

The last kind are inline comments. More or less the same use case as above, the only difference being they appear on the same line as code, usually at the very end of the line:

dozen = 12 + 1; // one extra for the baker!

In my opinion, these comments have the least reason to exist. Needing one tends to be a signal of a code smell, where the real answer is just rewriting the code to be clearer. They're also a bit harder to spot, being shoved at the ends of lines. Especially true if you don't enforce maximum line length rules in your codebase. But that's mostly personal preference.

There's technically a fourth kind of comment: commented-out code. Where you select a chunk of code and convert it to a comment to "soft-delete" it, just in case you may want it later. I highly recommend against this. This is what version control software like Git is for. If you need it again, just roll back to it. Don't leave it to rot in your codebase taking up space in your editor and being an eyesore.

[–] [email protected] 14 points 1 month ago* (last edited 1 month ago)

"tells the user the current time" would be an excellent comment for a clock

I'm not the best at commenting my code, but generally I just try to think of what information I'd want to know if looking at this 10 years from now

Imo comments are best used sparingly, don't bother commenting something that anyone with a basic understanding of programming would understand straight away by reading the code

Functions should generally be commented with what parameters are and what they're for, plus what they output

use reqwest::Client;

// create a http client class that all other files can import 
// so as to only create one instance globally 

pub struct HttpClient {
    client: Client,

}
impl HttpClient {
        pub fn new() -> Self {
            HttpClient {
                client: Client::new(),
            }
        }

        pub fn client(&self) -> &Client {
            &self.client

        }

}

Here's an example where if I were to stumble onto this file 10 years from now, I might think wtf is this looking at it out of context, the comment explains why it exists and what it's used for

(we'll ignore the fact I totally didn't just add this comment because I suck at commenting personal projects)

[–] [email protected] 11 points 1 month ago

Write comments that explain why the code isn't obvious just by reading it. Why did you do things the long way? What did you need to work around? Why didn't you do the thing that anyone reading the code would expect you to do?

Also write comments that explain the purpose of the functions you use, in case the names of those functions don't make it clear on their own.

[–] [email protected] 10 points 1 month ago

the "what" is interesting on interfaces or when you generate documentation with some tool like sphinx or javadoc.

the "why" is interesting when you are somewhere inside a class or function and do something in a "strange" way, to work around a quirk in the codebase or something like that, or when you employ optimizations that make the code harder to read or atleast less obvious why somethings are done.

[–] marlowe221 8 points 1 month ago (3 children)

“Why” comments make more sense as application complexity grows.

You also have to consider interaction of the code with other external systems - sometimes external APIs force you to write code in ways you might not otherwise and it’s good to leave a trail for others on your team (and your future self…) about what was going on there.

[–] something_random_tho 5 points 1 month ago

100%. I also like to leave comments on bug fixes. Generally the more difficult the fix was to find, the longer the comment. On a couple gnarly ones we have multiple paragraphs of explanation for a single line of code.

load more comments (2 replies)
[–] [email protected] 6 points 1 month ago (1 children)

Not everything needs a comment - knowing when comments add value is the key... "what" vs "why" is usually a good indicator but some code just doesn't need a comment.

load more comments (1 replies)
[–] MotoAsh 5 points 1 month ago* (last edited 1 month ago)

IMO, the most important parts are to document the actual intent of the code. The contract of what is being documented. Sure, it's only so useful in perfectly written code, but NO code is perfect, and few will come through later with full context already learned.

It makes it sooo mich easier to know what is intended behavior and what is an unchecked edge case or an unexpected problem. If it's a complicated thing with a lot of fallout, good documentation can save hours of manually lining up consequences and checking through them for sanity.

You might say, "but that's indication of bad code!". No. Not really. Consequences easily extend past immediate code doing things as trivial as saving data to the database without filtering, or having a publicly available service. Even perfectly coded things come up with vulnerabilities all the time due to underlying security issues. It's always great to have an immediate confirmation of what's supposed to happen whether it's immediate code or some library with a new quirk in a new version.

[–] [email protected] 4 points 1 month ago

My comment game has gotten far better since I started doing live code reviews. Essentially I ask myself, “Would I feel the need to explain this to someone during a code review?” and if the answer is yes I add a comment.

[–] Presi300 4 points 1 month ago

What I usually do is I explain what the function does and, if not self explanatory, explain why it does such thing. Like, with the clock example, I'd explain that it tells the time and then, if not immediately obvious, explain why the time needs to be known... Smth like that.

There is no "correct" way of commenting code. I personally think the more verbose, the better, but that's an unpopular opinion afaik. As long as the code can be understood, the comment is doing it's job.

PS, I'm also kinda new to programming, mostly doing JS and React stuff

spoilerI love putting memes in comments :P

[–] [email protected] 3 points 1 month ago* (last edited 1 month ago) (6 children)

Making up an example on the spot is kinda difficult for me, but I'd look at it this way with a bold statement, you should hope that most code won't need comments. Let's exclude documentation blocks that are super ok to be redundant as they should give a nice, consistent, human readable definition of what x thing does (function, constant, enum, etc.) and maybe even how to use it if it's non-intuitive or there are some quirks with it.
After that, you delve in the actual meat of the code, there are ways to make it more self explanatory like extracting blocks of stuff into functions, even when you don't think it'll be used again, to be used with care though, as not to make a million useless functions, better is to structure your code so that an API is put into place, enabling you to write code that naturally comes out high level enough to be understood just by reading, this thing is very difficult for me to pinpoint though, because we think of high level code as abstractions, something that turns the code you write from describing the what rather than the how, but really, it's a matter of scope, a print statement is high level if the task is to print, but if the task is to render a terminal interface then the print becomes low level, opposite is also true, if you go down and your task is to put a character onto stdout, then the assembly code you'd write might be high level. What I mean to say is that, once you have defined the scope, then you can decide what level of knowledge to expect of the reader when looking at your code, from there, if some process feels fairly convoluted, but it doesn't make sense to build an abstraction over it, then it is a good place to put a comment explaining why you did that, and, if it's not really clear, even what that whole block does

load more comments (6 replies)
load more comments (2 replies)
[–] [email protected] 19 points 1 month ago (1 children)

Self-explainable, when you aren't writing spaghetti Perl scripts.

[–] [email protected] 16 points 1 month ago* (last edited 1 month ago)

//forgive my sins, it took me 2 hours to nail down this arcane spell. if anyone touches this they will know my wrath
=(/&)((//((%=)(&)%)(&()

[–] [email protected] 19 points 1 month ago* (last edited 1 month ago) (2 children)

Checked one of mine:

# get path to the download directory

Oh, ok.

[–] [email protected] 21 points 1 month ago

The code directly below:

function getPathToUploadDirectory() {
  return config.tmp_path
}
load more comments (1 replies)
[–] [email protected] 13 points 1 month ago (1 children)

I like to include profanity in all my comments for spiciness.

[–] [email protected] 10 points 1 month ago (1 children)

"I don't know why, but if you remove this comment it fucks up everything."

I saw this comment in a piece of code once; I left it there as not to tempt the fates.

load more comments (1 replies)
[–] [email protected] 10 points 1 month ago

Made a comment

[–] [email protected] 7 points 1 month ago (3 children)

I know some folks are joking about and dunking on this, but in modern times, I have justification. Call me lazy, but I have found myself writing out these comments and then letting the AI take over to at least give me a sketch of an implementation. Works reasonably well and saves me a lot of time and effort. Mostly I don't bother to remove them, though I usually edit them a bit.

On the other hand, there are factions within my colleagues who steadfastly insist that commenting is unnecessary and to some degree even potentially harmful, and that if you feel the need to comment your code, it means your code should be improved so that it's obvious what it is doing without the need for comments.

[–] theherk 13 points 1 month ago (2 children)

And your colleagues are probably correct with respect to this sort of «what it does» commenting. That can be counterproductive because if the code changes and the comment isn’t updated accordingly, it can be ambiguous. Better have the code be the singular source of truth. However, «why it does it» comments are another story and usually accepted by most as helpful.

[–] ChickenLadyLovesLife 6 points 1 month ago* (last edited 1 month ago) (1 children)

if the code changes and the comment isn’t updated accordingly, it can be ambiguous.

People always cite this as a reason comments are bad. In 30+ years as a developer I have seen (and participated in) a lot of failed software projects, but not once has a mismatch between comments and code been the actual cause of the failure. Moreover, the same logic could be applied to the names of methods and variables ("if the code changes and the method and variable names aren’t updated accordingly, it can be ambiguous") but nobody ever suggests getting rid of that. At the end of the day, comments are useful for imparting information about the code to future developers (or yourself) that is too complicated to be adequately communicated by a method name.

[–] theherk 6 points 1 month ago

I didn’t say the source of failure. I said a source of ambiguity. And having also been in the industry for decades, I have encountered it many times, where a junior programmer or somebody new to a project read some documentation and assumed a behavior which in fact did not match the current implementation. So you may have been fortunate, but your experience is certainly not ubiquitous.

With respect to variable names, I’d suggest those too should absolutely be updated too if the name is given in a way that adds ambiguity.

I’m not saying comments are bad; rather that bad comments are bad, and sometimes worse than no comment.

[–] [email protected] 5 points 1 month ago* (last edited 1 month ago)

I'll add that you should have a comment anytime you are using some sort of algorithm to explain what it is and the expected result when it's not intuitive or a complex math operation that isn't immediately clear. Ex// I'm using Newton's Method to approximate a solution to speed up the inverse square root

[–] Benjaben 5 points 1 month ago (2 children)

Would you mind sharing a bit more about the workflow you're describing? I'm on a "ask people how they're using AI to help them dev" kick.

Sounds like you're using an agent integrated with your IDE, would you be willing to give specifics? And you're talking about writing some comments that describe some code you haven't yet written, letting the AI take a stab at writing the code based on your comments, and then working from there? Did I get that right?

Happy for literally any elaboration you feel like giving :)

load more comments (2 replies)
[–] [email protected] 4 points 1 month ago* (last edited 1 month ago)

At least docblocking a summary above every method is always good. You can automatically generate documentation this way.

[–] [email protected] 7 points 1 month ago (3 children)

basically how it feel when a professor requires u comment every single line of code u write to explain it. I know people tend to drop out of real engineering to do programing but an entire 4 years of this bullshit as opposed to just a couple classes sounds way worse than calc 3 or differential equations.

load more comments (3 replies)
[–] TootSweet 7 points 1 month ago

We have to go deeper.

[–] [email protected] 6 points 1 month ago (1 children)

A true Klingon never uses comments.

[–] marlowe221 6 points 1 month ago

Glory to you and your house!

[–] iAvicenna 4 points 1 month ago (1 children)

the church of uncle bob would like to speak to you about the sins of commenting.

load more comments (1 replies)
load more comments
view more: next ›