Fork you ! or how the social coding can help you
#################################################

:date: 2010-11-05

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
<http://www.catb.org/~esr/writings/cathedral-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 ! 

.. _github: http://github.com
.. _bitbucket: http://www.bitbucket.org
.. _DVCS: http://en.wikipedia.org/wiki/Distributed_revision_control
.. _FOSS: http://en.wikipedia.org/wiki/Free_and_open_source_software
