Open Source Contributions Come In All Shapes And Sizes
Listen: Billy Pilgrim has come unstuck in time.
Okay, that has nothing to do with the subject of this post, but when I tweeted out a request for suggestions for an opening line, that was the most interesting response (thank you, @kantrn). I got others that were a lot more helpful (thank you @justinlilly) - that's the power of community, right?
Here's the real deal: A lot of people think that only internet-famous rock star programmers can contribute to open source projects, but in fact open source communities thrive on contributions from everyone, from beginners to experts, even non-programmers.
Contributing to Community
Lots of open source projects and languages are looking for contributors, but since Python and Django are the communities I'm most heavily involved in, those will be my point of focus here. If there's another language/community you're more interested in, a good Google search will unearth a wealth of resources.
Of course, code is where it all begins. And if you're unsure of your own skills and hesitant to dive in, just stop that. No matter what your experience level, you'll find that you can add something. The only way to know is to start. Read the issue trackers - both Python and Django have them:
As you're combing through the bug tracker, find something that strikes a chord, maybe a bug that you yourself have experienced in working with the framework or language. Verify that the bug exists. Dig into the code and see if you can find the source of the bug - you'll learn so much from an exercise like that.
At this year's DjangoCon, Russell Keith-Magee gave a great talk, one that he improves on every year, about "making the leap from user to contributor". Go take a look - everything he talks about, from triaging tickets to submitting patches, applies well beyond the Django framework project.
The Python Developer's Guide also has some great information about reviewing tickets and submitting patches.
Open source your own code
Have you written an app that you think other Django users would find useful for their projects? Or a script that might help other Python users make some repetitive task easier? Give it to the world! Open source it (as long as it's not something you wrote for your employer)!
If it's a full-blown app or project, you can put it in a public repository in a place like Github or Bitbucket. As far as licensing goes, the best resource I know of to guide you to the right decision is a book: Intellectual Property and Open Source: A Practical Guide to Protecting Code, by Van Lindberg.
Organize user groups in your local area
If there isn't already a Python or Django meetup in your city, start one! It's easy enough through Meetup.com, and although the organizer's fees can be a little steep, you can always apply to the PSF and DSF for help in defraying the costs. And if there's an active tech community where you live, recruiters will be knocking down your door to act as sponsors, and companies with space will be lining up to offer you a place to meet.
If you'd rather not go the meetup.com route, there are other, less formal ways to get started. Create a Google group and promote it on Twitter or IRC. Find a coffee shop or restaurant with a meeting space. Build a local network. Trust me - you'll be glad to have a like-minded developers to share ideas with that you don't have to wait until PyCon or DjangoCon every year to see.
Organize classes! Teach what you know!
Before I left Portland, I had the amazing opportunity to join in teaching a group of women at the Python Women's Workshops held there this summer. We worked through the meetup and the local Python user group to make the arrangements, and our classes welcomed women (and their male friends) of all experience levels.
My point is this: To get involved with most of these programs, all you have to do is offer your time - volunteer as a mentor or a teacher. For everything you already know, there is someone else who hasn't learned it yet. And a lot of these classes have open-sourced their curriculum, so you have material to teach from if none of those organizations exist in your city and you want to start your own.
Reach out to local schools
Computer Science education at the K-12 level is getting a special spotlight this year, helped in part by Selena Deckelmann's keynote at this year's DjangoCon - "While we're here, let's fix computer science education". Members of the open source community are still trying to figure out exactly where best to start helping, but one place to begin is the organization Computer Science Teachers Association.
You can join the CSTA for free as an individual member. They're not just looking for computer science faculty - they're actively seeking "members from industry interested in supporting computer science education and teachers". I'd like to think that we all qualify. And I'm guessing it will be a great way to learn at a higher level what kinds of things public school CS programs do and what they need.
If you're with a company that uses Python or Django, think about encouraging your organization to give back financially. It's true that "open source" means you get to use these projects for free, but at the end of the day, the developers who work on them give up a lot of personal time and give a lot of energy. That code doesn't write itself.
One of the biggest frustrations many developers experience with working on an open source project is to get companies that use open source to give back. CEOs and CTOs, when asked "will you donate", ask "What do I get in return?" -- as if an open source stack of software that they received for zero cost and zero ongoing royalty, and has enabled them to generate millions in revenue, somehow doesn't count for anything. The idea that open source is a collective effort just doesn't seem to occur to them.
Some companies really do get it. They donate money; they donate resources; they donate employee time. But the vast majority simply don't. They will happily use open source software, but it doesn't even occur to them that the only reason that new features are added, or bug fixes are made, or security holes are patched, is because there is a team of people volunteering their time.
The volunteerism isn't completely altruistic. Anyone who has become a significant contributor to a major open source project gets a lot of publicity that certainly doesn't hurt their careers. But ultimately, it is still volunteering, and if the volunteers on a project don't have any spare time, then the project doesn't progress.
At some level, this is something big open source projects need to manage. But there are limits to the extent that it can be managed, because you can't compel a volunteer to do anything. You can only rally the efforts of those who can volunteer. And yet, this is a problem that companies can fix -- they have access to money, which can buy time.
The idea behind open source is that if everyone contributes a little bit, we all end up with a product that is better. Somehow, that utopian vision has turned into a situation where only a small number of people contribute, but everyone still expects to benefit. In some respects, this is just the "tragedy of the commons" that affects all utopias. However, that doesn't stop us from dreaming of a better world where people contribute because it's the right thing to do, not just because they're forced to.
The Django Software Foundation even has a program for corporate members to get involved, with participation in membership discussions and meetings (and tax-deductible dues!).
And if you're based in a city with a thriving or growing tech community, consider donating your conference space or even offering sponsorship for meetups. How to get involved? Just do a quick search on Meetup.com for local user groups and contact the organizers - they'll take it from there.
As an individual developer, of course, you're still free to donate to those foundations at any time. You might also want to consider GitTip, where you can commit to providing a small weekly payment to individuals or organizations in appreciation for their hard work.
Personally, I suggest:
Last year, I wrote a series outlining in detail the process of contributing documentation to the Django framework. It's a lot easier than it looks, and the need is great. If you've got a knack for writing, this might be your niche.
Python's developer guide also covers Documenting Python, but in slightly less detail.
Every time you learn something, you can teach it to someone else. When you figure out how to do something new or something neat with code, blog about it. That's why I started this blog - as a way to fill in the gaps in the Django documentation, and to add to the grand collective of coding knowledge that's out there. Believe me, I look back at some of my older posts and cringe a little at how simple they seemed at the time. But nearly every day, I hear from people who thank me for helping them get past something they couldn't quite figure out.