初學者指南:為開源做貢獻

jopen 10年前發布 | 6K 次閱讀 開源

當我剛開始做Rails開發者時,我認為所有的Rails gems都是魔法。一些聰明人正在制作這些牛逼的類庫讓我使用!我不知道這些類庫有多少可以使用,我認為它們是好的。它們運行著,并做了我需要它們做的工 作。它們好像如此深奧、被想出來,以致于我甚至不知道該如何為它們貢獻力量,即使我想!

時至今日,我仍然沒有給Rails社區貢獻任何開源代碼。那是因為Rails社區在開源方面非常活躍,因此找到你要貢獻的東西實際上是比較困難的!當然你 能夠翻閱問題并試著解決,但是,老實講,它們通常太復雜了、令人望而生畏。有這些聰明人討論問題,你能足夠優秀地解決問題是難以想象的!

快進到Mobile Makers,那時候我剛接觸iOS,我第一次給開源代碼做了貢獻!從那以后,我做了更多,我不再害怕向甚至更多的項目貢獻代碼!下面是我如何邁出這一步以及在這個過程中我學到了什么:

它不是魔法

走出Rails社區,我很快知道了,大家對開源類庫事實上有某種不信任感。當我想一直使用所有的CocoaPods時(就像Rails!),團隊的高級iOS工程師總是質疑外部類庫的使用,如果可能,寧愿建立我們自己的類庫。

在iOS項目,有很少的iOS類庫可以一直使用的,大多數項目僅僅在開始的時候使用一些類庫!由于CocoaPods的出現以及刪除或升級依賴項是如何容易,情況正在發生著變化,但是它還達不到Rails的級別,你的大部分項目仍然由即插即用類庫構成。

意識到這些外部類庫不是魔法,我的心態改變了,也讓我較以前產生了巨大的改變。懂得了編寫類庫的那個人是一個真實的人,他會犯錯,或許不會寫出最優的代碼,他也不能一直考慮到所有的邊界情況,這讓我能夠輕松發現我能夠做貢獻的小的(或大的)地方。

關注就是共享

有一些人鼓勵積極尋找開源項目去貢獻力量,而我發現我貢獻的所有項目都是實際在我自己的代碼中用到的。

真相是,我沒有時間為了貢獻而去主動搜尋github上的問題/類庫。但是,當我在自己的項目中用到一個類庫時,我希望它具備X功能或那個bug Y被解決了,搞定并反饋回去是明擺的事!事實上,自從我喜歡向開源貢獻力量以后,當我發現這些機會時,我是超級激動的!

這把我帶到了下一個論點……

它是這樣一種美好的感覺……

向開源貢獻力量真的容易上癮!先前知道了如何編碼,讓計算機實現你的愿望是不可思議的,這讓你覺得你像個魔法師。但是,當你能夠把其他人的“有魔力的”代 碼變得更好、且他們認同你能夠使代碼變得更好(通過merge)時,這種感覺是無法用言語表達的。它就像你剛剛變成了10級的魔法師而不是1級。

小的開始

此外,我把開源貢獻者看做是用魔棒來作徹底改變、改進一切的魔法師,但實際情況是大多數變化都很微小。他們只是根據每個人的基本方式累計增加,并最終改變和完善了整個類庫。因此不要低估小改動的力量!

下面是個例子,我最近貢獻力量的過程:

修改一個README

我可能想把Toast類庫增加到我的iOS項目,但是他們在README沒有提到有可用的CocoaPod。既然我只是想測試我項目中的類庫,我想讓它較為容易地移除掉。因此即使我以前使用過這個特定類庫,也知道它好用,我開始為了另一個Toast類庫而搜索CocoaPod。

找了一些類庫,我發現這個特定的Toast類庫事實上就是CocoaPod!為了確保其他iOS開發者知道有可用的CocoaPod,我就CocoaPod安裝說明提交了一個pull request到類庫的README。小改動,但是希望對其他開發者有幫助!

增加額外相同的功能

在為CodePath最終項目構建Android app時,我的團隊想嘗試當前官方Android字體—Roboto。事實表明它在并入外部字體到Android時非常繁瑣,因此,我們使用名叫RobotoViews的類庫來解決。基本上,每個view不得不經過配置才能得到Roboto的typeface。

然而,有一個我們需要的類庫而RobotoViews沒有包括進來—較新的Switch view。添加Switch view只需按照其它views的方式大量地拷貝/粘貼,因此它的添加不是太難,但是另一個view可以作為RobotoViews使用!

換句話說,RobotoViews的作者已經做了所有艱難的工作使得只需要修改一些地方就可以添加一個新的view。

類似的,我通過給流行的iOS Foursquare client library添加原來沒有的一個額外功能來貢獻力量,只是因為有了作者抽象這個過程的工作,這非常容易添加。

重構

當我注意到帶有少量變化的三個函數有著相同的代碼時,我給ECSlidingViewController添加了一個非常小的修改,來確保在滑動菜單滑出去時鍵盤隱藏掉。因此我重構了代碼,產生一個函數,讓三個函數僅僅通過傳入一個不同的參數來調用它,因此將來需要改動這個函數的人只需要修改一次。

正如你看到的,我的所有開源貢獻都是非常微小、容易做的!當你堅持使用外部類庫時,你會看到相似的機會。因此向前走,并作出小的改動——它們是有價值的!

怎么做

看看這個偉大的《RailsCast:一步一步教你如何為開源貢獻力量》(它和非rails項目非常類似)。但是基本上,都有下面的幾步:

Fork

在Github上找到你想貢獻的類庫,只需點擊Fork按鈕!

初學者指南:為開源做貢獻

Clone

下一步,克隆你想fork的類庫——它現在應該在你的名字下(比如:NatashaTheRobot/ECSlidingViewController),而不是原作者!

初學者指南:為開源做貢獻

Branch, Change, Push

一旦你克隆了代碼庫,改變為代碼庫文件夾。接下來,用能夠反映你將要做的修改的、有意義名字來checkout一份新的分支。作出修改,push這個分支到github。

當你去你的Github profile主頁,你會看到一個大大的綠色“Compare and Pull Request”按鈕。看一下你的文件,確認一切ok。然后確信你給原始分支發送一個pull request(不是你fork的那個分支)。當你做完pull request之后,應該看看是不是這樣!再一次,確認你剛剛給原始作者的master分支的master做了一個pull!

初學者指南:為開源做貢獻

Tweet

這一步當然是可選的,但是我喜歡給作者發送tweet,告知他們變化。他們可能沒有打開github的通知功能,尤其是那些最近很少改動的、比較老的代碼庫,因此讓他們知道并展開一次溝通是比較好的。

他們或許太忙而沒有merge,因此當他們回復,并告知你,在他們有空的時候再去看。你知道你的pull request不會永遠懸而不決了!

Enjoy!

真的,為開源貢獻力量真的有意思,也是跟最好的人學習以及提高你自己技能的有效方法。希望這個向導能夠減輕你對開源的懼怕!!!

如果你已經貢獻了,請在評論里分享你的故事!

原文地址: http://natashatherobot.com/beginners-contributing-to-open-source/
譯文地址: 臘八粥

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!