The Personal and Professional Benefits of Contributing to Open-Source
Posted on Jun 24, 2010
It struck me the other day that I have greatly missed contributing to
open-source projects on a more significant scale than I have managed
lately. Part of what hit me was that, while I felt that I had learned a
lot from a technical knowledge standpoint in the past couple years, I
hadn't grown as a developer as much as I'd hoped and I think a good
chunk of that can be attributed to the change in the nature of my
personal open-source contributions. It turns out that while you can read
books and develop projects at your particular place of work, there is
no substitute, in my opinion, for contributing to some of the community
open source projects in terms of what they can teach you. Let me
Finding Common Reusable Solutions to Large Complex Problems
Your day-to-day work tends to rely on both your technical skill and knowledge but also, in more ways than you probably know, your knowledge of the particulars of your organization. As I am sure you are aware, that knowledge of your organization affects even the way you code. I know what shortcuts I can get away with or what level of documentation I can get by with (or lack thereof) or even specifics about our development team and environment that allow me to avoid the need to search for more generalized solutions to problems.
This is a luxury however that large open source projects do not have. You do not know what environment you will be deployed on. You can't bank on any level of prior knowledge of the project by your "customer" or, oftentimes, even the skill level of the programmers who might utilize it. The lack of specific knowledge about the usage and environment of a project forces you to think about problems in a very different manner. It gives you the chance to understand the complexities of certain problems in a way that you may never encounter otherwise. Learning how to deal with this complexity can make you a better programmer, even in the closed-environment of your day job.
Get to Work in a Team Environment with Really Smart People
Regardless of what your primary coding language is, many of the community leaders and otherwise ridiculously smart people are involved with these projects. Not only do you get to work with, and hopefully learn from, them but you also get the benefit of working in a team. Many of us are used to solo coding; even if we are on a team at work, we may simply be assigned a task and work on that alone. In my experience, the large open source projects that survive do so in part because of great leadership and organization - so you will very often find fantastic opportunities for collaboration among these teams. You may need to be willing to take on small bugs at first, but your opportunities will surely grow as your involvement does.
Contributions Do Not Have to All Be Code!
So you may be thinking that volunteering for an open source project sounds like a worthwhile venture right now, but you are worried that you don't yet have the chops to dive into complex, multi-platform codebases - you just use the project on a regular basis. Well, not all contributions are code. In fact, my own contributions were often to the documentation by writing articles and tutorials that would end up on the wiki or blog of various projects. In fact, I guarantee that most any project would welcome a documentation volunteer with open arms. The fact that you are not directly contributing code won't negate the benefits of volunteering and will give you the chance to dive into the guts of the project and get comfortable with the code before, maybe, expanding your role within the group.
Pick Your Project with Forethought
So, don't just go and volunteer for any project. Give thought to who is involved with the project (even personalities are important when working as a team), your prior level of knowledge with the project and the scale of the project. The scale of the project is important because there are lots of small, one-off niche projects out there and these don't tend to offer many of the benefits I mentioned above. A little, single-file component you posted on your blog or open source site doesn't count really (trust me, I build a lot of those). You want to choose something that you will feel comfortable with but will challenge you - the goal here, remember, is to use this experience to become a better programmer! I found frameworks, CMS systems, blog engines to be great examples of the types of challenging projects that will meet this goal.
So, give it some thought, but in the end, pick your project, send off an email and get involved. I plan to do the same.
I think that ANY sort of contribution to the coding community is worthwhile, whether it be code, documentation, forum posts, blog posts, twittering, comments... it all helps everyone out (and it all gets indexed!)
Posted By Russ S. / Posted on 06/24/2010 at 12:32 PM
I sometimes wonder why I continue contributing to FOSS projects.... the constant stream of demands for new features, complaints when things don't work (or don't work as users would like), criticisms of speed of response to requests for help/features (when I do have a day job and a life to balance with my FOSS development), demands for help from people who can't be bothered to read the documentation.... there seems to be an expectation that FOSS developers are available 24/7/365 to pander to every want of the users, who pay nothing and expect a platinum service.
And rarely, perhaps just once or twice a year, I get a "thank you" message from somebody that has benefited from my software; and that's when I know why I do it.
Posted By Mark Baker / Posted on 06/30/2010 at 9:40 AM
@Mark - I hear you. It's usually when you hear from the "silent majority" of users who are extremely grateful but don't send you emails that you feel gratified. You will notice that I didn't mention anywhere the grateful response of the community :) However, there are other benefits as I mention and those sometimes get lost in the flood of bugs/complaints.
Posted By Brian Rinaldi / Posted on 06/30/2010 at 10:13 AM