Saturday, October 15, 2016

Sheep and Goats, Bullies and Allies.

This post was inspired by a tweet+link posted by Guido van Rossum, Python BDFL, on twitter.

The link was to a post on "Contempt culture" by Aurynn Shaw. It's worth a read, but if you want a TL;DR it's this:  Developers tend to pick sides and heap scorn on the other side, and the other side is people, and being nasty to people is not okay.  I agree.  That's where the title "Sheep and Goats" comes from, which is a reference to a parable in the Christian religion which suggests that human beings can be sorted into good and bad, sheep (good) and goats (bad), wheat (edible) and tares (inedible).

The psychological need to qualify my choice as better than yours is my subject, not the specific wars; tabs versus spaces, curly braces versus keywords like begin and end,  C versus Pascal, perl versus ruby versus python,  emacs versus vim,  garbage collection versus ref-counting versus RAII, windows versus linux versus bsd versus solaris versus whatever else.

The desire I often feel to heap contempt on PHP, for example, is completely inconsistent with the fact that whenever I have used PHP I have found it to be extremely useful.  I do not choose to build entire 500-million-line-of-code product empires in it, but just because I don't choose to do so, doesn't mean I should insult PHP and PHP developers.   Contempt is not justifiable. If you have technical arguments about whether PHP is a good choice for a particular project, those can be made without insulting anyone or their work.  PHP is a work, a technical body of work.  Insulting it, all of it, including all the amazing work inside that tooling and library ecosystem plus the language core itself is insulting to people.  Contempt is bullying.  We white male alpha geeks who insult things, we are bullies.  We need to look in the mirror and wake up.

My concern is also for the way we self-indentified alpha-male-white-geeks gate-keep, police, and exclude others.  I agree with Aurynn. We do that.  I will add that, along with contributing to exclusion of women, and minorities,  and in addition to reinforcing white male privilege in tech communities (points brought up with Auryn Shaw that I agree with completely), that we damage our ability to do good engineering work, place barriers to others and to ourselves in learning, and so on, when we act badly.

Recently I decided I wanted to learn Ruby and Go because there were awesome things built in Ruby and Go that I want to contribute to.   In order to get started learning Ruby, I had to overcome some strong antipathies to Go and Ruby that I had developed, that were basically 100% free of technical rationale, and were 100% products of earlier A/B forks in the road that I had taken.  Some time in about 2004, I chose Python and chose to be anti-Ruby.    Some time after Go's authors decided that generic containers would never be in Go, I decided to be anti-Go.

Recently I watched an old Ruby conference talk where Ruby luminary (now sadly deceased) Jim Weirich talked about his road from Perl to the fork in the road where he tried to like Python, and failed, and then tried Ruby, and it "just fit" his brain.   You and I can probably both tell similar stories, stories that differ only on which fork "fit my brain better" and which way you or I went.  I would like to think that if I met up with Jim Weirich at some Ruby meetup in the great beyond that he, a Christian, and a true gentleman from the accounts I have read, could have a great chat about his talk. I would tell him that I'm ashamed that I ever insulted Ruby, which contains such great community, such a friendly (generally) and welcoming atmosphere.  Okay, so the Ruby community has had to face this "Bro-coder culture" and it has had some toxic personalities. And so has Python, and so has every other language community.   But if I want to attend a Ruby meetup here in my own city THERE IS ONE. And there are people there who will HELP ME LEARN RUBY.   And I want to attend one and help teach people Ruby.  I want to be part of communities like that.  I want to be a guy like Jim Weirich.  I don't want to be that me from 2006 that contributed heat and no light to endless technical battles on indentation and such.   Now, to be fair to my former self, I was provoked.  The anti-whitespace-block crap which Pythonistas have had to put up with has made us all testy on more than one occassion.  The lack of imagination that you could adjust to this reality and actually come to enjoy it is no different than my lack of imagination that I can adjust to the reality of Go sans generics or similarly useable container patterns.

So I proceeded in 2004 to ignore Ruby, and  people proceeded to use Ruby and build things like Gem and Rake and Rails, and people decided to use Go anyways, even though I didn't give it my stamp of approval, and as far as I know not having templated containers and exceptions didn't stop its uses from building great things with it.   Lately I keep running into projects I want to contribute to and use that are built in Ruby and Go.  Right now I'm coding my own projects in rails and Go because that's what  makes sense for the projects I'm interested in.

I am getting the tiniest feel for what it feels like to be an outsider, but with a big difference. The Go community and the Ruby community are two of the friendliest communities I've ever seen, with Python being right up there as well. The spirit of collaboration, and technical meritocracy is strong in these communities.   It's made me wonder what else I've missed out on because of these narrow pseudo-technical filters I've applied to the world of computing.

I want to make a confession.  I am a bully. I have participated in online conversations in which my behavior was rude to others.   I have been rude to co-workers because our technical decisions on things which were matters of taste in the end were different.   I have ridiculed co-workers and even in one case, my boss, for not being smart or technical enough to be worth listening to.

I want to tell one particular story.  About five years ago I worked in a healthcare company where there was a particularly dysfunctional team.  The team leader was actually a great guy but something was going on that rendered him non-functional.  The team had no daily standup, or weekly meeting, no demos, no retrospectives, and was spread across two cities.  The CEO was ineffectual and disconnected from the leadership of the company.   Something was broken. Almost everything was broken.  Into that situation I came in.   Did I make things better? No.  Did I model the values I believed in, or said I believed in? No.   Did I try to institute some functional communication practices, whether scrummy or other?  No.   What did I do? I coded.   I kept my head down.  When arguments came up on the team, I took sides and we debated stuff.   The culture was not healthy and I was not happy either.  But I didn't realize it.   Eventually my supervisor was moved out of the "software dev manager"  role but not fired.  He remained at his desk, and did slightly less management of the team than before, but not much else changed.   Our new software development manager was a nice person, a woman, a woman of color in Tech.   Her background was that she understood the customer's needs, and whether the thing we built would be useful in the real world. A good background.   My only memory of interaction with her was her coming to ask me to do something.   I had previously been asked to do other things by five other people. Instead of politely asking her why my priorities were shifting so frequently, and which thing I should work on, I think I was actually quite rude to her.  I remember that she didn't enjoy the encounter. In fact, I think, looking back, I was being a jerk.  So there's me, who would like to imagine myself as an ally to #WOCINTECH but instead, I'm just another arrogant white male jerk, making subtle and not-so-subtle jabs at people like her, and making her life hard.  It's hard for me to look back at that and face how ugly that is. How it puts me on the wrong side of history.  How I can only be ashamed of being a jerk, and how my behavior makes it hard to run a respectful team.  Maybe not everybody enjoys the "culture of robust discussion" that I have often defended.  Maybe that's just me being rude, being a bully, pushing my chest out and bellowing louder than others. Is that how we make Tech a friendly welcoming place? Is that the best I can do? No. It's not.

I will not split groups into Sheep and Goats.    I will not be free of it because lots of people will keep assuming that the Rubyists are the Sheep and the Pythonistas are the Goats, and vice versa. But I will be part of both communities and will work for understanding and friendly collaboration, and suggest that we not balkanize and hide in our corners, but mix and mingle instead.

At my work, I will work on my tendency to be loud and arrogant. When I act like that I  leave some people little choice than to avoid me, fire me, or if they are not in a position of power, they can quit.   Is that the kind of team culture I want to foster?  No it's not.   Bullies and power-mongers like showdowns.  I value community, collaboration, and consensus.  When those things are not technically possible, then let's have clarity, humanity, and compassion when we disagree.

It's time for me (and you, if you agree) to stop dividing people into "good enough and not good enough to be treated by me with respect".  All people deserve a modicum of discipline, tolerance, and respect, at work, and in the wider tech community, in OSS. We can argue all day about whether being rude and arrogant is harmful, and where the thin red line is,  but in the end, the fact is we're getting the tech community we deserve.  If we select for arrogance and brashness, we may, in fact we definitely will be excluding voices, thoughts, and ideas that can help us.

I have four thoughts about what I can do differently:

* I can be an ally instead of a bully. That means listening.

* I can stop pushing my way on other people.  That means compromising more.

* I can stop making A/B decisions and thinking that because I put a few years into learning Python that it isn't worth my time learning Ruby.  That means learning more.

* I can stop excluding women, and women of color, and visible minorities, and people of cultures and with personalities that don't mesh with my arrogant privileged techno nerd ways, and I can be a friendly guy. I like to think that most of the time I already am that guy, but I've also learned that believing that you're a "nice guy" is a barrier to actually being one.   That means I need humility.

What can you do to make the world of tech a better, friendlier, more inclusive place?


  1. Well put. Been opposing the animosity for a while. I can have a preference for my language of choice, and not treat others poorly because they have a different preference.