Software and Community
“Are you sure you're not vegan? You look like a vegan.”
Chad Fowler made me laugh pretty hard that day. We were in Austin, at a Ruby conference, and getting some very non-vegan food at the excellent Iron Works BBQ. I had only talked to Chad a few times before, and while chowing down on some excellent ribs, we talked about something that we'd discussed in a previous conversation: “the Ruby community.”
I gave a talk at Lone Star Ruby last year about my involvement with Hackety Hack and Shoes, and at the end, discussed some social issues I thought Ruby has:
The fun starts at 27:49. But ultimately, this whole section relies on the idea that in Ruby, we have a cohesive 'community' of people. After I gave my talk, Chad mentioned to me that he didn't like the idea of “the Ruby community.” At the time, I was so starstruck that I said something like “sure, okay, I'll think about that,” not even realizing the irony. So, while trying valiantly to eat barbecue in a not completely messy way, I asked Chad more about his thoughts on this.
If you were wondering, if it's good barbecue, it's impossible to eat it neatly.
I don't remember his exact words, but Chad's point was that if we talk about Ruby like a big cohesive group, we forget about all the people who use it who don't post on blogs, or Twitter, or contribute to GitHub. Those people are people too, but they're effectively outside 'the community,' either by choice or by ignorance.
Kill Your Idols
It seems to me that much of software is driven by fashion, celebrity, and superstition. This shouldn't surprise anyone who's not a software developer, as programmers are just people, and much of the human world is driven by fashion, celebrity, and superstition. Programmers, though, regard themselves as bastions of rationality.
Right? This whole idea makes us, or at least me, very uncomfortable. I'm a scientist, dammit! I measure twice, cut once. I use the right tool for the job. I swear, MongoDB, CoffeeScript, and Ember.js fits my use case perfectly!
Ideally, we'd make technical decisions on technical means only. However, we're just humans. I'm not sure it's possible to divorce our decision making from our squishy human tendencies, and after typing that sentence, I'm no longer sure that it's a good idea, either.
Leaders vs. Bosses
Does it follow that I reject all authority? Far from me such a thought. In the matter of boots, I refer to the authority of the bootmaker; concerning houses, canals, or railroads, I consult that of the architect or the engineer. For such or such special knowledge I apply to such or such a savant. But I allow neither the bootmaker nor the architect nor the savant to impose his authority upon me. I listen to them freely and with all the respect merited by their intelligence, their character, their knowledge, reserving always my incontestable right of criticism and censure. I do not content myself with consulting a single authority in any special branch; I consult several; I compare their opinions, and choose that which seems to me the soundest. But I recognise no infallible authority, even in special questions; consequently, whatever respect I may have for the honesty and the sincerity of such or such an individual, I have no absolute faith in any person. Such a faith would be fatal to my reason, to my liberty, and even to the success of my undertakings; it would immediately transform me into a stupid slave, an instrument of the will and interests of others.
- Mikhail Bakunin, “What is Authority,” 1882
There is a difference between a leader and a boss. There's also a difference between a leader and a celebrity. What I'm concerned with is that we occasionally turn leaders into bosses, and we turn celebrities into leaders.
One other Ruby person that straddles this line is Aaron “Tenderlove” Patterson. He is, for good reason, almost universally beloved by Rubyists. He's known to all for two different reasons: as a leader, and as a celebrity. Aaron is the only person on both the core Ruby as well as core Rails teams. He is one of the most technically brilliant people I know.
He also posts amazing pictures of his cat on Tumblr. (The caption is “My new Yoga outfit.”)
Another amazingly technical thing Aaron has done is re-writing the AST -> SQL generation stuff in ActiveRecord, which sped up ActiveRecord by 5x. He deserves every single last bit of his popularity, on both sides. I happen to find the split reasons interesting.
“The community” as useful abstraction
While I think 'the community' may help drive a celebrity culture over a culture of leadership, there's no denying that we do, in fact, have a community. If I had a nickel for every time someone in Ruby did something nice for me just because, I'd have a lot of nickels. I'm writing this post from the couch of a Rubyist who happened to be on the same plane as me to Helsinki, and rather than stay at the airport for 10 hours overnight (checkin isn't for another few hours yet), I crashed here. On my last trip to Germany, Konstantin and Josh from Travis not only gave me their couches to sleep on, but bought me food when I fucked up my debit card situation. One Saturday, Luis Lavena spent 8 hours on a Saturday randomly pairing with me on some Ruby on Windows stuff, and left with an “I'm sorry, but my fiance is bugging me, I told her we'd get dinner an hour ago, I need to leave.” That's crazy, I'm some dude from another hemisphere, hang out with your fiance! Aaron helped me debug an issue in Rails the other day, even though I kept asking him stupid questions. I have tons of stories like this, and so do many other people who participate in open source.
In “Debt: The first 5,000 Years,” Graeber defines “everyday communism” as “any community who follows the maxim 'from each according to their abilities, to each according to their needs.” Of course, communism and community share a root for a reason, and all of these examples above are great descriptions of 'everyday communism.' Not every exchange must go through some sort of monetary exchange. It's often simpler to just do each other favors, and know that it will all work out in the end. That's the basis of a gift economy.
In this way, I think community is a useful abstraction; we just need to make sure that we don't get too caught up in ourselves. Focus on the friendships, helping each other out, and writing great software. Try not to get too trendy. Pay attention to what matters.
In the end, I wouldn't give up the real friendships I've made via the Ruby community for the world.