TranslateProject/sources/talk/20230807 Some tactics for writing in public.md

14 KiB
Raw Permalink Blame History

Some tactics for writing in public

Someone recently asked me “how do you deal with writing in public? People on the internet are such assholes!”

Ive often heard the advice “dont read the comments”, but actually Ive learned a huge amount from reading internet comments on my posts from strangers over the years, even if sometimes people are jerks. So I want to explain some tactics I use to try to make the comments on my posts more informative and useful to me, and to try to minimize the number of annoying comments I get.

talk about facts

On here I mostly talk about facts either facts about computers, or stories about my experiences using computers.

For example this post about tcpdump contains some basic facts about how to use tcpdump, as well as an example of how Ive used it in the past.

Talking about facts means I get a lot of fact-based comments like:

  • people sharing their own similar (or different) experiences (“I use tcpdump a lot to look at our RTP sequence numbers”)
  • pointers to other resources (“the documentation from F5 about tcpdump is great”)
  • other interesting related facts I didnt mention (“you can use tcpdump -X too”, “netsh on windows is great”, “you can use sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420' to filter for HTTP GET requests)
  • potential problems or gotchas (“be careful about running tcpdump as root, try just setting the required capabilities instead”)
  • questions (“Is there a way to place the BPF filter after IP packet reassembly?” or “whats the advantage of tcpdump over wireshark?”)
  • mistakes I made

In general, Id say that peoples comments about facts tend to stay pretty normal. The main kinds of negative comments I get about facts are:

  • occasionally people get a little rude about facts I didnt mention (“Didnt use -n in any of the examples…please…“). I think I didnt mention -n in that post because at the time I didnt know why the -n flag was useful (its useful because it turns off this annoying reverse DNS lookup that tcpdump does by default so you can see the IP addresses).
  • people are also sometimes weird about mistakes. I mostly try to head this off by trying to be self-aware about my knowledge level on a topic, and saying “Im not sure…” when Im not sure about something.

stories are great

I think stories encourage pretty good discussion. For example, why you should understand (a little) about TCP is a story about a time it was important for me to understand how TCP worked.

When I share stories about problems I solved, the comments really help me understand how what I learned fits into a bigger context. For example:

  • is this a common problem? people will often comment saying “this happened to me too!”
  • what are other common related problems that come up?
  • are there other possible solutions I didnt consider?

Also I think these kinds of stories are incredibly important that post describes a bug that was VERY hard for me to solve, and the only reason I was able to figure it out in the first place was that I read this blog post.

ask technical questions

Often in my blog posts I ask technical questions that I dont know the answer to (or just mention “I dont know X…”). This helps people focus their replies a little bit an obvious comment to make is to provide an answer to the question, or explain the thing I didnt know!

This is fun because it feels like a guaranteed way to get value out of peoples comments people LOVE answering questions, and so they get to look smart, and I get the answer to a question I have! Everyone wins!

fix mistakes

I make a lot of mistakes in my blog posts, because I write about a lot of things that are on the edge of my knowledge. When people point out mistakes, I often edit the blog post to fix it.

Usually Ill stay near a computer for a few hours after I post a blog post so that I can fix mistakes quickly as they come up.

Some people are very careful to list every single error they made in their blog posts (“errata: the post previously said X which was wrong, I have corrected it to say Y”). Personally I make mistakes constantly and I dont have time for that so I just edit the post to fix the mistakes.

ask for examples/experiences, not opinions

A lot of the time when I post a blog post, people on Twitter/Mastodon will reply with various opinions they have about the thing. For example, someone recently replied to a blog post about DNS saying that they love using zone files and dislike web interfaces for managing DNS records. Thats not an opinion I share, so I asked them why.

They explained that there are some DNS record types (specifically TLSA) that they find often arent supported in web interfaces. I didnt know that people used TLSA records, so I learned something! Cool!

Ive found that asking people to share their experiences (“I wanted to use X DNS record type and I couldnt”) instead of their opinions (“DNS web admin interfaces are bad”) leads to a lot of useful information and discussion. Ive learned a lot from it over the years, and written a lot of tweets like “which DNS record types have you needed?” to try to extract more information about peoples experiences.

I try to model the same behaviour in my own work when I can if I have an opinion, Ill try to explain the experiences Ive had with computers that caused me to have that opinion.

start with a little context

I think internet strangers are more likely to reply in a weird way when they have no idea who you are or why youre writing this thing. Its easy to make incorrect assumptions! So often Ill mention a little context about why Im writing this particular blog post.

For example:

A little while ago I started using a Mac, and one of my biggest frustrations with it is that often I need to run Linux-specific software.

or

Ive started to run a few more servers recently (nginx playground, mess with dns, dns lookup), so Ive been thinking about monitoring.

or

Last night, I needed to scan some documents for some bureaucratic reasons. Id never used a scanner on Linux before and I was worried it would take hours to figure out…

avoid causing boring conversations

There are some kinds of programming conversations that I find extremely boring (like “should people learn vim?” or “is functional programming better than imperative programming?“). So I generally try to avoid writing blog posts that I think will result in a conversation/comment thread that I find annoying or boring.

For example, I wouldnt write about my opinions about functional programming: I dont really have anything interesting to say about it and I think it would lead to a conversation that Im not interested in having.

I dont always succeed at this of course (its impossible to predict what people are going to want to comment about!), but I try to avoid the most obvious flamebait triggers Ive seen in the past.

There are a bunch of “flamebait” triggers that can set people off on a conversation that I find boring: cryptocurrency, tailwind, DNSSEC/DoH, etc. So I have a weird catalog in my head of things not to mention if I dont want to start the same discussion about that thing for the 50th time.

Of course, if you think that conversations about functional programming are interesting, you should write about functional programming and start the conversations you want to have!

Also, its often possible to start an interesting conversation about a topic where the conversation is normally boring. For example I often see the same talking points about IPv6 vs IPv4 over and over again, but I remember the comments on Reasons for servers to support IPv6 being pretty interesting. In general if I really care about a topic Ill talk about it anyway, but I dont care about functional programming very much so I dont see the point of bringing it up.

preempt common suggestions

Another kind of “boring conversation” I try to avoid is suggestions of things I have already considered. Like when someone says “you should do X” but I already know I could have done X and chose not to because of A B C.

So I often will add a short note like “I decided not to do X because of A B C” or “you can also do X” or “normally I would do X, here I didnt because…”. For example, in this post about nix, I list a bunch of Nix features Im choosing not to use (nix-shell, nix flakes, home manager) to avoid a bunch of helpful people telling me that I should use flakes.

Listing the things Im not doing is also helpful to readers maybe someone new to nix will discover nix flakes through that post and decide to use them! Or maybe someone will learn that there are exceptions to when a certain “best practice” is appropriate.

set some boundaries

Recently on Mastodon I complained about some gross terminology that Id just noticed in the dig man page on my machine. A few dudes in the replies (who by now have all deleted their posts) asked me to prove that the original author intended it to be offensive (which of course is besides the point, theres just no need to have a term widely understood to be referring to sexual assault in the dig man page) or tried to explain to me why it actually wasnt a problem.

So I blocked a few people and wrote a quick post:

man so many dudes in the replies demanding that i prove that the person who named dig “domain information groper” intended it in an offensive way. Big day for the block button I guess :)

I dont do this too often, but I think its very important on social media to occasionally set some rules about what kind of behaviour I wont tolerate. My goal here is usually to drive away some of the assholes (they can unfollow me!) and try to create a more healthy space for everyone else to have a conversation about computers in.

Obviously this only works in situations (like Twitter/Mastodon) where I have the ability to garden my following a little bit over time I cant do this on HN or Reddit or Lobsters or whatever and wouldnt try.

As for fixing it the dig maintainers removed the problem language years ago, but Mac OS still has a very outdated version for license reasons.

(you might notice that this section is breaking the “avoid boring conversations” rule above, this section was certain to start a very boring argument, but I felt it was important to talk about boundaries so I left it in)

dont argue

Sometimes people seem to want to get into arguments or make dismissive comments. I dont reply to them, even if theyre wrong. I dislike arguing on the internet and Im extremely bad at it, so its not a good use of my time.

analyze negative comments

If I get a lot of negative comments that I didnt expect, I try to see if I can get something useful out of it.

For example, I wrote a toy DNS resolver once and some of the commenters were upset that I didnt handle parsing the DNS packet. At the time I thought this was silly (I thought DNS parsing was really straightforward and that it was obvious how to do it, who cares that I didnt handle it?) but I realized that maybe the commenters didnt think it was easy or obvious, and wanted to know how to do it. Which makes sense! Its not obvious at all if you havent done it before!

Those comments partly inspired implement DNS in a weekend, which focuses much more heavily on the parsing aspects, and which I think is a much better explanation how to write a DNS resolver. So ultimately those comments helped me a lot, even if I found them annoying at the time.

(I realize this section makes me sound like a Perfectly Logical Person who does not get upset by negative public criticism, I promise this is not at all the case and I have 100000 feelings about everything that happens on the internet and get upset all the time. But I find that analyzing the criticism and trying to take away something useful from it helps a bit)

thats all!

Thanks to Shae, Aditya, Brian, and Kamal for reading a draft of this.

Some other similar posts Ive written in the past:


via: https://jvns.ca/blog/2023/08/07/tactics-for-writing-in-public/

作者:Julia Evans 选题:lujun9972 译者:译者ID 校对:校对者ID

本文由 LCTT 原创编译,Linux中国 荣誉推出