The "shut up and get back to work" coding style guide

Published 2019-04-29 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 follow around the net

Announcing The New Go Store

We are excited to launch the new Go official swag and merch store shipping worldwide. We are even more excited to announce that 100% of the proceeds from the Go store go directly to GoBridge. GoBridge is a non-profit organization focused on building bridges…

via The Go Programming Language Blog July 18, 2019

Deconstruct files

This is a psuedo-transcript for a talk given at Deconstruct 2019. To make this accessible for people on slow connections as well as people using screen readers, the slides have been replaced by in-line text (the talk has ~120 slides; at an average of 20 k…

via Dan Luu July 12, 2019

Updates in June 2019

This post gives an overview of the recent updates to the Writing an OS in Rust blog and the used libraries and tools. My focus this month was to finish the Heap Allocation post, on which I had been working since March. I originally wanted to include a sect…

via Writing an OS in Rust July 6, 2019

Generated by openring