Last week, I did my first effective contribution to a free software project (Nepomuk-KDE). Although the commit message doesn't tell it, the change was very simple; just a small refactoring. But before getting to that, I'd like to say a little about how KDE seems to welcome new developers.
First, there is the KDE Developers Guide, a concise e-book summarizing what you need to do to begin. I chose a cool project and tried to compile it, cloning Nepomuk's git repository and trying to build it as usual (cmake + make). After solving some dependencies (needed to install soprano's development packages), I managed to build it. But then I wondered if I would have to compile a whole KDE Environment to develop and test it, because of the nature of the project. The KDE Guide tells you to ask the developers directly in this situation, and so I did. I went to its IRC Channel and said I wanted to contribute. In a while, I got an answer from jEhrichs. And no, I didn't need to compile the entire KDE :)
After a couple of days, I talked to Vishesh Handa (vHanda), one of the main Nepomuk developers, and he pointed me to how I should build Nepomuk - inside a build environment, in which I would install it so it doesn't interfere with my system's installation. The process is thoroughly explained in the Techbase. After that, I was ready.
Also, there's KDevelop. It seems to be a very neat IDE, that integrates with many tools common in KDE's development (Git, CMake, Make, even Review Board!). One nice feature it has is to create a project from a CMakeLists.txt file. The auto completion works wonders, too. I still didn't try to integrate it with my build environment, so I'm currently compiling from a terminal and only using KDevelop to edit the source code. It's hard to beat the command line interface in practicality, so I'm not very tempted to do everything from the IDE, but I'll give it a try later on.
If all that documentation and kindness from people on IRC is not enough, KDE's Bugzilla has a tag called "junior-jobs", that's used to mark considerably easier tasks - those that are appropriate for a beginner to tackle. vHanda pointed me to this task. It was very simple indeed. I provided the patch, and it was accepted and pushed! Hurray!
The next issue I tackled was to add a button to make Nepomuk check for new/changed files. KDE has a standard regarding usability, and I've already learned some from that. Choosing where to put a button was harder than I imagined, especially because programmers rarely worry too much about such decisions. Just in reading the Techbase and discussing my patch in the code review, besides learning some things, I realized how bad many user interfaces I made before were. There are some simple tips, like not using an annoying dialog to tell the user something not-that-important and force him to click OK, that I had always missed... Usability is one more thing KDE will teach me :)
However, this last patch won't be pushed soon, because the KDE Release Schedule has already closed the period in which new strings can be added. That's fair, given that the UI needs to be translated and there isn't much more time do to that before the next release, KDE SC 4.10. So, it will have to wait until 4.11.
But before that there's plenty to do! There are new issues and junior jobs in the Bugzilla waiting for patches. Doing them is a concrete way to get more used to Nepomuk's architecture, source code and tools. As soon as I get the time, I'll code some!
Summarizing: it's wasn't hard to start contributing. There is work for newcomers, and the community is open, just like the source code :)