Today I wanted to write a post about grift in the functional programming community. I still want to do that, but I got caught up in another topic which I’m thinking about first.
Some of the claims I want to make here are a little controversial. Saying controversial things can really suck, because people will be generally unpleasant in response.
You can usually deal with this by playing to the standards of the community you’re worried about. For instance, while veteran Wikipedia editors tend to come into disagreements with a direct and hostile tone, they tend to change their tone a little bit if you cite Wikipedia’s Assume Good Faith policy.
I generally think that programmers, when they read controversial text, are looking for a sign that the person they’re reading is cosmopolitan and willing to change their mind. They tend to have other, higher standards than that, too: your post should make sense, your conclusions should be supported by your argument. But looking openminded is one of the baseline requirements you have to meet to be tolerated.
One of the best ways to seem openminded is to seem rational.
Unfortunately, I’m pretty used to finding a programmer post on Reddit or Hacker News, finding out it was written by a woman or a marginalized person, then seeing replies that seem outright antirational. Usually upon reading these, I get the strong feeling that ingroup bias happened and that’s the reason the poster was discounted.
Kind of as a result of this behavior, I think a lot of programmers try to adapt to the response they’re expecting.
What do I mean by that? Well, often, when someone has an unusual thesis, I think they try to make a greater display of being rational. This usually means saying “this is just my opinion, not the facts. I can be convinced” right up at the beginning of the post.
It often means getting to the ultimate conclusion step-by-step, hoping that if people don’t object to any of the steps along the way, they won’t object when the controversial statement is finally made. That strategy often means making a pretty verbose case for each step, and it means that someone who stops reading early will not have seen the final conclusion.
My problem with this is that, generally speaking, when people write more words, it increases the attack surface against their argument, even if they’re making a better case for what they were trying to say. I think this makes it easier to dismiss people who are already trying harder not to be dismissed.
Generally — constructing a good argument often means giving multiple lines of reasoning. If you only give one line of reasoning, then your argument is likely only going to be convincing to people who believe a specific set of premises.
Many people who want to say something controversial will recognize this, and they’ll respond by giving more than one example of whatever they’re trying to argue. They assume some people might balk at their first example and need a second one to be convinced.
The problem is that, as far as I can tell, people usually stop reading the first time they get to a statement they disagree with.
That’s a very big problem for long posts!
As far as I can tell, when you think someone is playing fast and loose with the facts, you should stop treating them as a credible source.
However, I think most programming arguments aren’t about subjects where you can really play fast and loose with the facts. Usually they’re about situations where almost all the information is public.
In general, if I’m giving you a line of reasoning (rather than claims of fact), then you don’t have to trust my credibility at all to hear out whether I’m telling the truth. If I’m telling you that 528 times 256 is equal to 135168, I’m not asking you to take anything on faith. You can independently verify that.
I also think that it’s pretty rare, when someone’s expecting a hostile reception, for that person to be straightforwardly wrong. Usually their claims are objectionable — not wrong, objectionable.
Frankly, you can argue both sides of a lot of issues in programming, because a lot of arguments come down to the question of whether things are satisfactory (a value judgment) rather than objective questions about how they are.
Usually when I see a programming discussion disappear up its own ass, it’s about that sort of thing — not the facts.
Unfortunately, I think programmers aren’t going to change in the short run. I guess my feeling is that this has led to a pretty sticky situation.
It seems like people who feel relatively accepted can claim wild and dubious things — look at the assertions people have been making for years about Haskell performance and compare them to the performance-in-practice of StateT, WriterT, and other abstractions that don’t benefit that much from stream fusion.
On the other hand, there are people who feel marginalized who try to defend their points better to match their audience’s skepticism. Those people get held to task on minor details, even if their overall argument is somewhat well-supported.
I have two recommendations. One is to disclaim upfront that you’re offering multiple reasons to believe the thing you’re arguing. You can reply to critics by attempting to show that they didn’t respond to other parts of your argument. I personally think this is foolish; the last few times I’ve seen people try this, they got subtly ridiculed. In general, I don’t think you can win back your credibility in the eyes of random people online.
My other recommendation is to make short, impressionistic arguments and appeal to the idea that there are multiple ways to demonstrate a claim that you’re making, rather than listing them. When you say “well, there are multiple reasons to believe this,” without listing them, you’re making a single claim that can’t be readily disputed and you’re appealing to the idea that there is a well-known source of authority — collective wisdom — located elsewhere.
You can also list some of those reasons by name without explaining them in detail so that someone who objects to one is forced to notice that there are other ones.
(Of course, you should always have a good explanation of what you mean in mind, just in case someone asks.)
I don’t know how to deal with the general problem that some people are marginalized. There’s a lot of assholes and idiots out there who should probably be evicted, but when people do that, it creates a vacuum that is eventually filled by worse assholes and idiots. It’s a sad state of affairs, although you can avoid it partially by using Rust.