Fork you ! or how the social coding can help you05 novembre 2010
With github and bitbucket coming around, a lot of new usages appears for the developpers: it's now easy to get feedback on your code/modifications, and to get help from others by, for instance, forking repositories.
Eeach time I see people helping others, I'm amazed by how we like to share our knowledge.
I say github, because it seems to be the more mainstream, but I think it's something strongly related to the DVCS principles: the "only" thing github have made is to turn that into a social network, and to reveal the awesomeness of the DVCSes to the masses.
What is really interesting is to see how this platform is addictive: it's automatically updating a webpages with the more accurate informations about the projects you're involved in, and add a bit of magic to that using webhooks, allowing you to update your website each time you push to you repository, for instance.
Quite nothing, indeed, but, I don't know why, I find this fascinating.
I haven't had the privilege to see my projects forked from github by strangers, but I've forked others repository to give an hand some times, when I wanted to, and the main reason is "because it's fun" to do so.
Yeah, you're probably right, you have to be a nerd to find fun to fork others. The good point is that geeks are a kind of nerds, and some geeks are coders :)
New ways to contribute
In addition, it seems that he community, or the communities, are there, on those new social networks for coders. It's really handy to drop an eye on interesting projects, to report bugs, propose new features, and check what new projects this or this person have made.
Well, "it's not new", you may think. That's true, because it's been a while that SVN was there and even CVS before that. But, it was a bit messy to "fork" a project, isn't it ? And I'm not talking about all the hell SVN involved with it (who have not had issues with those messy .svn folders raises an hand !).
It have not been so easy to share code and thoughts about code, to propose changes on existing code, than now. You think it's better to implement this or that in a different way ? Clone it (fork it), make your changes and publish them, and then ask projects owners about it. For sure you'll have answers.
Even if they don't want it, you can easily keep your changes, and keep getting their updates!
Also, lot of fashionables projects tend to move on DVCS. Personally, if I know I can fork on a DVCS instead of from a "simple" VCS, I'll probably be quicker to fork/clone, and to publish changes on my own copy, than if I had to do so on the upstream repository (and I'll likely dont have the rights to push to it), because I will not be afraid to break things.
DVCSes makes the contribution easier.
Release early, release often
Maybe have you read The cathedral and the bazaar, by Eric Steven Raymond ? (If not, consider doing so, it's a really interesting reading)
Among a lot of others interesting things, one hint he gives is release early, release often.
I understand it as: if you want to get contributors, release your code early, even if it's not perfect, and don't be afraid to publish your changes each time it's needed.
Without notifying it, that's basically what I was doing for my own projects. I guess that's because Social coding platforms encourages those practices, partially cause of the possible impact publishing each of your changes can have on your final solution.
If you have considered publishing your projects, code snippets, or whatever (code related) but did not done it, considering them not yet ready, maybe should you think about it twice: you can get feedback and probably start some interesting discussions about it, if you write code that's readable, of course!
A step further for open source softwares
Well, DVCSes are a honking great idea, and they're starting to be really powerful when applied to free softwares. I mean: if you can't see a project, it will be hard to contribute to it. And, I don't think anyone wants to contribute to something closed/proprietary, just for fun. Or maybe am I missing something.
Maybe it's a kind of revolution, about free and open source softwares (FOSS), that is going on. I really like to know I have my word to say about the changes in the tools I use, and to know that I can make them evolve.
Let's take an example. Imagine I'm using a web framework on daily basis, as a part of my job as a web developer. I do like using an open source software because I know how it's working, and because I know that I can interact with the authors of the framework while they're doing the changes on it.
That's communication, nothing more, and of course I can do that with an internal proprietary solution, but it will cost me a lot more time, for a dead-simple reason: a company is not as big and powerful as a community can be: it will cost time to work on this framework, resources to maintain it, fix bugs etc.
Well, I'm starting advocating here about Free and Open Source Softwares use on companies, what is a bit beyond the scope of this article, so let's back to our DVCSes and new social related tools.
If I find a bug in this framework, while working, I have the possibility to go and talk with the creators of the framework, to open a ticket, and even to make a fix for it, because I've access to the source code. If I want to create a new feature, I just have to fork it, hack it, and then publish my code to have feedback of the community.
My fix/work will benefit to all the people (and maybe others companies) working with this framework, and it's a way to prove the community that my company is enough skilled to make code-fixes to the framework, so that's all good !
What's next ?
I hope those social coding platforms are only the begining of a new area. I hope they will make people realize what the power of the community is, and how easily they can becomes part of it.
If you're not using them right now, maybe you should do so: have a look on how the programs you're using are made, consider publishing your experimentations, and share them with others, you will see, it's kind of addictive !