Community and Communication

Thursday 2 May 2019

Martin Odersky

The Scala language is a big tent. It supports object-oriented and functional code working together. The point of Scala was always to show that these paradigms can be combined in a compact set of unified language features. But while the language design stresses unification, the same can not (yet?) be said about the community of Scala programmers.

In fact, Scala is used in many different ways. There are the people who use it as a “better Java” with more powerful object-oriented features, and there are the people who use it as a “poor man’s Haskell”, concentrating on the purely functional language subset. And then there are the many in between who use it in a predominantly functional style with an object-oriented module structure, without being too dogmatic about it.

I see this difference of approaches as a big opportunity. There are so many great ideas to debate and opportunities to learn from each other! Lots of these ideas feed into the design of Scala 3, with the overall goal to make Scala’s integration of paradigms even tighter than it is now, as well as making it simpler and safer.

Unfortunately, sometimes a competition between ideas becomes a fight between people promoting them. This can happen in the heat of debate, but we have to draw a line where personal attacks become persistent, where others are ridiculed or where statements are distorted intentionally.

None of this should be controversial. But if such behavior occurs what should we do about it? And who even is “we”? If we take all Scala users together, the answer is: there’s nothing to be done. Everybody can use a programming language and communicate about it in the way they see fit. If we take us as individuals, the answer is that we can and will stop interacting with people whose behavior we object to. If we talk about organizations such as the Scala Center, or Lightbend, or Typelevel, I believe they also have the right and sometimes the obligation to take a stand. First, they are ultimately made up of individuals, and cannot be disassociated from them. Second, they are tasked to safeguard the health of the projects and communication channels that they own, and that means they should not look away when norms are violated.

This is painful for everyone involved, and tends to be done only in exceptional cases. I take this as a challenge for us to develop better ways of conflict resolution that are inclusive, consensual, and respectful of one another. I also believe it’s important not to let the past hold us up forever. Individuals and their organizations change and decisions should take that into account. The goal must be to resolve controversies of that nature quickly and get back to an intense and friendly competition of ideas in Scala.