How to contribute to an Open Source project?
In the article on how to prepare for a Perl job interview, I mentioned, one of the best ways to improve your hireability is to constantly learn new things, and constantly improve yourself. The same is true for any language and technology.
Probably the best way to do that is by building something. If it is an open source project it has the added benefit that you can show the results to the prospective employer.
You don't even have to build something from scratch, you can also contribute to an existing project.
But how? And do you need to be an expert or can a beginner join a project?
I think one of the best ways to contribute to an open source project, especially if it is a library that should be used by other programmers, is to prepare examples. There are tons of Open Source projects that would benefit from better documentation and/or working examples.
So even if you are a beginner, you can try to use a module and write a minimal example. If you also add explanation to the example it is even better.
Who can contribute?
Before explaining the how, let's see the prerequisites. I would say there are no prerequisites, but that would not be really true. You are expected to be able to communicate - at some level. If you feel your command of the English language is not good enough, you can try to find other people speaking your language. Check out a Perl Monger group or some near-by Meetup that covers the technology you are interested in.
You are expected to be able to be nice to other people. Though I saw quite a few people who seem to think being nasty to others have some value, but frankly I think they just look for excuses to be nasty.
Do you need to be an expert in the field? e.g. an expert Perl or Python programmer?
You probably should have some understanding of version control systems. Particularly Git and GitHub which has been the favorite by many developers.
Find a project
The first thing you need to do is to decide what project might interest you.
If you are using Perl, there are tons of Perl modules on CPAN.
For Python programmers there are Python packages on PyPI.
Lots of Ruby Gems on, well, RubyGems.
PHP code on PEAR.
Just to name a few.
Most of them have bugs, missing features, or missing documentation.
What to contribute?
Once you've located a project that sounds interesting and relevant to you, find the bug-tracking system of the project and check what bugs are reported there.
You might get lucky and even find marks showing which bug is expected to be easy to fix.
If none of them seem to be for your level of expertise you can see if there are tests for the project. You could write a test case that reproduces one of the problems. Submitting that would be a huge help as well and knowing how to write unit-tests is an advantage when you get to a job interview.
How to contribute?
Most active projects have a public version control system. The vast majority of them are using GitHub. So check if the package links to its version control system.
Find a bug or a feature request and try to work on that.
One of the important things to remember is that the people who have published these Open source projects almost always do that in their free time sharing the code as a gift. That's what you are doing too, but this means you cannot go and demand that they will include your work in their project. Unfortunately you can't even expect timely reply to your suggestions.
It would be nice, and in an ideal world they would reply within a few hours, but there can be lots of reasons why they don't do that.
So prepare small changes. Small examples. Both to make it easier for them to review and that you won't feel you wasted a lot of time if your contribution is not accepted. Actually think it this way:
In order to practice you need to solve problems. You can work on totally made-up exercises and then throw away your code, or you can work on projects of other people. In the latter case if you are lucky your code will be used in the project and even if not, you are better off than with the made-up exercises.
Anyway, be patient. Remember, the person on the other side is a developer just like you. Maybe with a bit more experience.
Most importantly enjoy the process. You are always learning something.