一年內每天向開源貢獻代碼所發生的事情
英文原文: What happened while contributing to Open Source on a daily basis for one year
最近我在 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 這些人開始了類似的項目,貌似也改變了他們的生活,還有他們看待世界的方式,我對未來充滿著渴望。
— END —
譯文: 《一年內每天向開源貢獻代碼所發生的事情 》 臘八粥