Posco

What is a programming language community and what does it value

I started using the Scala programming language in 2010. In 2011, I joined Twitter and worked there using Scala professionally for four and a half years. During that time I saw many comments and criticisms about the Scala community as my interest in Scala grew. I often wondered: did these criticisms apply to me and the people I worked with? I found myself insulted and defensive about them. But what is a programming language community anyway?

The criticisms I’ve seen leveled at the Scala community over the years are serious. In the early days of my awareness, it was about a culture of hostility towards new-comers, of insulting others, of constant intellectual pissing contests. Frankly, with my experience in undergraduate and graduate mathematics and physics, I didn’t find this very unusual, although it isn’t fun nor pleasant. A bunch of young men arguing about some topic, but perhaps mostly just socially jockeying to be considered the smartest, was not unusual while at university. So, while I did see many people I thought were jerks, initially I didn’t think it was especially intolerable.

The next wave of criticisms I saw were the voices of women who felt unwelcome, insulted, or had been sexually harassed in a way that members of the community turned blind eyes to. When I went to a Scala conference, I generally only saw a handful of women. I thought this was unfortunate, but I couldn’t see if this was unique to Scala or part of the larger problem of the hostilities, discrimination and harassment that women face in the tech industry. Again, I would tend to feel defensiveness: I didn’t think I, or anyone I thought highly of, was a perpetrator, and it seemed unfair that “our community”, whatever that means, was being singled out.

Around the 2016 election a new set of concerns arose. It was a time when, surprising to many in comfortable positions of privilege, the US saw a resurgence in media coverage of white supremacists. There was a debate about whether developers that were hostile to equal human rights should be given a chance to speak at tech conferences. Perhaps the highest profile example was LambdaConf 2016, a functional programming conference organized by a prominent Scala user. A speaker previously uninvited to Strangeloop 2015 for racist writings was given a chance to speak at the 2016 LambdaConf. The following year, LambdaConf 2017 hosted a keynote from a misogynist not previously associated with the functional programming community. By this point, I felt that there were at least misguided elements of the community. I won’t rehash the debate here (see e.g. this article in Inc), but of those who supported those conferences’ organizing choices, I assumed virtually all were doing it out of misguided concern regarding the censorship of technical ideas, rather than shared values with those speakers.

For most of my time with Scala, I’ve worked at reasonably large companies using Scala professionally. To me, these people were my community. I am proud of the values of the vast majority of engineers I worked with at Twitter and Stripe, and I assumed these people reflected the values of the “Scala community”. I assumed that the few bad examples were localized to a few individuals and their supporters. But what is a community?

Programming communities tend to form around conferences, around prominent projects, around important companies, around communication channels (email lists, IRC, slack, reddit, gitter, etc…) and around geographies (West Coast, East Coast, Europe, Asia). There is the community of students that worked on Scala with Odersky at EPFL. There is a community of frequent speakers and attendees of certain conferences (Scalaworld, Scaladays, Scale-by-the-Bay). There are contributors and users of the Typelevel libraries or ZIO family of projects. I have never, in these communities, personally witnessed open and overt racism, sexism, or anything more than rudeness or run-of-the-mill interpersonal hostility. The main division from my perspective seemed to be the split between people who feel that advancing social justice is an important goal for the community vs those who feel that tech should be an apolitical space. Any human activity will be political, and more to the point, equal human rights are cornerstone values, and rise above being mere “politics.”

So, after 10 years of working with Scala, of thinking about what the community is, what it values, I asked that question again this week. A week of the largest protests the United States has seen in decades; protests in reaction to the murder of George Floyd, in support of the Black Lives Matter movement, and in opposition to police violence in general. A week where we saw a global citizenry protest against America’s treatment of Black Americans and police violence only befitting an authoritarian state.

To me, the politics that should be kept out of programming communities are tactical policies like: should the highest marginal tax bracket be 25% or 35% or 95%. Should the maximum speed limit be 65 or 75 or 85 mph. These are real policy questions which are generally distractions from the mission and the shared values of the tech community. I would like to believe the vast majority of these communities agree that all humans deserve equal rights. We must not keep questions like this out of any communal activity. These are simply table stakes: we can’t form communities when some members think other members don’t deserve equal rights. It’s very convenient for a highly privileged person to say “let’s keep politics out of tech”, because he directly benefits from that view.

So, in this context, the events of this week fit in a space where there should be little disagreement: needlessly killing suspects, especially Black suspects, when it would have been completely possible to subdue them without deadly or even harmful force is wrong. Police targeting the media with serious injury (several people lost eyes to rubber bullets this week) is wrong. The simultaneous deference towards conspicuously armed White protesters and aggression shown to unarmed Black protesters is wrong. Police gratuitously using violence and behaving like thugs is wrong.

Yet, in all that, I noticed while some I knew online were speaking out about it, not all were. In fact, I noticed a fraction amplifying the opposite message. Some argue or imply the protesters are the thugs, or put the focus on the property damage and not the violation of civil rights. They retweet or “like” the President’s threats against the protesters. In my view, this is transparent racism, overt authoritarianism, and simply is not an acceptable view in my ideal (or indeed the text of the laws and constitution) of the United States. There are roughly one million developers that have written some amount of Scala. With one million people, we have to expect any possible view will be represented. So it’s important to ask what fraction of the community are we talking about?

The shocking thing about the 2016 election was that many people like myself were naive enough to not realize nearly half of the population would turn out to vote for someone espousing the rhetoric of Trump. The percentages matter, because in a nation of more than 300 million, of course there will be hundreds or even thousands of people with any terrible viewpoint. When those numbers reach 20–30 percent, then they can capture half of the primary voters for a single party, and ride American partisanship all the way to national power. It was a shock to me, and many others, that the level of xenophobia, anti-science, and pro-authoritarianism had captured that extent of the American voting populace. But this week, I was asking the question: what fraction of my programming community had been captured by those views and worse? In 2020, we have hard-drives full of sickening video footage documenting the outrage that has motivated the Black Lives Matter movement. What kind of person, especially after this week, stays silent?

This week was my “are we the baddies” moment. I noticed some folks critical of the protests. I saw a few randos pop up in my mentions when I expressed my anger and saw that these weren’t some kind of bot, they were people following and followed by Scala programmers. I noticed many people with considerable follower counts making zero public statements with their platform in opposition to any of the clear violations of human rights we witnessed. The cases I noted where people were speaking out were generally members of a single subcommunity. With today’s machine-learning powered filter-bubbles, it is hard to have a grasp on the consensus view point. I’m not sure at all that I do. For the first time I really wondered: what if significant percentages of online (reddit, twitter, etc…) Scala programmers are not just insufficiently concerned with justice, but what if 30–60% of them are men’s rights activists, misogynists, white supremacists, xenophobes, homophobes, or transphobes? What if the community really is populated by a significant fraction of people with despicable views? What evidence contradicts that view? With a million Scala developers, some have to be terrible (murderers, rapists, you name it). In my opinion the fraction matters: one in a 1000 is still 1000 terrible people, but we have to expect it due to rates of criminality. But at 50% we are dealing with both a qualitatively and quantitatively different situation.

I have contemplated trying to bring data to bear on this problem: scrape the follower graph and tweets of some coverage of the Scala community and just randomly sample a subset and categorize their public viewpoint as seen by tweets, likes and retweets. I don’t think I will do that because where that idea leads is somewhat problematic, and I doubt any answer will bring comfort or tell a compelling narrative about this question of the community’s values. But what is a community? Is there only one Scala community? I don’t think there is. I understand the defensiveness people feel when their community is condemned, I’ve felt that in the past. Is it useful to speak about a community? Can we achieve important goals by judging communities? Maybe the whole idea of a programming language community doesn’t make a lot of sense. Anyone can download a software tool and make a blog post. What responsibility does that put on the authors of a tool? I don’t know the answers to all these questions, but this week when a mirror was held up once again to my nation and one again I saw something very ugly, I looked back at these questions with a fresh perspective and wondered if I haven’t been very naive about the values of many “in my community”.

My view is that when we see injustice, we can’t stay silent. And the social circles we inhabit are the ones where our voices are heard the loudest. Community norms matter, and I want to help set norms I’m proud of. There may not be a single well defined “Scala community”, but I still expect prominent voices to speak up for justice and human rights. That means it should be easy to say Black lives matter. When we do form explicit communities (groups with their own communication channels or conferences), we need to be committed to equal rights and aware of the privileges that some members enjoy. I can choose my own community, avoid the voices I don’t like, speak against the ones I find objectionable, and not feel defensive about well intentioned criticisms of the “community” at large.

Thanks to William McEachen, Matthew McEachen, Liz Boykin, Jesse Bridgewater, Tom Switzer, Erik Osheim, Neville Li, and Avi Bryant for comments that greatly improved this post.