When I first got involved in free software development, I didn’t really know why I was doing it. It just seemed reasonably fun and challenging, which was enough to let it steal up every spare minute of my time in the form of a not-so-mini obsession. I didn’t so much think in terms of community, or how whether of my work would be useful to people, I was mostly just hacking for hack’s sake.
Eventually, I came to realize what fueled my work in open source, and that was the ability to learn from some truly amazing people, and later, return the favor by doing the same for others. If you like any of the work I’ve done in Ruby, you have exactly one person to thank for getting me started (James Edward Gray II), but hundreds to thank for keeping me going.
Here I’d like to talk a bit about my experience with the Ruby community and how it compares to something completely different, the community surrounding the board game Go. As I played in this past weekend’s North American Oza tournament, the idea for this article came to mind, and hopefully it doesn’t sound much worse in type than it did in my head. I must warn you, if you’re looking for technical depth, you’re not going to find it here, this is mostly just wishy-washy feelings and general observations that’ll only be interesting for those that have an obsession with community dynamics.
If that doesn’t scare you away, feel free to read on.
Time flies when you’re having fun (and coding Ruby)
By the time I started attending conferences and user groups meetings, I was basically a ‘Ruby guy’. This isn’t because I have the same kind of sick obsession some people get with one particular language (which leads them to consistently try to fit square pegs into round holes), but more because for most of the work I’ve needed to do, Ruby has fit the bill.
During my first RubyConf in 2005, I had already gained some cred in the community by helping James work on Highline, and also, by working on one of the RubyCentral codefest grant projects, Gambit. Though I was clearly not a rockstar at the time, I already had enough Ruby experience to not be a n00b. Amazingly, I had just begun on Ruport during this time, but if you go and download the 0.1.0 release, I don’t think you’ll see anything that screams Ruby 1337 in there.
Within a year, through several explosions of good luck and accidental successes (along with some hard work), I found myself speaking at RubyConf 2006 about Ruport. If you go and download the 0.6.0 release, you probably still won’t find much masterful code. However, by this time, I found myself at least in possession of *ideas* interesting enough to attract the attention of other hackers, and I knew enough where I could be helpful to others, which means that the hallway track started to get a whole lot more interesting.
By RubyConf 2007, after giving talks at a number of other conferences, I found myself too fatigued to even submit a talk. If you go and download Ruport 1.4, I think you’ll find some really excellent stuff, which is at the cost of mine and at least a few other people’s sanity over time. It was amazing how much two years had changed things. I found myself promising to spend time with more people than I was able to, and feeling generally spread too thin, and I realized at that point that maybe I had gone as far as I wanted with Ruby, maybe even too far.
Before this sounds like a long egotistical rant, I might as well come to my point. Over the last few years, I went from counting lines of code to counting downloads to counting users. Only within the last six month have I started counting the minutes of quality time I’ve spent with people I find to be extremely bright and talented, which turns out to be most of the folks I’ve met in the Ruby community. I’d say if anything, despite the criticisms, the Ruby community suffers from an embarrassment of riches when it comes to smart, nice, and generally interesting people.
At any rate, I guess what happened is that somewhere along the way I started to believe that Ruby had a monopoly on all the smart people, and in order to keep up with the Jones’s, the only solution was to keep doing more and more Ruby. This of course, is an absurd thing to think. In fact, it’s an absurd idea even when applied to programmers in general.
For this reason, I decided to seek out other hotbeds of intellectual prosperity, and the one that was most appealing to me ended up to be the one surrounding the game of Go.
Go is truly a hacker’s game
If you haven’t played Go before, I can’t decide whether to tell you to start immediately or never pick it up. Like programming, for those with the mindset, it can become an extreme addiction, and is wholly deep enough to spend two lifetimes mastering.
Like programming, I didn’t get involved with Go at first for the community. I mostly just found the game interesting, and then watched my time increasingly getting eaten up by games.
Eventually, through playing on KGS and also through studying with a strong player in my hometown, I realized that again, I was in it for the people. I took great joy in learning from players who would review my games and give me ideas of how i could improve. Like with programming, as soon as I was just good enough to be helpful to others, I started sharing my advice with them. Though I’m nowhere near mastering the game, it is a good feeling to be able to teach others what I know.
This experience alone was sufficient to make me believe that something I once thought (however naively) was unique to programming could be found other places as well. However, this past weekend taught me that there is a whole lot more in common between Go and Ruby when it comes to community than I ever ventured to guess.
How a Ruby Conference is like a Go tournament
Everyone is accessible
One thing that impressed me about my first Ruby conference is how willing people are to intermingle. Though there are obviously some cliques, they seem to form more accidentally than intentionally. The simple fact remains to this day, if you have a problem with a certain package, and that maintainer is at the conference, you can just go up and ask them a question.
I guess this shouldn’t come as a surprise, but it’s definitely a good thing. I like that by and large, there isn’t a cloud of pretense permeating the community. Maybe others have had different experiences with this, but it’s always seemed to me like there are very few obstacles that keep you from talking to more or less whoever you want.
At the North American Oza Tournament, I felt a lot of the same sort of love. More or less any player sitting nearby would happily do reviews and answer questions about strategy, and even offer teaching games to help you get stronger. In fact, it almost felt like this was to be expected, and reminds me a whole lot of when strangers start looking over your shoulder at a RubyConf and ask if you wouldn’t mind some suggestions. This kind of stuff makes everyone better, and I was happy to see this alive and well in the Go community since I enjoyed it so much in the Ruby community.
Friendly Competition is alive and well
I guess it’s more natural in a community of strategy game players than in a community of programmers for there to be some competitiveness, but I suppose the manner in which this manifests itself in both the Ruby and Go communities is a bit uncanny.
In both communities, a strong meritocracy is present. It’s fine to say ‘oh, that sucks’, but you need to have the stones to back it up, usually through something demonstrable.
I like that people don’t blindly accept advice in either of these communities, but need to see the correctness of any suggestion for themselves. This general atmosphere leaves room for competition. The bold can challenge common assumptions or ignorance, and if they are skillful, prevail.
Though ego plays some role in this, being proven wrong is almost always beneficial in some way to the person who loses the argument, so long as they’re willing to listen.
Bluntness
I like knowing I can go up to someone and say “What you’re doing there is terrible, you should never do that.” I find that this works both in Ruby and in Go. Sometimes I can be wrong, and if I am, I say “Oh, well, I guess I didn’t think of *that* reason for doing it”. This sort of admission of error is sufficient, and I don’t come off as an asshole if I play my cards right.
The ability to have blunt, no holds barred discussion that doesn’t include a ton of weasel words or random empty phrases that beat around the bush is really valuable. It lets you focus on technical details, and allows you to express passion about your assertions. This is the kind of stuff that gets me in trouble in my social life, but seems to be universally understood among hackers and Go players. Of course, there are exceptions, and it’s worth getting to know someone a bit to make sure you don’t surprise them with some rude comment.
I guess perhaps you could get away with this in a few other places, but I always found it to be a refreshing change of pace from day to day dialog where being diplomatic is far more important. To me, the sense of urgency and directness in technical discussions is a good thing, and I am glad to see that you don’t need to be a programmer to appreciate it.
Sense of humor and playfulness
Though the tournament games themselves were intense enough to be downright unnerving, most of the informal games that went on at Oza were a lot of fun, and usually had some sort of hackish elements to them.
I remember one player suggesting it was impossible to cheat at Go, and then 4 or 5 of us showing about 10 different ways to cheat, ranging from the realistic to absurd. There was also a game in which a player had about 8 people telling him a certain move wouldn’t work, and he played it anyway ‘just to see what would happen’.
This reminds me a lot of the sort of playful hacking that goes on at Ruby conferences, people sit down and toy around with some code, without any real goal in mind. Sometimes the goal is to do something silly or ridiculous, and I think that’s great.
A good sense of humor within a community prevents the dryness of technical content from being overwhelming. It creates a good sense of balance, and makes participation enjoyable, rather than feeling too much like work.
Though I can go on, these are the real similarities I’ve found. I guess they’re highly subjective, but I found them interesting anyway. Now, before I wrap up, I’d like to cover some noticeable differences.
How a Ruby Conference is NOT like a Go Tournament
The Oza tournament had a healthier mix of race and gender
It’s slightly entertaining that both Go and Ruby share a higher concentration than normal of Japanese community members, but in both cases, this is for obvious reasons.
Nevertheless, there is a point here. When I walk into a Ruby conference, though things may be getting a little better over time, I still see what is essentially a sea of 25 to 35 year old white males. Let’s not get into the details about this in fear of naysayers who claim there isn’t really a problem, but what I can say is that I didn’t notice any lack of diversity at the North American Oza Tournament.
There were probably more males than females, more whites than non-whites, etc, but nothing stood out as being surprising. What was surprising in a more positive light was that age distribution was really interesting at the Go tournament, I think you could find anyone from 4 years old to 80 years old there. Though it’s quite embarassing to see so many young children with higher ratings than me, in general I thought this was pretty neat.
Of course, the difference in crowd diversity may be mainly due to the difference in scope of the gatherings. I doubt there are many systematic problems in place that discourage certain people from playing Go, where programming is a whole lot murkier of an area.
Ruby Conferences are more fun
This is purely subjective, and almost ironic. A programming conference that is to some extent a training session for work, ends up being more enjoyable than a gathering around a board game. I think part of this is that I’m new to Go, and hadn’t made too many friends before the tournament within the community, but I also feel like there is just a looser tie to general fun in the Go world.
The age distribution has something to do with this. Though I learned a lot from some of the 14 year olds I met, I couldn’t very well thank them with a beer (at least not legally). Also sadly, Werewolf was not played.
I think maybe a more general event like the US Go Congress might score more points of the fun factor, but I won’t know until I attend one. I think this is also perhaps because at a tournament everyone is studying, whereas at a conference a lot of attendees are just along for the ride.
It’s strange, I guess Ruby has me quite spoiled on the fun factor. I had anticipated wild partying at Oza, and the best option I had was that the playing room was open late at night. But after a full day of Go, a beer among friends or some general debauchery would have been most welcome.
Vertical rather than Horizontal expertise
When I go to a Ruby conference, I tend to assume most people there are some kind of expert. I think this makes a slightly more equalized community, in the sense that the lines which separate hackers by skill level are quite fuzzy. Someone can be an expert in one aspect of things, and a n00b in others. This makes learning from each other quite easy, and somewhat laid back.
In Go, you have an actual strength rating. Though some players manage to play above their rank and some below, they generally show pretty accurately who you can beat and who you can’t. There is a ton to be learned horizontally in go, but expertise certainly stacks vertically.
This means that with the exception of folks within a few ranks of you, you can easily classify everyone as being better or worse than you at the game. This necessarily creates a more structured community, and to some extent, makes it a bit complicated to avoid elitism. Though I feel like people do a pretty good job of seeming reasonably humble about their skill, it’s clear that it takes a conscious effort.
A different kind of hero worship
Fanboys in software development tend to make my stomach turn. Hell, even comments like “I could never do what you’re doing” have made me feel bad at Ruby conferences before. Usually, these come from folks who have a family and a healthier social life than mine, and my response is usually, “It’s really that you don’t have to do what I’m doing”.
In Go, it’s a little bit different. With a somewhat empirical way of determining people’s strength, there are some folks in the Go world that it’s safe to say that barring some herculean effort, you will never catch up to them. For this reason, it’s kind of interesting that there was a separate ’strong players room’ for the top few boards in the tournament.
Walking into that room was like walking into some sort of alternate universe. Though it’s not true that dan-players glow in real life, the tension in the air was overwhelming. Though I *still* don’t believe hero worship is productive, I can see a whole lot more why it could happen in Go than I can in the much more subjective software development world.
So I guess the key difference is that one man’s hero is another’s annoyance in Ruby, but in Go… well, if you’re not strong enough to beat them, the high dan players are pretty universally amazing.
What I learned from all of this
I guess the big personal awakening here for me is that it’s not what we do with our intelligence, but how we use it and who we do it with that makes all the difference. It’s refreshing to know that no one topic has a monopoly on smartness, and maybe this is something to keep in mind all the time.
Dave Thomas says that you should learn one new programming language each year, to improve your skills and change the way you think. I say that we can generalize this a bit, and that you should learn one new skill and participate in a new community each year.
I can safely say my Go playing has improved my programming and vice-versa, and I find it remarkably interesting that it is possible to gain life experience through a ton of different means, and still see a lot of similarities within it all.
If you’ve had a similar experience as mine, with Go or something else in your life, I’d like to hear about it. It’d be interesting to see how the hacker spirit crops up in less obvious places than programming conferences.


Interesting thoughts. I play go and program Ruby but I've never been to any of the community events, alas. I do agree that learning go is like learning a good programming language or some new theory about the world in that it expands how you think about all problems that you face.
What's your KGS nick?
daveadams:
My KGS nick is sandalaz (11k). Good to know I'm not the only one who saw the similarities. :)
Hi Gregory,
Since you are having fun with GO/WeiQi and open source software, why not try Jago
http://www.rene-grothmann.de/jago/
I am a 8k/AGA but I could give it 9 handicaps and still beat it. I am a vb programmer and not so good with Java yet. We could meet up there or the next OZA ;)
Wulu is another great WeiQi software. (I've played and tested so long to against and won from other programs) But it is built with proprietary assembly code. No doubt it has fast calculation, but it still could be beat, and I hope by using Jago to achieve that, which improve GO programming overall.
My bad. I forgot the Jago is just the client. The core is GNU GO
http://www.gnu.org/software/gnugo/
I need to comment out the previous posts.
This one is really good for you:
http://rubygo.rubyforge.org/
I have similar comparisons between the ultimate (frisbee) community and the python community. A nice thing about ultimate is that there's a bit more horizontal nature to skill than in Go, because you can always learn something about playing another position from another player, but less than in programming because there's only a few skills, really.
No Werewolf at Go tournaments?
Sweet!
Does that mean that people who don't like your Ruby contributions get to blame me as well? ;)
Nice post. It's a good thought provoking read.
Dave Thomas has often said that he finds musicians tends to make good programmers. Interestingly, I've always felt it was gamers. You've always been a go guy, I'm a chess fan (though I play pretty much all strategy games), and Rubyists seem to favor Werewolf. I feel that strategic mindset helps us analyze and break down problems, which is such an essential programming trait.
"Though I *still* don’t believe hero worship is productive" -- hero *worship*, perhaps. The tone in your writing reflects a certain reverence that many people who poo-poo hero worship lack. I noted your ability to appreciate the value we can find in each other, and suggest that is perhaps the best way to confront people who are more apt in a given domain than us. I think it is all right to worship a person in a role, but to generalize domain skills to the person in total is naive at best.
This is, of course, highly influenced by my upbringing; I was taught to model the behaviors that made my heros successful while learning from their mistakes and shortcomings.
oh yea, and Go makes my brain ache
I've come to a similar comparison between science fiction conventions and scrabble tournaments - much of what you said about interacting with smart, interested and essentially egalitarian people, but also the pleasure of meeting the same people again and again, and building up friendships over a stretched out timescale. Also, the huge role the internet plays in maintaining both communities.
Of all the random things to see... I've been playing go for 4 years and coding in Ruby (on and off) for 2, so it's completely bizarre to see a post by a respected Rubyist on the subject. I am not alone! :)
On the question of vertical expertise, I have to admit it's very true. There is a go club in Atlanta that I go to (Tuesday nights at 7 folks! Georgia Tech Student Center!), and we have this problem where periodically a very strong player (5dan +) will come by, play a few games, and never be seen again.
The problem is twofold. First, playing high-handicap games is not as much fun as playing even games. Second, there is only so much you can teach on any given game. I have discovered that stronger players fundamentally see a different board than weaker players. The weaker player spends time looking for/at moves that a stronger player dismisses without even thinking about them; that kind of expertise is very hard to explain. The only way to get any enjoyment out of the process for the stronger player is to commit to training a weaker player. I am lucky that I know precisely such a player. (4 more stones... I'll get him soon).
I think programming provides a good comparison. If a beginner is doing something that is either bad programming, or bad Ruby (or whatever language you code in), there is generally an easy-to-explain reason why it is better to do it a different way. "Why use .each blocks instead of for loops?" "Because it makes code cleaner and easier to understand." Those are intuitive notions backed up by everyday experience. Compare with "why should I extened only two spaces instead of three?" "Because white's thickness in the upper right negates the influence of your stone." Great, you tell me what "influence" means.
Anyway, just a few thoughts. Awesome to see someone has the same interests I do.
Interesting as always, greg. Makes me want to check out Go. Why do we not have a million lives to spend exploring all the interesting stuff in the world?
@Shawn, I took a glance at RubyGo a couple months ago, and of course am familiar with GNU Go, but I have to be honest, until I can find a University who would support me studying the topic formally, I'm going to bow out. That's an extremely hard and likely addictive problem, and well... as fun as it'd be to work on, I doubt I could have time to do it, still play go, and still code on my other projects. :)
@Bill
I did a tiny bit of Ultimate in high school college, fun stuff. As I start to pile on pounds, it reminds me I should get back into it. I never really got too acquainted with the community, but thanks for sharing your experience, it's quite interesting.
@James,
I'm on the fence about Werewolf. I think it's a fun game, I find the hype and excitement surrounding it pretty entertaining, but it does take away from the conference hackfests to an extent. Oh well, I guess everything has its pros and cons.
@JEG2,
I claim full responsibility for all my bad ideas. I've even patented some of them, so that other people can't repeat them. ;)
@Aaron,
I feel like reverence within a reasonable context is fine, in fact, I think it's downright appropriate. However, the trouble is that more than a few people mistake a meritocracy for a popularity contest, leaving far too many people enthralled with say, DHH's personality, rather than the software he has produced or the community he has helped create. I'm not saying personality doesn't play a role in that, it's just not the primary one.
It's fine to have heros, so long as you understand why you admire them. I think even in that case, worship is stomach turning, and that's where the fanboys drive me nuts.
To give a bit more explanation though, I may be less comfortable with adoration than most. I feel slightly uncomfortable even when someone thanks me for work I've done, as I don't feel it's necessary. That makes me an outlier to some extent, so I don't think your views are unreasonable. :)
@Martin,
Great point about the stretched timescale. It always amazes me how many incredible friendships I've acquired with folks I've only seen a few times in person before, entirely thanks to the online communities I've participated in.
@Alexandros
Great job explaining some of the problems I touched on briefly, hope to maybe see you on KGS sometime.