Created
May 25, 2014 17:40
-
-
Save alindeman/383177af82e7af2e27c0 to your computer and use it in GitHub Desktop.
Re: Contributing to open source
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
> Dan Buch of Pittsburgh aka meatballhat suggested I contact you. I'm | |
> transitioning into Ruby and Rail from another completely unrelated profession | |
> and I'd like to contribute to open source projects as much as I can. I think | |
> it'll help me move beyond tutorials and books. I've gone through several of | |
> them already, including Michael Hartl's free tutorial as well as Pragmatic | |
> Programmers' Programming Ruby. Do you have any recommendations? | |
It’s great to hear that you want to contribute to open source! I had dreams of | |
contributing to Rails itself and maybe even become a regular contributor. | |
However, the framework code itself was completely overwhelming to me as someone | |
just learning. I focused on exploring gems that were commonly used alongside | |
Rails. I eventually landed on RSpec and ended up being a core contributor for | |
some time. | |
Popular open source projects often have many issues reported against them, but | |
the maintainers also frequently have difficulty triaging so many of them. In | |
some of the cases, it’s very clear what’s going on and how to fix it. In other | |
cases, the issue has been reported by someone lacking enough context to debug | |
it effectively. I think this area is where new open source contributors can | |
shine, especially if you like the thrill of the hunt: find issues where detail | |
is lacking (e.g., no error message, no backtrace, no version) and ask the | |
original reporter to provide some of these details. If there is enough detail | |
to figure out how to reproduce the issue yourself, but there isn’t yet an | |
automated test case, try writing one and making a pull request with just the | |
new test. Even if you aren’t comfortable fixing the issue, an automated test | |
case that’s failing (“red”) is a huge help and will likely motivate the core | |
contributors to fix the issue sooner. And furthermore, the test doesn’t | |
necessarily have to be the best test: just the fact that it demonstrates the | |
issue in a way that everyone can reliably reproduce is good enough. | |
By writing automated test cases for bugs, you’re also exploring the code base, | |
getting familiar with the conventions, patterns, and existing design. Soon | |
enough, it’s likely that you’ll have enough context to start adding new | |
features or fixing bugs yourself. And that was probably the goal all along, but | |
I think it can be too overwhelming to dive in all at once sometimes. | |
Some folks also recommend writing documentation as a way to get started. I’m | |
skeptical that this actually works in practice, at least for certain kinds of | |
documentation, but certainly it is nice to look at projects with fresh eyes and | |
improve the documentation in such a way that it would have made your life | |
easier upon first using it. | |
Hope this all makes sense. I’m happy to go into more detail. Good luck! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I agree that raw documentation is not an easy way to get started. It is too easy for documentation to go stale while the code advances. I like the idea of triaging new bugs, but I would be impressed if someone who was trying to make the leap to contributing from little experience with production code could consistently repro with minimal additional information. From my experience, many folks who send in low-context bug reports just evaporate. That can be frustrating. I think sometimes the best way to start contributing is to use the software "for real". Is my code live on the web? Has it crashed, or was it slow? Did I figure out why? I think the first step to contributing is to deploy the open source code I want to contribute to on heroku, ec2 micro instances, or the like. Try to get the wide web to abuse my code, and it will probably break. Then contribute fixes from those failures. Just my 2c.