By my own estimation, I'm at an intermediate level of my preferred language (happens to be python, but not central to what I'm asking): I'm capable of understanding most of what I read, and of writing what I want, but I know there's a lot of learning still to be done (not that it ever ends...)<p>I think that contributing to open source projects would help me learn a great deal about being a better programmer - and especially about programming as part of a larger project.<p>Another reason for doing this is just to contribute, to give something to the community. But I'm not at the level of making my own useful things for people yet, so I'd like to help out on existing things.<p>So, how do I start? Is there any central 'help wanted' noticeboard, or do I have to go to every project I might be interested in and check out what they need doing? And if the latter, what are some good ones that might need some help? (For me that's python projects - but feel free to add others as replies for other readers' usage)<p>Any advice appreciated. Thanks.
Scratch your own itch for purely selfish and pragmatical reasons... the rest will come by itself.<p>A quick story:<p>A long while ago I liked to dabble on video editing using Linux (That was installed on the only box I had with the horsepower required). The choices where not many, the one I decided on was (and still is) overly complicated, with very little info on how to use it. I started learning the hard way, It was hard, foreign to non video people and had plenty of bugs but no show stoppers..<p>Then for my own selfish needs, I started writing a manual for the thing, the catch was that I had the good idea of putting it on a wiki, so others would also contribute.. Because it was something actually useful, pretty soon people started dropping by, saying thx and a few even contributing articles..
Few months later, someone asked to translate it to slovenian, then someone else to italian, then rusian,spanish and so on.. After a while we had quite a nice manual that in turn help to make the program popular, which in turn got more developers involved, who then fixed the bugs that I initially encountered and could not fix because I suck at C programming.<p>I never meant to do anything of this.. I just had personal needs and did something about it. the catch is to share your work with others not expecting to be paid in any way what-so-ever.. (other than to enjoy other contributors work)
Choose a project that you use yourself and implement something that you would like to see in it. Or go to its bug tracker and start fixing stuff. Subscribe to the mailing list, hang out in the irc channel. Let them know what you want to work on, to find out if anybody else is already doing it. Get feedback on your contributions, and give feedback on others. But work on a project that you use. Easier to stay interested.
First, well done for wanting to improve your skills and contribute. You might find these links useful (especially the first, which is identical to your question):<p><a href="http://stackoverflow.com/questions/117561/what-are-good-open-source-projects-in-python-for-which-i-can-be-a-contributor" rel="nofollow">http://stackoverflow.com/questions/117561/what-are-good-open...</a><p><a href="http://pythonsource.com/" rel="nofollow">http://pythonsource.com/</a>
There is no real central repository for open source contributors. In fact, most help comes from real users with real needs.<p>To get started, first choose a project that you use and like. Think as a user, what would you do to make it better. What features do you miss?<p>If you can't find any, go to their bugzilla and search for possible easy fixes to get started... Don't contact their developers before you have some code/patches in hand (lots of people talk about helping, but few do).
Remember that code isn't the only form of contribution,You can provide non-code help as well. Add/Update documentation of open source projects.<p>The only reason why RTFM fails is because documentation is outdated or non-existent.<p>With intermediate level this is lowest bar to achieve, and you will learn a lot just documenting the stuff as you will be forced to understand internals.
Start with projects that you personally use and enjoy! You'll have more insight in the project, and you'll feel more motivated. (e.g."I'll write a patch for feature X becuause I want to see it in the next release.")<p>Look for projects that are in the middle stages of maturity. A project that is too mature will require technically difficult work; one too young will require lots of discussion on design and specification.<p>Work on easy tasks first, such as minor bugs or gaps in documentation. These tasks tend to finish faster, and they'll encourage you to go on to tougher stuff.<p>Get familiar with the tracker (e.g. Trac, Bugzilla) and repository (e.g. SVN, Git, Mercurial). In particular, know how to create and submit a patch. Most projects rely on these tools for collaboration, so you should cater to their workflow processes.<p>Good luck!