初學者指南:為開源做貢獻
當我剛開始做Rails開發(fā)者時,我認為所有的Rails gems都是魔法。一些聰明人正在制作這些牛逼的類庫讓我使用!我不知道這些類庫有多少可以使用,我認為它們是好的。它們運行著,并做了我需要它們做的工作。它們好像如此深奧、被想出來,以致于我甚至不知道該如何為它們貢獻力量,即使我想!
時至今日,我仍然沒有給Rails社區(qū)貢獻任何開源代碼。那是因為Rails社區(qū)在開源方面非常活躍,因此找到你要貢獻的東西實際上是比較困難的!當然你能夠翻閱問題并試著解決,但是,老實講,它們通常太復雜了、令人望而生畏。有這些聰明人討論問題,你能足夠優(yōu)秀地解決問題是難以想象的!
快進到Mobile Makers,那時候我剛接觸iOS,我***次給開源代碼做了貢獻!從那以后,我做了更多,我不再害怕向甚至更多的項目貢獻代碼!下面是我如何邁出這一步以及在這個過程中我學到了什么:
它不是魔法
走出Rails社區(qū),我很快知道了,大家對開源類庫事實上有某種不信任感。當我想一直使用所有的CocoaPods時(就像Rails?。?,團隊的高級iOS工程師總是質(zhì)疑外部類庫的使用,如果可能,寧愿建立我們自己的類庫。
在iOS項目,有很少的iOS類庫可以一直使用的,大多數(shù)項目僅僅在開始的時候使用一些類庫!由于CocoaPods的出現(xiàn)以及刪除或升級依賴項是如何容易,情況正在發(fā)生著變化,但是它還達不到Rails的級別,你的大部分項目仍然由即插即用類庫構(gòu)成。
意識到這些外部類庫不是魔法,我的心態(tài)改變了,也讓我較以前產(chǎn)生了巨大的改變。懂得了編寫類庫的那個人是一個真實的人,他會犯錯,或許不會寫出***的代碼,他也不能一直考慮到所有的邊界情況,這讓我能夠輕松發(fā)現(xiàn)我能夠做貢獻的小的(或大的)地方。
關(guān)注就是共享
有一些人鼓勵積極尋找開源項目去貢獻力量,而我發(fā)現(xiàn)我貢獻的所有項目都是實際在我自己的代碼中用到的。
真相是,我沒有時間為了貢獻而去主動搜尋github上的問題/類庫。但是,當我在自己的項目中用到一個類庫時,我希望它具備X功能或那個bug Y被解決了,搞定并反饋回去是明擺的事!事實上,自從我喜歡向開源貢獻力量以后,當我發(fā)現(xiàn)這些機會時,我是超級激動的!
這把我?guī)У搅讼乱粋€論點……
它是這樣一種美好的感覺……
向開源貢獻力量真的容易上癮!先前知道了如何編碼,讓計算機實現(xiàn)你的愿望是不可思議的,這讓你覺得你像個魔法師。但是,當你能夠把其他人的“有魔力的”代碼變得更好、且他們認同你能夠使代碼變得更好(通過merge)時,這種感覺是無法用言語表達的。它就像你剛剛變成了10級的魔法師而不是1級。
小的開始
此外,我把開源貢獻者看做是用魔棒來作徹底改變、改進一切的魔法師,但實際情況是大多數(shù)變化都很微小。他們只是根據(jù)每個人的基本方式累計增加,并最終改變和完善了整個類庫。因此不要低估小改動的力量!
下面是個例子,我最近貢獻力量的過程:
修改一個README
我可能想把Toast類庫增加到我的iOS項目,但是他們在README沒有提到有可用的CocoaPod。既然我只是想測試我項目中的類庫,我想讓它較為容易地移除掉。因此即使我以前使用過這個特定類庫,也知道它好用,我開始為了另一個Toast類庫而搜索CocoaPod。
找了一些類庫,我發(fā)現(xiàn)這個特定的Toast類庫事實上就是CocoaPod!為了確保其他iOS開發(fā)者知道有可用的CocoaPod,我就CocoaPod安裝說明提交了一個pull request到類庫的README。小改動,但是希望對其他開發(fā)者有幫助!
增加額外相同的功能
在為CodePath最終項目構(gòu)建Android app時,我的團隊想嘗試當前官方Android字體—Roboto。事實表明它在并入外部字體到Android時非常繁瑣,因此,我們使用名叫RobotoViews的類庫來解決?;旧?,每個view不得不經(jīng)過配置才能得到Roboto的typeface。
然而,有一個我們需要的類庫而RobotoViews沒有包括進來—較新的Switch view。添加Switch view只需按照其它views的方式大量地拷貝/粘貼,因此它的添加不是太難,但是另一個view可以作為RobotoViews使用!
換句話說,RobotoViews的作者已經(jīng)做了所有艱難的工作使得只需要修改一些地方就可以添加一個新的view。
類似的,我通過給流行的iOS Foursquare client library添加原來沒有的一個額外功能來貢獻力量,只是因為有了作者抽象這個過程的工作,這非常容易添加。
重構(gòu)
當我注意到帶有少量變化的三個函數(shù)有著相同的代碼時,我給ECSlidingViewController添加了一個非常小的修改,來確保在滑動菜單滑出去時鍵盤隱藏掉。因此我重構(gòu)了代碼,產(chǎn)生一個函數(shù),讓三個函數(shù)僅僅通過傳入一個不同的參數(shù)來調(diào)用它,因此將來需要改動這個函數(shù)的人只需要修改一次。
正如你看到的,我的所有開源貢獻都是非常微小、容易做的!當你堅持使用外部類庫時,你會看到相似的機會。因此向前走,并作出小的改動——它們是有價值的!
怎么做
看看這個偉大的《RailsCast:一步一步教你如何為開源貢獻力量》(它和非rails項目非常類似)。但是基本上,都有下面的幾步:
Fork
在Github上找到你想貢獻的類庫,只需點擊Fork按鈕!
Clone
下一步,克隆你想fork的類庫——它現(xiàn)在應該在你的名字下(比如:NatashaTheRobot/ECSlidingViewController),而不是原作者!
Branch, Change, Push
一旦你克隆了代碼庫,改變?yōu)榇a庫文件夾。接下來,用能夠反映你將要做的修改的、有意義名字來checkout一份新的分支。作出修改,push這個分支到github。
當你去你的Github profile主頁,你會看到一個大大的綠色“Compare and Pull Request”按鈕??匆幌履愕奈募?,確認一切ok。然后確信你給原始分支發(fā)送一個pull request(不是你fork的那個分支)。當你做完pull request之后,應該看看是不是這樣!再一次,確認你剛剛給原始作者的master分支的master做了一個pull!
Tweet
這一步當然是可選的,但是我喜歡給作者發(fā)送tweet,告知他們變化。他們可能沒有打開github的通知功能,尤其是那些最近很少改動的、比較老的代碼庫,因此讓他們知道并展開一次溝通是比較好的。
他們或許太忙而沒有merge,因此當他們回復,并告知你,在他們有空的時候再去看。你知道你的pull request不會永遠懸而不決了!
Enjoy!
真的,為開源貢獻力量真的有意思,也是跟***的人學習以及提高你自己技能的有效方法。希望這個向?qū)軌驕p輕你對開源的懼怕?。?!
如果你已經(jīng)貢獻了,請在評論里分享你的故事!
英文原文:http://natashatherobot.com/beginners-contributing-to-open-source/
譯文鏈接:http://www.labazhou.net/2014/03/beginners-contributing-to-open-source/