I want to share my experience about joining in a 2.6k-stars open source project as a beginner. Here is my merged pull-request.
Can I do more?
As soon as I finish course 170: Web development, the introduction on how to use Sinatra framework. At the last lesson, it asks students to build an optional project using Sinatra. I try to build my optional project. (it is an easy version of read-it-later). And I think that maybe I can do more.
self-hosted server experience
I am a self-hosted hobbyist,and one of my friends has a blog talking about different opensource apps that you can build on your server. I have some of them on my own server, like owncloud, Tiny Tiny Rss,Wallabag. But most of them are written in PHP. I don’t know PHP now.
Then I thought, maybe there are some similar apps written by Ruby? Then I go to the awesome ruby trying my luck. I found this one: Stringer, a self-hosted, anti-social RSS reader. And cool, it was written by Sinatra that I have just learned! I spent a whole weekend to understand the code. But I don’t understand lots of them. I try it as an user. I take notes about some bugs that I met while I installed this app. I encountered some problems while installing it:
- curb problem(so I try to use
gem install curb)
- I read open issues, which some users complained that he/she can not add some feeds.
- sinatra should be updated
I read the
README, it said:
Most of the heavy-lifting is done by feedjira and feedbag.
try to read more codes
Cool, then I go to read the documentation of feedjira. I read some open and closed issues. There are some people said that if you upgrade to version 2, you can fix the problems with adding some feeds. So I try to change my Stringer app on my server. It cannot works. So I try to understand this app following by what I’ve learned in course 170. Then I try to fix some code on my own. It works!
Actually, by reading the code, I’ve learned some more concepts. (for example, this project use delayed_job to execute some background job in Database. Since my app didn’t work after I made this change, I try to understand how it works, and disable it for testing my code.)
If you have already finished course 170, you have the ability to contribute to the open source world!
Start with fixing your problem
My original idea is simple. I want to use some tools, and then I encountered some problems. I try to fix it on my own. And I am able to do it?! So I do it. I believe I learn a lot from these experience. I am forced to read lots of documents. Although I am not familiar with these advanced topics, I am at least not afraid of using them.
READ a lot of code
I am inspired by the DHH’s talk in RailsConf 2014 about Writing Software. He said writing software is like writing novels. If you want to be a great writer, you have to read lots of books and write lots of paragraphs. The same as a software developer. You have to write/read lots of code. In this video, he said it is easier to use
bundle open <gem> to read the source code of the gem you installed. Do you have somegems in your application, do you take some time to read other people’s code?
There is a short essay in 37signal:
If you are trying to decide between a few people to fill a position, always hire the better writer
Don’t worry if your code not merged
If your pull-request are merged, it is good. But it is also an enjoyable experience if your pull request can not be merged. Maybe you can fork it to start a new project, making more cool changes on it. Some projects are abandoned. And some authors don’t use this project anymore. By doing that, you are forced to read lots of code and documentation.
There is a detail guide. It show people how to contribute, how to start, and find more users to your projects and more.