People occasionally say “I’m a developer, how can I get started?” or “I’m not a developer, but I want to be! How can I get started?”
The answer is both more and less complicated than you think.
I’m not going to answer “How do I learn to program?” or “What should I be working on?” Instead, I’m more interested in answering “How does work get done?”
In my description of my first Dogecoin PR I mentioned that I saw something small and easy to fix, and I did it. I have the advantage of years of experience programming in various languages, years of experience reading and writing and editing documentation, and years of experience using and developing and contributing to and releasing free and open source software.
If you have any combination of those skills, you know the first answer to the question.
Just Do It
People contribute to open source projects by contributing to them.
Maybe you’re like me, and you saw a typo and you recognize that even a tiny contribution like that will make the lives of other people better, so you make the change. Even though anyone could do it or could have done it, it hasn’t been done yet. You’re someone. Just do it!
That doesn’t explain all contributions, because other times, people want something but it’s not there.
You Need It
It’s hard to think more highly of the people who provide translations for open source projects. In my mind, these contributors are too often overlooked because their contributions are so valuable.
It’s easy for someone like me who grew up in North America and speaks English natively (and who has spoken English in other countries even where English isn’t the primary language) to assume that writing documentation or UI elements or error messages in English is good enough.
It’s not. It’s never good enough.
Some contributions come from people who look at something and say “I like this, but it’d be so much better for me and people like me if we could read this in Arabic or Kiswahili or Tlingit.” If the project’s set up to support translations and localizations like mature projects should be, they do the hard work of translating often technical thoughts and concepts and messages from one language into another.
Of course there are other types of need-driven contributions, such as missing features or bugfixes, but it’s important to recognize both the value of translations and the importance of contributions that don’t always seem like writing code.
If you’re still not convinced, look back at the rise of the Ruby programming language between 2000 and 2005. It came out of Japan without much in the way of English guidance or documentation, and it took a real effort from people like Dave Thomas and Andy Hunt to explain it to an English-speaking audience. Broadening the potential audience for your project increases your chance of success.
Of course, other contributions come about because people want to do something interesting.
You Enjoy Contributing
I didn’t pick up the task to import private keys in the Qt
GUI because I wanted to import private keys in
the Qt GUI. I’m comfortable on the command line. I don’t mind using
dogecoin-cli
or making RPC commands from a program.
I picked up the task because I thought it would be interesting and I wanted to learn something.
I recognize the privilege I have in doing so; there would be no cost to me if I failed. I didn’t even have to mention I was working on it until I had a PR I thought was worth sharing. None of my job, reputation, or sense of self-worth depended on completing the work or getting it merged or even reviewed.
I think a lot of people who ask “How can I contribute?” are in this group.
That’s not to say it’s bad to contribute if you’re looking to improve your skills or put something new on your resume or impress potential employers or colleagues. It’s good to learn new things, and it’s good to contribute to projects you use and enjoy. There should never be any gatekeeping about the “purity” of a contribution if you get something tangible out of it.
In fact, if you don’t enjoy the process, you shouldn’t contribute. It’s important to recognize when something is demotivating and unpleasant.
There’s one more major reason people want to contribute to a project, and it’s not mutually exclusive with the other projects. It’s because they believe in what it’s doing and can do.
You Share the Vision
Way back when free and open source software began, before we even used those
terms, people shared code because they thought it would be better that way. If
you look at the history of tools like diff
and patch
and vi
, programmers
wanted other programmers to be more productive. (Or, at least, they wanted
themselves to be more productive, and they didn’t mind helping other people,
figuring that what goes around comes around.)
People contribute to databases like SQLite and PostgreSQL not necessarily because they wake up in the morning passionate about the relational calculus, but because they know that having great software like this makes the world better.
People don’t contribute to projects like Kubernetes or Bazel or XML::Rabbit
because they love orchestrating software container deployment, enabling
hermetic builds, or accessing structured documents via object mapping, but
because it helps them and other people achieve bigger things.
People don’t contribute to Dogecoin because they want to distribute a Shiba Inu joke across tens of thousands of computers in a permanent, distributed Merkle tree, but because they see the value of a decentralized currency and payment system.
I want to believe all these things. I could spend my time in a lot of ways, but across my work in the free and open source world, it all comes back to this: I think we’re better off building things together because we enjoy them and because we build things better when we collaborate.