I've thought for about six months now that I should join an open-source iPhone or iPad project to hone my skills in Objective-C, but every time I go to do it I see thousands of lines of code on huge projects that I end up convincing myself I would never understand. I always think that my commits would just end up being a hassle for project admins and more senior contributors, so I always back out at the last second.

My question essentially is, is it a hassle when an intermediately-experienced programmer joins an open-source project?

Fix many low-priority but easy to fix bugs (great exposure to code, devs are usually happy, low risk)

There are ways to contribute without commit access to the core source, such as:

Submitting patches, which can be commented on.

Forking and submitting pull requests (see above)

Forking and working away on your own, just to see where it takes you. If you're happy, ask the devs to take a look at whatever you've done to see if it makes sense.

To overcome your "fear" of not having your commits accepted, go for safe points at first. This will allow both you and the dev-team to gain confidence in your relation, and to learn each other's way of thinking. As you improve (both in skill, experience, code quality and understanding of your OS project's team and it's dynamics) you will be able to tackle greater task while introducing less hassle.

It also helps in asking for suitable starting points, and see what the team might find suitable for you.

As an example, I've contributed a bit to Buildbot over the years. I started just fixing a few small issues, then I bumped the quality of the Mercurial source steps by fixing some glaring bugs. Finally, I rewrote most of the Web-pages and swapped out html-pasting in code to a template based HTML generation solution. The latter was a few hundred commits over a few months of hard work.

I've also done some Mercurial work, but those guys are more picky and the technology is more complicated, so I haven't yet gotten any fixes into the core. I've made a few bug reports and written a few small extensions, but I haven't gotten anything bigger off there at the moment.

+1 for buildbot - it's a fantastic project, with very nice, helpful maintainers. If you want a good project to start with, it's definitely worth a look.
–
NateOct 24 '11 at 22:39

what about complete amateurs? People who have a low programming level and no official education?
–
RoyJul 10 at 0:27

1

@Roy In that case, I'd start by foirking and just tinkering with the source to learn from it. Getting to the point where you contribute effectively takes a bit more time. You are probably better of starting by following some good tutorials by yourself (for the project and it's frameworks/libraries) and build your knowledge so you know where and how to contribute. Game mods (and plugins) can be an excellent in-between being alone in the sandbox and having the level of core devs.
–
MackeJul 14 at 17:10

Jump in. Monitor the development lists for a while and introduce yourself when you feel comfortable. Many projects have some easier Jobs in bug-fixing or documentation which the regulars will be happy to point out to you.
Most Projects are quite friendly to new hands, and they will bring you up to scratch fast enough so that you may become a real asset to the Project.

After a while you will be familiar with the structure and the most important parts of the code base. Learning to understand code like this is a really important part of programming, and open source is a great way to learn it.

Go for it. There's tons of beginners doing the same. The project lead can help find you things to work on that aren't out of your league. You gradually grow into the rest.

Oh, and just because you don't understand the code doesn't mean it's good. I've seen some seriously horrible code out there. Some of it's hard to understand because it's poorly written and made to be much more complex than it should be.