pc: 張瑞騰 (的攝影作業)

Open Source 開源社群的第一門課 | 如何成為 Apache Committer

在課堂外建立你的大型軟體開發經驗與競爭力

Byron Hsu
14 min readApr 12, 2021

--

關於作者

我是許秉倫 (Byron Hsu),畢業於台大電機系 (B05),預計在 2021 Fall 前往 UC Berkeley 攻讀 EECS MEng,現為 Apache Submarine 專案中的 Committer。

2020/10/04 我在 Apache Submarine 發出第一支 Pull Request,2021/03/31 收到 Apache Submarine Committer 的邀約。很幸運地在過程中獲得非常多人的幫忙,歷經一番努力,終於達到自己半年前設定的目標。

Committer Invitation

有鑒於台灣在 Apache 開源社群的資訊較為匱乏,可能只知道阿帕契是某種直升機 (X ,因此我會把我所知道的濃縮成一篇文章,內容包括:

  1. 我為何加入 Apache 專案?
  2. Apache 是什麼?開源專案是如何運作的?
  3. 我想成為 Committer,我該怎麼做?

我對於開源專案、科技、商業非常感興趣,也很喜歡認識各式各樣的人,如果對於這方面的議題想聊聊,歡迎直接加我的 Facebook 或 LinkedIn。

Facebook: https://www.facebook.com/profile.php?id=100006511962880

LinkedIn: https://www.linkedin.com/in/byronhsu1230/

好那我們開始吧!

教練,我想做開源…

故事要從這裡說起,某天搭捷運上學的途中,我在 Facebook 看到 謝秉昂學長 談到關於「國際移動力」這個名詞,裡面的一個條件是知名專案 Committer,那是我第一次看到 Apache Committer 這個名詞。

我對「開源專案」一直非常著迷,大學時期受到 John Wu 以及 Chung-Yang Ric Huang 老師的啟發,我做過幾個小 Projects,像是 life-commit (900 stars)、Never-Blink (800 stars, Winner of Fun Project of the year in React Summit 2020)。

雖說這些專案星星很多看起來很厲害,而確實也因為星星數帶給我極大的成就感,但事實上這些專案僅僅稱得上是「玩票」性質,既沒有嚴謹的架構,也沒有持續在維護,只是因為主題有趣才吸引到那麼多的關注。

因為認知到自己的不足,讓我對參與「世界級開源專案」更加嚮往,以前的我覺得只要有非常多星星就足以稱得上是「世界級」的專案,但我逐漸認知到,軟體專案最重要的是它的 Impact,比如是否真的被大型企業採用,或是解決什麼難題。

Apache 底下的專案皆符合我自己對世界級專案的定義。以 Submarine 來說,它是由一群資深工程師帶領維護,並且有實際被大企業 (LinkedIn, 貝殼找房) 等採用。

至於當 Committer 有什麼好處,我認為主要是:

  1. 累積 Credit: 全世界 Apache Committer 只有八千多位,這是個非常稀有且高價值的頭銜。
  2. 和世界接軌: 和頂尖的開發者建立connection,並和他們學習。
  3. 提升自身實力: 會學到新技術、大專案開發流程、專案協作方式等等。

看了 Apache Submarine Committer 的清單,發現有一位竟然是台大電機系的學長陳楷訓,於是我立馬在捷運上直接加他好友,簡單介紹一下我的經歷,學長就答應讓我加入,從此踏上不歸路。

開源組織是如何運作的?

Apache 組織科普時間

APACHE LOGO

先簡單談談什麼是 Apache,Apache 內部的組織架構又是如何。

Apache 是全世界最大的開源組織,目前底下有 300 多個專案,根據估計每年可產生 $22B 的產值,Hadoop、HTTP Server 等知名專案都是由 Apache 所孕育。

Apache 專案的貢獻者分為三種位階:

  1. PMC: 最高權力者,可想像成專案中的 Engineering Manager,負責決定專案走向、時程規劃,也擁有提名 Committer 的權利。
  2. Committer: 達到一定貢獻程度後,PMC 們會把你拔擢為 Committer,可以獲得更高的專案權限(e.g. 可 merge code 到 master),還可以拿到一個超級潮的 Apache Email (e.g. byronhsu@apache.org)
  3. Users: 前兩者以外的都是 Users
Per-Project Entities (https://maximilianmichels.com/2017/an-introduction-to-apache-software/)

目前全球約有 8000 位 Apache Committer,雖然此風氣在台灣較不興盛,但仍有許多前輩在為這塊領域默默耕耘著,包括莊偉赳、蔡嘉平、戴資力、葉祐欣、成大蕭老師等等,都不遺餘力地在培育台灣的開源人才,在此致上最大的 RESPECT!

你一定很好奇開源專案內部是如何運作的,大家都是無酬的情況下,如何推動專案的前進,此處我會以 Submarine 為例,向你介紹。

成員組成

我大致會把我們的成員分為三種:

  1. Senior Engineer: 又稱「大佬」,是任職於大企業的資深工程師,包括:Cloudera、滴滴打車、LinkedIn 等,基於興趣或者公司業務需要而加入專案,負責架構專案、實作雛形、規劃進度。
  2. Junior Engineer: 經驗不多的菜鳥工程師,大多為學生。不必擔心自己太廢沒有人會幫忙,社群裡的大佬對新人都極度友善,問問題他們都會秒回。
  3. Consultant: 領域的專家,比如 Facebook ML infra Tech Lead,他們通常不會親自下來寫 code,但我們若遇到問題可向他們請教。

專案管理

週會現場
  1. 每週固定週會: 每週二中午 (約中午才不會佔用到工作時間) 會舉行 Weekly Sync Meeting,由 PMC 帶領大家討論,通常是報告當週進度,大佬們會給予回饋,有時週會也會邀請 Consultant 來演講,主題大多圍繞著 ML system。
  2. 分主題線下討論: 專案會同時有幾個小支線在進行,總不能任何事情都放在大會議上討論,因此每一個小組如果遇到問題,就會和社群的大佬約額外的時間開會。
  3. Code, Review, Merge: 當方向明確後就可以開始寫 Code 啦,寫完後發送 PR (Pull Request) 就會有人幫你 Review,如果沒問題就可以被 Merge 進 Master Branch。

我想成為 Committer,我該怎麼做?

1.「刷存」是最重要的

Photo by Headway on Unsplash

上面有提到,PMC 握有提名 Committer 的權利,成為 Committer 最重要的條件就是要讓 PMC 認識你,並且讓你的貢獻被看到,講簡單一點就是要在社群「刷存在感」。

當你對專案還不熟悉時,可以從簡單的事情做起,建立大佬的好感。

用心寫「自我介紹」:

剛加入社群時的自我介紹很重要,絕對不要只是「大家好,我是 XXX,很高興能加入,跟各位學習 : )」這類的幹話,你必須言之有物,寫出你擅長什麼 (e.g. ReactJS),你之前做過什麼專案 (e.g. Never-Blink) 以及你對什麼主題有興趣 (開發 Server),最好再貼上 Github 和 LinkedIn 的連結。

以我來說,我一進去就說我對網頁技術很熟悉,大佬們應該是對我有個印象,所以很快就 assign 一個 pending 已久的前端 issue 給我。

幫忙做週會紀錄:

這看起來很 trivial,但我覺得有非常多的好處。

在剛加入社群時,因對專案不熟悉,開會常會聽得霧撒撒。

透過做會議記錄,你會強迫自己去組織資訊,當聽不懂時,你也有個合理的理由發問,因為你是會議記錄,他們會解釋到你聽得懂才放心。

主動找大佬請教:

在初期什麼 tech stacks 都不會時,你可以直接向大佬請教這個專案會用到的所有 tech stacks,依據這些關鍵字去搜尋線上課程、官方教學等等。

會願意在開源社群的人個性都非常好,非常樂於分享知識。

大門永遠都是敞開的,只是你要主動去敲門。

當對專案較為熟悉以後,你應該也開始寫 Code 了,要特別注意的是,PMC 在意的並不是你寫了多少行 Code,發了幾個 PR,而是你對專案的貢獻度。

解決「重要」的問題

如果你每週參加週會,就會對大佬們較重視哪些議題有感覺,比如哪個 feature 是下個版本的重點,或者哪個 bug 已經延宕很久了但都解不掉。

不必擔心自己能力不足而不敢主動接任務,只要你主動說要做,社群都會提供你協助。

以我來說,我加入的時候剛好是 Submarine 0.5.0 完成,要跨入 0.6.0 的階段,當初 0.6.0 裡面有幾個目標,我就主動接起幾個任務,包括: TensorBoard 整合、重構前端、支援 NFS support 等等。

我認為我能被提名為 Committer 的原因,很大部分是我所做的貢獻真的有推動專案在前進。

在行動之前,先和大佬討論

雖說「積極主動」很重要,但如果都不和人家討論,就埋頭下去猛做,花了很多時間,結果卻不被社群接受,那就尷尬了。

因此,在做任何改動前,最好都先寫個簡易的 Design Doc(e.g. 畫個架構圖),拿去和大佬討論,確認方向是正確再開始行動。

2. 學會「自己找事做」

Photo by Dan Asaki on Unsplash

Apache 專案都有那麼多神人維護了,會不會找不到事情做?

絕對不會,再完美的專案一定都有它可以改進的地方,但如何一直找到事情可以做,我認為是有技巧的。

我會把專案比喻為迷宮:

參與大型專案就像是拿著手電筒在摸黑走迷宮,剛開始你覺得四周都很陌生,但隨著你照亮一個又一個新場景,你會對地圖越來越熟悉。

去哪找事做

最簡單的方法是直接問 PMC,他們對專案都有深厚的了解,知道目前還缺什麼。

更大型的專案(e.g. Hadoop)通常會有很多 rookie issue,可以從那邊下手。或者你可以試著從解 Flaky Test 開始(蔡嘉平大大的建議),解 Test 的同時你會學習到該模組的功用。

找哪類型的事做

我會建議你把每個組都碰過一遍,如此對專案能有更高層次的了解,以迷宮的比喻來說的話,是能照亮更大片的區域。

就 Submarine 而言,可分成前端、後端和 Cloud 的部分,我一開始的策略就是把三個組都碰過一次,這樣的好處是會更有「全局觀」,你能知道每個模塊的功用,同時也能訓練到不同方面的能力。

做完然後呢

在解 Issue 的過程中,你會踩到更多的 Issue,如此形成一個正循環。

解 Issue ➡️ 實力提升 (Lv 1) ➡️ 發現新 Issue ➡️ 解 Issue ➡️ 實力提升 (Lv 2) …

當你照亮更大片的區域,你同時會發現有新的坑洞可以修補,過程中你會變得越來越強。

3. 投資時間、組織知識

Photo by Kelly Sikkema on Unsplash

空出一段時間,專心投入

Github Contribution Graph

做開源專案相當花時間,在新手的時期,一週至少得花 20 ~ 30 hr。

如果你一週只能花 5 hr 在專案,你不太可能被 assign 到重要的 issue,因為社群會希望重要 issue 是能儘速被解決的。

我會建議你騰出空閒的一段時期密集衝刺一波,例如:寒暑假或者課修較少的學期。

像我自己是利用申請學校完 + 寒假的時間密集輸出 (2020/12 ~ 2021/2),那段時期把所有外務排開,每天除了休息就是在做 Submarine,那段時期一口氣就把很多 issue 解掉,刷了 20 多個 PR。

系統化整理知識,快速學習

從前我在學習技術知識時都只記在腦袋裡,沒有用筆記系統性整理的習慣。

但參與大型專案後會發現,有太多太多的新知要學習,那些知識量不是我小小腦袋裝的下的,我利用 Notion 來管理專案所有的資訊,我覺得還蠻受用的,分享給大家我管理的方法。

我套用的是 Notion 裡面叫做 Engineering 的模板,他裡面有幾個部分:

To-Do: 管理手上的 issue

To-Do

我會把找到的、正在做的、已完成的 issue 都記下來,並把過程中遇到的問題記錄在 issue 的頁面內。

Engineering Wiki: 知識的筆記本

Engineering Wiki

這裡先談談怎麼快速學習一門新知識。

我覺得這因人而異,有些人很厲害,直接啃 Man Page 來學 Linux(e.g. John Wu 大神學長),但我自己是不太行 XD。

如果是比較小型的工具(e.g. Helm, Selenium),通常核心概念都不多,這種可以直接去看他的官方教學,或者 Youtube 上應該也有蠻多教學影片(感謝印度人)。

但如果是比較複雜的工具(e.g. Kubernetes, Angular),核心概念不是三言兩語就能講完的,官方文檔也跟天書一樣。這種我建議可以直接買線上課程來看,像我自己就很喜歡用 Udemy,課程很便宜,持續有在更新,而且品質很高,能讓你在短時間完整地學習一門知識。

例如當時我 Kubernetes 看的是 Kubernetes Certified Application Developer (CKAD) with Tests,Angular 看的是 Angular — The Complete Guide (2021 Edition)

我會把線上課程、文檔、部落格學到的內容整理成筆記,常用的指令做成 Cheatsheet,如此不僅能幫你梳理知識,也能在你之後回來看時,快速喚醒你的記憶,省掉許多時間。

結語

Photo by Félix Lam on Unsplash

如果你現在是大學生,未來想成為軟體工程師,「做專題」或許不是你唯一的選擇。若你能在大型專案中發光發熱,成為 Committer / PMC,我相信你所會獲得的 Credit 絕對不亞於發論文到頂尖會議,同時你可以培養實戰能力,並建立有價值的人脈網。

看到這邊,如果你已經充滿熱血,準備大幹一番,我可以推薦你幾個專案。

如果你覺得你實力不錯,你可以嘗試 Kafka, HBase, Flink, Hadoop 這類的大型專案,點這裡有蔡嘉平大大的經驗分享

如果你想入門,那你可以加入 Submarine, Ozone, Yunikorn 這類較小型的專案。

這幾個專案就我所知,都是有台灣 Committer / PMC 的,初期最好的方法就是找到一個大腿,請他帶你入門。

致謝

啊,終於寫完了,希望你看完有收穫。

感謝秉昂的貼文讓我加入 Submarine。

感謝楷訓、桓平學長一路拉拔我成長。

感謝文謙、Ryan Lo 等學長在過程中的幫忙。

感謝社群大佬 (e.g. Mr. Tang, Mr. Liu …) 的提攜。

感謝偉赳、宏毅老師對 NTUEE 開源專題的支持。

感謝嘉平、John Wu、資力、祐欣等大神願意來台大分享經驗。

感謝自己對於追求目標的偏執。

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Byron Hsu
Byron Hsu

Written by Byron Hsu

NTUEE | Berkeley EECS | 喜歡嘻哈和人群的工程師

Responses (2)

Write a response