一年內每天向開源貢獻程式碼所發生的事情
最近我在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這些人開始了類似的專案,貌似也改變了他們的生活,還有他們看待世界的方式,我對未來充滿著渴望。
相關文章
- 如何向 Mozilla 開源社群做貢獻
- 第一次向開源專案貢獻程式碼的歷程
- 如何向開源軟體貢獻自己的力量
- NSA 向 Coreboot 專案貢獻程式碼boot
- 【開源社】您會為開源專案貢獻程式碼嗎?
- 「2021」我給Vue.js生態貢獻程式碼的這一年Vue.js
- 貢獻Dubbo生態,阿里開源Nacos專案阿里
- 開源 .NET 一年後,ASP.NET 貢獻情況分析ASP.NET
- 為開源社群做貢獻
- 靈析團隊 package 陸續開源,向社群貢獻力量Package
- 向 Node.js 核心貢獻程式碼的六個步驟Node.js
- 為什麼要貢獻開源
- 龍芯愛好者向Linux 3.4核心貢獻程式碼並參加開源軟體大賽Linux
- 如何向開源專案做貢獻(以 incubator-dubbo 為例)BAT
- 零起點的開源社群貢獻指南
- CNCF:中國已成為全球第二大開源貢獻國 CNCF專案的程式碼貢獻接近100萬
- 如何給 swoft 貢獻程式碼
- 如何為PHP貢獻程式碼PHP
- 如何為 PHP 貢獻程式碼PHP
- 邀請學生加入 Google Summer of Code,為開源做出貢獻!Go
- 向微軟官方貢獻 @types 包後引發的思考微軟
- 如何給開源專案做貢獻
- 如何為開源軟體做出貢獻
- 學習如何向Linux核心貢獻程式碼,接受Eudyptula挑戰Linux
- 開源貢獻者翻譯組 LCTT 九歲啦
- 2014年終總結:這一年所經歷的和正在發生的事情
- 實踐心得:從讀論文到復現到為開源貢獻程式碼
- 個人/團隊/公司開源,Joyqi 談貢獻開源的「不同姿勢」
- 如何給 GNU 專案貢獻程式碼
- 不要因為沒有為開源事業做貢獻而感到內疚
- TDengine 上榜 BenchCouncil 全球第一個開源貢獻榜
- 從 SDWebImage 談如何為開源軟體做貢獻Web
- 2017年12月開源貢獻報告
- 從 re:Invent 看 AWS 對開源和社群的新貢獻
- 學習原始碼的第八個月,我成了Spring的開源貢獻者原始碼Spring
- 蘋果的貢獻蘋果
- 蘋果每位員工一年能貢獻多少收入?蘋果
- 5 個提升你開源專案貢獻者基數的方法