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


With [github](http://github.com) and
[bitbucket](http://www.bitbucket.org) 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](http://en.wikipedia.org/wiki/Distributed_revision_control)
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](http://en.wikipedia.org/wiki/Free_and_open_source_software)),
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 \!
