成為 Apache Ozone Committer,聊聊這半年的開源日常

最近很開心收到 Apache Ozone 社群 (PMC Chung En) 的邀請,成為 Apache Ozone Committer。從今年四月底開始貢獻,到現在大約半年。

想趁這個機會,分享一下這半年參與 Ozone 的經歷,以及自己的一些心得。

為什麼選擇 Apache Ozone?

雖然我平常工作就會貢獻開源,但主要集中在 Web 技術上,因為我已經相對熟悉它。我想在工作之餘學習不同領域的技術,特別是在這個快速變化的 AI 時代,感覺需要持續成長。

當時看了不少專案,有些是自己用過的,如 Airflow、Kafka,但很多專案規模都很大,要找到合適的 Issue 感覺很多人都在搶,目前不想這麼卷(未來再說…)。

相比之下,Ozone 對我來說更容易找到切入點。加上過去有使用 S3 的經驗,也曾經嘗試開發過類似的應用,對物件儲存有一些基本認識,而分散式儲存又是我認為長期來說很重要的技術領域,在看過相關文件後,覺得能夠理解也覺得有趣,因此最後選擇了 Ozone。

最後其實也沒有什麼特別的契機,就是某一天決定,不如真的開始動手試試看。

AI 讓學習陌生技術變得容易許多

雖然我有多年的開發經驗,但我其實不是一個很熟悉 Java 的開發者。

不過我一直認為,解決問題的思考方式在不同程式語言之間有很多共通之處,語言本身只是工具。而 AI 的出現,也確實降低了跨入陌生技術領域的門檻,降低了需要學習工具的門檻,讓我們能夠專注於解決問題。

我開始貢獻時,讓 AI 閱讀 README 和 Contribution guide,以了解專案架構和開發流程,還協助我在 Jira 搜尋合適的任務,並創建一些技能來幫我尋找問題。

我最初主要從修復 Tests 開始。

因為測試通常有相對明確的範圍,也比較不容易直接影響 Production 的行為。透過閱讀測試與相關程式碼,可以逐漸理解系統的運作方式,也能順便熟悉專案的開發流程。

當然,AI 並不是永遠正確。

有時候它會忽略邊界條件,或是沒有注意到修改可能造成的其他影響。所以我覺得最重要的,還是要先能夠自己思考、看懂問題。

我一般來說遇到不熟的問題,大部分會先請 AI 解釋資料流、畫架構圖,或是從不同角度說明問題,直到我可以理解為止,再回頭閱讀實際的程式碼,確認這些解釋是否合理。

另外,了解程式碼的修改歷史也很有幫助。有些 Bug 並不是原本的實作有問題,而是後續的修改沒有注意到其他地方的交互影響。

像是 Flaky tests,可能因為背景服務或非同步操作,讓測試結果受到執行時序的影響。最近處理的一些 Metrics bugs,也有類似的情況:原本正確的指標,隨著功能演進,卻沒有同步調整。

即使有 AI 幫忙,有時候還是需要花上好幾個小時理解問題、探索不同的解法,但至少現在能夠更有效率地找到相關程式碼,降低理解大型 Codebase 的成本。

把貢獻當成一種習慣

對我來說,Ozone 有很多值得探索的地方。

分散式系統中充滿各種精巧的設計,例如非同步處理、平行化,以及如何利用 RocksDB 的特性來改善資料處理的效能與吞吐量。

有些設計直到現在我可能都還沒有完全理解,但在閱讀程式碼的過程中,常常能感受到這些設計的巧妙之處。

這也是我很享受參與 Ozone 的原因。

我通常會盡量每天花一點時間在專案上。有時候找 Issue,有時候閱讀程式碼,有時候則是 Review 別人的 PR。當然偶爾還是會因為工作或其他事情而錯過,但也不會因此苛責自己。

遇到比較困難的問題,也不一定要強迫自己立刻解決。真的沒有頭緒,就先放一邊,等之後有更多理解再回來看看。

我覺得這跟運動有點像,重要的是找到自己能夠長期維持的節奏。

我一直相信,卓越來自於每個微小的當下。

Code Review 也是很好的學習方式

另一件讓我覺得很有幫助的事情,就是去 review 別人的 PR。

透過 Review,可以接觸到原本不一定會主動研究的模組,也能了解其他人正在解決哪些問題。

除了閱讀程式碼,我也會試著思考:這個問題為什麼會發生?為什麼選擇這個解法?有沒有其他方式?不同做法之間又有哪些取捨?

每個 PR 都像是一個小型的技術案例,即使不是自己親自實作,也能從中學到很多東西。

隨著參與越來越多,也開始有其他 Committers 主動邀請我 Review PR。這讓我感覺自己不只是提交修改,也逐漸能夠透過自己的經驗幫助其他人。

關於品質與信任

我覺得開源協作中很重要的一件事,就是信任。

當我們提交一個 PR,其實也是希望其他人能夠相信,這個修改是經過認真思考與驗證的。

現在 AI 可以幫助我們完成很多工作,但它也經常會產生一些冗長的註解、不必要的抽象,或是沒有考慮完整的實作。

我自己也會利用 AI 協助 Review、測試,但最後仍然會確認每一處修改是否真的理解、邏輯是否合理,以及是否符合專案的程式碼風格。

另外,我覺得 PR description、Doc comments 也是很重要的細節。

如何讓 Reviewer 容易理解這個 PR 要解決什麼問題、為什麼需要修改,以及採用了什麼解法,其實都會影響協作的效率。

溝通也是如此。我不認為每個人都需要在幾個小時內回覆,但至少應該盡量在合理的時間內回應,而不是讓 PR 長時間沒有消息。

我也不認為一個 Contributor 一開始就必須做得很好。

相較之下,我覺得一個人對品質的態度,以及能不能從 Review 中持續學習、改善更為重要,而不是反覆犯同樣的錯誤。Ozone 社群裡大多數人都相當友善,也有社群成員經常協助 Review,提供許多細節上的建議。

我覺得這些日常的互動,就是社群信任逐漸建立的過程。

成為 Committer 之後

成為 Committer 之後,我目前仍在思考自己如何承擔更多責任。思考可以怎麼更主動協助其他 Contributor,或是整理一些適合讓其他人參與的 Issue。

在 Review PR 時,也需要更謹慎地考慮修改 Merge 之後可能造成的影響,以及是否需要更多熟悉相關模組的人一起確認。

另外,也希望未來能夠更關心 Ozone 長期的發展方向,看看自己能在哪些地方提供更多幫助。

Ozone 裡還有很多我尚未完全理解的設計,也有很多值得繼續探索的地方。

最後

回頭看這半年,其實就是從玩玩看 ozone、閱讀文件、修復 Tests 開始,逐漸接觸不同的問題,也開始參與更多 PR Review。

如果有人想開始參與開源,我會覺得不一定要先完全理解一個專案。

可以先從使用者的角度開始,閱讀文件、測試功能,看看有哪些地方可以改善。很多理解,其實是在實際參與的過程中慢慢建立起來的。

對我來說,能夠參與一個持續發展、真正被許多人使用的專案,本身就是很有價值的事情。

這半年學到了很多,也很感謝 Ozone 社群一路上的協助與信任。

期待接下來能繼續學習,也為這個社群帶來更多貢獻!


若您也對開源有興趣,十分推薦加入台灣本地開源開發者社群 「源來適你 」社群。

https://github.com/opensource4you/readme

發佈留言