The "shut up and get back to work" coding style guide April 29, 2019 on Drew DeVault's blog

So you’re starting a new website, and you open the first CSS file. What style do you use? Well, you hate indenting with spaces passionately. You know tabs are right because they’re literally made for this, and they’re only one byte, and these god damn spaces people with their bloody spacebars…

Shut up and use spaces. That’s how CSS is written1. And you, mister web programmer, coming out of your shell and dipping your toes into the world of Real Programming, writing your first Golang program: use tabs, jerk. There’s only one principle that matters in coding style: don’t rock the boat. Just do whatever the most common thing is in the language you’re working in. Write your commit messages the same way as everyone else, too. Then shut up and get back to work. This hill isn’t worth dying on.

If you’re working on someone else’s project, this goes double. Don’t get snippy about their coding style. Just follow their style guide, and if there isn’t one, just make your code look like the code around it. It’s none of your goddamn business how they choose to style their code.

Shut up and get back to work.

Ranting aside, seriously - which style guide you use doesn’t matter nearly as much as using one. Just pick the one which is most popular or which is already in use by your peers and roll with it.

…though since I’m talking about style anyway, take a look at this:

struct wlr_surface *wlr_surface_surface_at(struct wlr_surface *surface,
                                           double sx, double sy,
                                           double *sub_x, double *sub_y) {
    // Do stuff
}

There’s a lot of stupid crap which ends up in style guides, but this is by far the worst. Look at all that wasted whitespace! There’s no room to write your parameters on the right, and you end up with 3 lines where you could have two. And you have to mix spaces and tabs! God dammit! This is how you should do it:

struct wlr_surface *wlr_surface_surface_at(struct wlr_surface *surface,
        double sx, double sy, double *sub_x, double *sub_y) {
    // Do stuff
}

Note the extra indent to distinguish the parameters from the body and the missing garish hellscape of whitespace. If you do this in your codebase, I’m not going to argue with you about it, but I am going to have to talk to my therapist about it.


  1. For the record, tabs are objectively better. Does that mean I’m going to write my JavaScript with tabs? Hell no! ↩︎

Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to ~sircmpwn/public-inbox@lists.sr.ht [mailing list etiquette]

Articles from blogs I read Generated by openring

Command PATH security in Go

Today’s Go security release fixes an issue involving PATH lookups in untrusted directories that can lead to remote execution during the go get command. We expect people to have questions about what exactly this means and whether they might h…

via The Go Programming Language Blog January 19, 2021

Status update, January 2021

Hi all! This month again, my main focus has been wlroots. I’ve focused on the internal renderer refactoring (the so-called “renderer v6"). A lot of the work has now been completed, and all backends now use the new interfaces under-the-hood. With the help …

via emersion January 18, 2021

What's cooking on Sourcehut? January 2021

Another year begins, and hopefully with better prospects for us all. SourceHut has emerged from 2020 relatively unscathed, thankfully, and I hope the same is true of most of our users. A body which, by the way, today numbers 19,647 strong, up 623 from Decemb…

via Blogs on Sourcehut January 15, 2021