Re: Contempt Culture

Two weeks ago Aurynn Shaw wrote a piece called “Contempt Culture”:

And even before I finished reading it I had a thought:

Oh, this is not the article I expected to be reading.

So here’s the article I thought I was going to read, based on the tweet. A short version, anyway.

If you’re like me, you probably have a language (at least one) that you think of as completely bad. The big one is PHP, which has entire websites devoted to its problems. There’s also C++, Java, JavaScript, BASIC…did at least one of these make you cringe a little?

I’m here to tell you that that instinct will get you into trouble. Here’s an excerpt from Shaw, minus a part of her point so that I can make my point:

If [programmers using these languages] say what they use, we as a culture laugh at their choice. We tell them they should know better, tell them that it’s a horrible tool. Tell them that they are wrong. We ignore the achievement and focus exclusively on how it was reached, on how much better we are because we had access to narratives that the broader culture had already deemed more real.

Shaw points out that this is exclusionary and drives other programmers away. That’s already a good enough reason to think twice about what we’re doing, but if you need another one:

If you dismiss something out of hand, you can’t learn from it.

That applies both to what it does poorly and what it does well. You’re likely to have some examples of the former (presumably you have some idea of why the language is considered “bad”), but that doesn’t mean you won’t make some other mistake that you didn’t realize has been made before. As for the latter…

  • PHP was (and arguably still is) great for templating—the sort of thing Liquid is used for (e.g. on GitHub Pages), but more powerful.
  • C++ has supported Swift-style value semantics from the start.
  • Java has a level of access control, “package”, between “just this file” (private) and “the entire world” (public). It’s even the default, just like in Swift.
  • JavaScript’s compact object literal syntax is used as today’s interchange format (JSON).
  • BASIC allows top-level imperative code, while most of its contemporaries didn’t.

These things may not be unique to these languages, but they’re still things I’d consider good ideas. And as someone heavily involved in designing a language, ideas matter. That of course doesn’t mean shoveling features into Swift until it can do absolutely everything, but if we do want to add a feature, and another language got it right, we can and should (and do) follow that lead.

So I agree with Shaw: we should stop bashing languages, tools, libraries, etc. both because it drives away ideas and because it drives away people.

P.S. Did you read Shaw’s post yet? Cause she’s right about all the human aspects here, and those are probably more important in the long-term.

P.P.S. David MacIver posted his own follow-up entitled “On criticizing programming languages (without criticizing their users)”, which is about exactly that. In particular, the “guidelines for constructive criticism” at the very end are worth keeping in mind.