一年內每天向開源貢獻程式碼所發生的事情

臘八粥發表於2015-03-06

最近我在GitHub連續衝刺了365天,我想寫篇部落格,記錄下為什麼開始每天提交,以及它對我的生活帶來了什麼變化。

我對貢獻程式碼的要求比較簡單:

  • 每次貢獻必須有意義,必須有實際影響。我可以提交只有空格的修復,但是它們不應該被算作有影響的提交。
  • 它必須是開源的。

早在2013年夏天我就開始了,略早於John Resig,他寫了關於每天提交程式碼的部落格,但是我的第一次嘗試失敗了。正是他的文章鼓舞了我,告訴我不是一個人在戰鬥。

我和John有著同樣的理由:我熱愛業餘專案(side project),但是我不樂意為了完成它們而投入整個週末。有時候,我在週末投入一整夜,但是這幫助不大:去做業餘專案的時間跨度太大了,我經常想不起來在做什麼以及專案的下一個想法是什麼。我總要用很長時間才能重新回到專案上。另外,我不想在週末的兩天裡完全忙於業餘專案,因為我想花些時間和朋友在一起,以緩解一直坐在電腦前面的緊張狀況。

我開始每天貢獻程式碼的其它原因是,我認為這很可能將提高我的技能。

好的方面

改善我的業餘時間管理

我的業餘時間整個計劃發生了變化。往好了講,我開始計劃和管理我的業餘時間了。在此之前,我沒有真正考慮過工作之外的時間。在完成白天工作之後,我突然(震驚,震驚!)有了一些業餘時間卻不知道做什麼。

技能提高

每天忙於程式碼,我沒有看到每天的工作真正地提高了我的技能。由於我在學Erlang,用Scheme編寫了我的第一個程式,我在簡歷裡增加了新語言。我仍然在寫Erlang。

我還學到了,較大型開源專案是如何運作和組織的,以及開源對於公司意味著什麼(我甚至可以說,對於每家公司意味著什麼,但這需要另一篇博文了)。我不是說,開發不包含任何開源元件的產品就不賺錢,據我看來,每個專案都擁有大量的開源元件,盈利並在長期從更好的程式碼上獲益,這是有可能的事情。

另外,我在數不勝數的知識點上提高了我的知識和技能,列舉一些:解析和詞法分析、分散式計算、架構、安全、專案(程式碼規範)之間快速切換、理解程式碼以及程式碼review。我也提高了軟技能:溝通、團隊精神、解決衝突、指導和處理高難度/突發情況下的問題。

一份新的工作

剛開始時,我有很多自己的小型業餘專案,十分有趣,但是到了某個階段,我感到不開心了,沒人fork,貌似沒人使用。我是唯一的開發者,我沒有夥伴可以討論解決方案或得到review的途徑,而這是提高程式碼和技能的最佳途徑。

我決定向較大型的專案提交程式碼,既然我從0.4版本就在使用node,是一名日常npm使用者,我就向npm提交了一個補丁。Isaac Schlueter審查了我的一個PR,真不錯,這讓我為npm提交了更多的程式碼。

npm registry使用CouchDB做資料庫,但是我不知道如何使用。我開始把CouchDB文件翻譯成德語,這樣我就學會了如何使用CouchDB和如何幫助專案。有一天,我想託管我自己的私有registry,當時我的硬碟裡有CouchDB原始碼,我不確定為什麼registry沒有引導。當通讀程式碼時,我看到CouchDB有一個JavaScript MVC app,它不是官方釋出的。這一天我開始向CouchDB貢獻程式碼,而npm的PR有一堆,我不想再提交了:我不想讓花時間檢視的稽核人感到太難。我向CouchDB貢獻了更多的程式碼,因為他們真是不錯的人們。

有時候,npm有一些與Node.js直接相關的bug和問題,因此我也向Node.js專案提交程式碼。

加入所有這些專案,得到review,與其他很多不同的貢獻者協作,閱讀其他人寫的大量程式碼,稽核補丁,和使用者交流,解決他們的問題,實實在在地加強了我的技能。

在2014年,我足夠幸運,得到了一份工作,我因為致力於開源專案CouchDB而獲得了回報。

交新朋友

經過在開源技術社群的工作,我結識了大量新朋友。我遇到很多忙於同樣工作的協作者,還有人在使用我參與的專案。他們大多比我聰明,至少對於我參與的專案來說,我可以說,他們都是非常優秀、思維開放的人。

他們就是我在傳送了最初PR之後、還提交了更多補丁的理由。我認為,任何人沒有興趣把業餘時間(甚至工作時間)投入到一個充滿敵意的、糟糕的環境裡。

壞的方面

每天貢獻程式碼並真正堅持下來,不會一直都順利。我想,大部分讓人鬱悶的事情都是那些對開源產品有著古怪期望的人們,他們免費用著人們在業餘時間維護的產品。

npm裡的這個issue是個例子,我過去和Domenic一起在業餘時間做了大量工作,Domenic也花了大量時間去維護npm:

結論

每天向開源軟體貢獻程式碼的決定,改變了我生活的很多方面。我現在有償參與著開源,在很多專案中交了很多朋友,這提高了我的技能。

我樂於看到公司支援他們的員工向開源軟體貢獻程式碼—他們99.99%都依靠開源軟體,比如,他們的開發工具,直接應用的產品,甚至兩者兼而有之。令人悲哀的是,對於大部分員工來說,在工作時間參與開源軟體是相當難的,不是每個人都有足夠的特權能夠每天花費業餘時間裡的1小時參與到開源軟體裡。

像Kyle Simpson和Mathias Lafeldt這些人開始了類似的專案,貌似也改變了他們的生活,還有他們看待世界的方式,我對未來充滿著渴望。

相關文章