如何成為 Open Source Committer (Flyte) | 大學生21周心得分享

Han-Ru Chen
19 min readDec 19, 2023

--

一條透過努力能夠成為世界級軟體工程師的道路

前言

你好,我是陳翰儒,來自中正資工大四

花費21周(50+ PRs)成為Flyte Committer

想透過自己的經歷啟發想做Open Source的人

所以寫了這篇文章

這21周下來,每周,每天,每小時

為了做出重大貢獻以及成為Committer做了甚麼努力

我有盡量記錄下來

想提供具體的數據給大家

讓大家能夠更好地訂目標、並對這條路更加熟悉

那我們就開始吧

目錄

  • 我的起點
  • 我的策略
  • 心態調適
  • 努力的量和回報
  • 收穫的時間點
  • Open Source實力成長曲線
  • Mentor的付出
  • 夥伴們的幫助
  • 開源的好處
  • 心得和致謝

我的起點

因為大家的實力、背景、專長都不一樣

希望這邊可以讓大家搭配下面的章節來制定自己挑戰Open Source的計畫

  • 上大學前2個月開始學寫程式
  • 兩次台灣區ICPC銅牌
  • 大學期間有3份實習,15個月工作經驗
  • 工研院實習 -> 10年後端工程師把習慣+直覺交給了我
  • 中研院實習 -> 拉高自己懂一件事的標準,提高思考深度
  • Synology實習 -> 學習厲害的人是怎麼做事的+基礎Trace Code
  • 沒寫過Golang, 沒玩過K8S
  • 中正資工歷史上第一個面試Google SWE Intern的男人
  • 為了督促自己,培養寫日記的習慣,今天是第1039天

我的策略

對我而言,策略非常重要。

如果知道當下正在發生甚麼事,知道自己要走到哪,對未來就會更有確信感,行動起來也會更自信。

每個階段我都有採用不同的策略

接著我打算用問題回答問題

初期策略

1 .如何上手Flyte?

初期我選擇跑範例+閱讀 Flyte的Documentaion

而這其中,Getting Started, User Guide以及Concepts是最重要的

2 .如何找到自己能貢獻的地方?

我認為最有效的方式有兩個

3 .要怎麼熬過前期?

前期很多時候我都做得蠻挫折的

可是沒辦法,Open Source確實比較難

當做困難的事情,缺點本來就會被放大

就像Ben Simmons不會投籃在上NBA前還是很猛

但上了NBA就......

  • 固定時間投入

我在初期有1、2次Burnout的經驗

因為我對自己的期待大於自己的實力

導致壓力有點大XD

因此努力的策略改成

1周6天、1天6小時

試著把每天最集中的專注力都給Open Source

當天努力過後強迫自己好好休息,去運動去閱讀等等的

讓自己有好一點的Mental Health

其實後期也會有一天7-9小時的時候

不過那時候是在很有成就感加上腦力沒有用完的狀態下執行的

相比而言,其實在每天都是挫折的前期,一天6小時是更重要的

逆境時做了甚麼才是最重要的

  • 把做Open Source當作在做研究

之前進中研院的時候要發ML Model相關的論文

當初教授希望我們弄頂會paper

所以在報paper以及做實驗上都非常要求我們思考的深度

遇到一個現象要嘗試解釋為甚麼,並解釋的越清楚越好

因為之後寫Paper要說服他人我們的方法是對的

而Open Source有很多很難的地方

我認為把做研究的嚴謹態度用在Open Source上

對於理解Open Source非常有幫助

  • 拿出勇氣問問題、並學習Mentor的開發習慣和思維

這21周下來,我平均每周問Mentor 15個問題以上

問的問題像是這樣 (只需要讓自己能夠想起問題是甚麼就好)

問問題絕對是進步最快且必要的方式

因為Open Source就像嶄新的研究領域一樣

相關閱讀的資源是有限的

往往只能從過往的PR Description看

以及寫給User看的Doc找資料

常常卡關

而且Open Source也有不穩定的地方

有時候遇到問題,可能是Doc寫錯或是code有錯,不是你的錯

因此透過問問題可以讓Mentor幫助你抓到現在到底錯哪

有時候光是排除一個Bug的可能,就能夠幫到你解出Issue了

除了透過努力累積更多問題以外

我也會Mentor,也就是如果是他來解Issue,他會怎麼做?

為甚麼從這裡開始?

高手往往比菜鳥少很多多餘的動作

因為這樣問問題,讓我後面開發的速度快很多,感謝Mentor

後期策略

1 .思考自己想從專案中學到甚麼?

當時我告訴Mentor自己想學更多Cloud後端的東西

Mentor就把Flyte Propeller (K8s Operator)的東西丟給我做

這非常重要,Open Source跟實習不一樣

實習很多時候是不能選自己想要的Project的

Open Source可以,你可以選擇自己有興趣的Issue/Feature做

做自己有興趣的事情,會更容易做的好

2 .嘗試從解過的任務延伸到其他任務

我在這邊推薦大家發完1、2個PR

不管是選擇DFS(做相關、但更難的feature)

或是BFS(做相關、但要加上其他功能的feature)

都會對接下來的進步很有幫助

3 .思考自己如何幫助自己的Mentor達成雙贏?

這時候跟初期相比,遇到大部分的Issue我已經知道怎麼開始了

我不一定能夠一次就做到好,但我基本上都能做到完成度70%了

這時候我就會思考自己有沒有能幫忙Mentor的地方

因為前期他真的幫助我太多了

他一直都是在很忙的時候幫助我的

所以希望自己有能力也能夠減輕他一點點的負擔,哪怕只有一點點

像是幫忙寫doc我覺得就是小白也可以做到的事情

再來幫助Mentor的話,他也會有更多時間教你XD

不過無論策略是甚麼

只要敢出手,就是最好的方式

其實不需要執著一開始就有一個高效的策略

只要邊執行邊調整就好

我們需要透過執行跟犯錯來進步

這才是最重要的

心態調適

前期做到心態炸裂很正常

這是第3周的我所做的紀錄

你們沒看錯、心態炸裂是日常XD

在這之後Mentor還assign一個對當時的我來說超難的feature

它牽涉到flytekit 如何 Compile,看懂複雜的flytepropeller後端架構、看懂一堆design pattern、學會甚麼是grpc…

我記得我卡了快7周

中間一度做到崩潰跑去看動漫殭屍100

然後回來繼續努力XD

做出來的時候是第15周

在那之前幾乎每周都會做到小崩潰

從那之後就順很多了

因為做這個feature讓我搞懂很多flyte的東西

過了門檻後就順很多了

如果你也做得很卡的話

等你弄懂大部分的東西,並做出貢獻後

你會發現你其實需要這些挫折讓你自己成長

所以請再堅持一下

在這邊貼上讓我弄到崩潰的PR XD

很推薦看一下Description中的討論

真的跟Mentor還有Spotify 的 SWE 學到很多

這是經驗值非常高的一個Feature XD

https://github.com/flyteorg/flyte/pull/4107

把大目標拆成小目標很重要

這是我開發某個PR的例子

之所以這麼說,是因為Open Source的任務通常更難

因此我認為與其將目標設在"今天要完成這個PR"

不如把目標放在"今天這個PR要前進一小步"

這麼一想,壓力就小很多,做起來也就更順了

完成一小步後,有了成就感,就會想再完成一小步XD

慢慢建立自己的信心和動力

要允許自己表現不如預期、要給自己時間成長

因為自身的期待跟自身實力不符

加上Mentor每周都很認真帶我(平均一周至少2小時以上)

我自己會希望可以進步得快一點

做出更多貢獻、拿到頭銜等等

但我前面真的做得很慢

我希望對得起Mentor的時間、也對得起自己的付出

也因此蠻挫折和內耗的

不過後來冷靜一想,這就是自己現在的實力

只要接受,然後好好努力就好了

前期本來就有很多困難要克服

加上我初期後端基礎只知道簡單的CRUD API

Design Pattern也沒用過幾個

沒有大型後端系統Trace Code經驗

沒有Debugger實務經驗

這些本來就需要花時間補起來

前13周進度都算蠻慢的

不過能夠重來一遍的話

我會告訴自己前期本來就有一段打底期

要給自己時間成長

勇氣很重要

因為Open Source的前期充滿困難

所以我在第11周的時候訂了以下規則希望自己能夠遵守

之後常常看著這張照片檢討自己有沒有達到上面所說的標準

我也會有不敢問問題的時候

不過每次看到上面說的 ”Have the courage to try, every day.”

我就會推自己一把,先把問題送出去再說

我會告訴自己來做Open Source就是來體驗它的美好

這世界並沒有規定要幾歲才能做到甚麼事情

要允許自己去爭取結果

要敢問問題

要堅持

在11月的時候有做了一個Flyte應用的Repo

在Mentor的建議和鼓勵下鼓起勇氣跟Community說要上台報告

在此之前我完全沒有全英文在科技業報告的經驗

但想著要遵守跟自己的約定,要讓Mentor的付出值得

就硬著頭皮上了,最後很開心結果還可以!

努力的量和回報

這是前15周累積的成果

前情提要:前幾周我身上還有Intern的工作,因此專注程度較差

來記錄一下每周印象深刻的回憶

第一周努力35.5HR,嘗試發了2個doc PR

第二周努力22.5HR,嘗試完成手上Issue的一個小步驟

第三周努力31.5HR,成功解出第一個Issue (未加test)

第四周努力38HR,發的第一個code PR開始被REVIEW到爆

第五周努力23HR,這周burnout,前期一邊Intern一邊開源,有點累癱了

第六周努力37HR,trace flytekit task的架構,看非常慢

第七周努力40HR,寫出來的PR被Mentor Refactor看不見原型,發現自己還有很長一段路要走

第八周努力29.5HR,開始trace更多flyte propeller後端架構,更理解agent feature一點點了

第九周努力37HR,agent成功設定起來,sync plugin前進了一小步

第十周努力16HR,sync plugin只前進了一點點,非常挫折,被程式競賽耽誤了時間

第十一周努力31HR,sync plugin還在弄,還沒成功,努力跟程式競賽取得平衡

第十二周努力38HR,sync plugin只差最後一步,為自己的進步感到開心

第十三周努力33.5HR,sync plugin還是做不出來,但開始成功了一些PR

第十四周努力34.5HR,sync plugin還沒成功,但實力突然發現上升了,多發了一些PR,也有嘗試幫Mentor寫Doc

第十五周努力56HR,sync plugin終於成功(能動的版本),開始多發了很多PR,開始有明顯的結果了

第十六周努力27.25HR,前一周我大概是累壞了,這周多休息一點,開始做ChatGPT Summary Bot

第十七周努力38HR,跟Yi Cheng Lu學到了後端架構的想法,繼續做ChatGPT Summary Bot

第十八周努力31.5HR,完善自己寫的sync plugin PR,寫Agent Doc

第十九周努力44HR,完成ChatGPT Summary Bot,到Community演講被CEO誇讚,跟Byron帶領的Flyin Feature開始有合作

第二十周努力32.3HR,開始做更多Flyin的東西

第二十一周努力19.4HR,繼續Flyin,狀態差的一周

花費695.45HR,不知不覺累積了50+PRs

其實上面指的只有坐在電腦前的時間

睡覺、散步和運動時我也常常在想要怎麼做可以做得更好更快,每天早上起來第一件事就是看自己的PR Merged了沒,因為架構複雜,常常思考自己還有哪裡想不通,哪裡不懂,不過這些時間太難估算了,就不放上來了

不過上面的這些思考我認為對進步也非常關鍵,困難的事物對我來說常常需要想久一點才能想通,運用這些時間來思考幫助很大

備註: 我認為一周坐在電腦前30小時就能做出很好的成果了

因為人一天專注力的極限差不多在4小時左右

我把這段時間能給的專注力都給了

常常每周日腦袋累到完全沒辦法轉動、只能被迫休息

以精力來說,我all in 在這了,通常沒有繼續做是因為腦袋累癱了

收穫的時間點

前面400小時我都覺得自己對Flyte非常陌生

常常有一種我解出PR,是因為Mentor一個口令,我一個動作,才做出來的

並不是因為我有解出這個PR的實力

後面把知識都補完後,才比較有自主開發的能力

因此這邊推薦想做Open Source,實力跟我差不多的人

先假設你能夠運氣很好像我一樣遇到Kevin這種Mentor

你需要先撐過前面400小時,才會開始進入狀況

如果一周只能投入20小時,那你第21周才會開始有結果

更何況一周只花10小時,你要40周,將近1年才熟悉這個Open Source專案

加上如果你進步太慢,Open Source專案進步的速度比你快,那幾乎不可能會有機會貢獻重要的PR

因此我推薦如果你想做熱門的Open Source專案,要想辦法一周抽出20小時在上面,這麼做有以下好處

  • 更快地撐過痛苦的時期,加快反饋
  • 更有機會做重要的PR

Open Source實力成長曲線

有Mentor跟你一起做Open Source,做夢都會笑出來

這是我認為一般人在Open Source的實力成長曲線

自己Intern的經歷初期前輩都會花很多時間帶你,後來因為任務的難度不會上升,所以實力上升緩慢

Open Source因為前期太難了,所以進步速度很慢,需要pick up很多知識,後面將所有知識都連在一起後,就開始做出越來越多impact,而任務也可以越接越難,所以實力在後面可以依然可以上升上去

這是Mentor幫助下的我

你沒看錯,我的Mentor就是這麼會教 XD

Mentor的付出

Mentor介紹

我的Mentor是 Kevin Su,蘇桓平

目前在Union.AI的軟體工程師,負責Flyte Open Source Team

是Apache Submarine的PMC Member

是actions speak louder than words的人

Mentor給的幫助

請讓我用一張照片來說明他給我的幫助

這裡面有9成以上都是開會的錄影,還有額外的影片我沒放上來

每個影片平均起來有超過1小時,而且幾乎每次開會都是在他的下班時間

你可能會想說為甚麼影片有70+個

因為他為了加快我們的反饋,讓我們更有成就感,總是額外花時間教我們

對,總是

在下班後還花時間帶我們,是很耗體力的一件事情

這點我真的非常Respect

除了影片上的幫助,他也常常傳訊息跟我們討論feature

他真的很努力在帶我們,謝謝你

我卡關的時候

上面我有說過我前400小時都很卡關

有幾周做到比較崩潰,開會的時候明顯進度很緩慢

Kevin還是堅持付出,非常地有耐心

這點真的蠻感謝他的

因為他每周都蠻努力的

在繳不出成果的時候

我不禁會想

我是不是挑了一個太難的挑戰

自己是不是不值得他的付出

要不要離開Open Source專心找工作

因為Mentor已經把他能做的都做到最好啦

但我還是沒什麼結果

他不是那種在卡關的時候跟你說加油的人

又或者是他用行動說更為洽當

他帶著我學debugger,trace大型後端系統

陪我一起解決問題

這點真的很感謝他

在我熬過痛苦的前期後

不只Flyte順暢很多

去其他Open Source也都看很快

因為有很多共通的點

在這邊再次感謝Kevin

You are the best mentor

教給我的好習慣

  • Trace code
  • 遇到很複雜的code,要用後端的知識和直覺,去猜它的整個功能
  • Write Clean Code
  • Better Error Handling
  • 可以做小工具加快或是自動化工作流程

舉個例子,每次上傳git PR,都要打

git add .
git commit -m -s "commit message"
git push

但我覺得這樣打很累,而且經常忘記要sign-off

就可以變成

alias gcm="git commit -s -m ";
alias gpr='function _gpr() { git add .;gcm "$1"; git push; }; _gpr'
gpr "commit message"

從此我只需要一行搞定,超級方便

上Community報告的那天

我在11/15,凌晨1點的時候在Community Sync報告我花了很久才做出來的ChatGPT Summary Bot (用到上面的Sync Plugin)

那一天他下班後就給了我一些PPT的建議

並跟我確認許多報告的細節

不過最扯的是

那一天晚上我看slack的狀態欄

它好像只睡2-3小時吧

可能是怕我突然有問題要問

我感覺他比我還緊張XD

這邊再次感謝你,Kevin

不過身體還是要顧,早睡跟晚睡的荷爾蒙是不一樣的

感謝

Kevin我終於熬過前期拉

謝謝你願意在我都不知道我會不會成功的時候相信我

謝謝你告訴我我的ChatGPT Summary Bot應該被Community看見

我本來還想問你我做這東西爛爛的真的有人要看嗎

不過在我要問之前你跟我說,這做得不錯,應該要被看見

謝謝你一直當大家的後盾

之後也一起加油!

夥伴們的幫助

有夥伴是一件很幸福的事情

在這邊列出

Byron, Troy, Yi Cheng Lu, Jason, 達哥, Chao Heng 和Hank

給過我的幫助

  • 教會我PR Description寫得更完善
  • 讓我發現自己問問題還能夠問得更好,更深
  • 讓我對Flyte的其他功能透過開會有更好的理解
  • 教我refactor code
  • 腦力激盪propeller架構(後端系統)
  • 分享自己所待公司的業界Use Case
  • 我電腦是wsl ubuntu,問題很多,幫我build docker image
  • 讓我對於美國的工作環境和讀書狀況更加了解
  • 讓我自己在努力的時候,不會有孤單的感覺
  • 跟我一起講幹話

開源的好處

在這邊先推廣比我厲害的人們寫過的開源文章,給過的開源演講

正是因為他們的內容讓我決定要認識開源的

成為世界級且不可取代的軟體工程師

上面可以看出來,在熱門專案做開源是一條辛苦的路

不過如果做出成果的話,辛苦就會是值得的

因為這些專案是世界級公司的需求,而懂得人又不多,因此當背後的公司需要相關人才的時候,你就是很好的選擇

換句話說,只要能做出成果,你的不可取代性就會很高

除此之外,開源會給你機會"環遊公司",像我就因為做開源跟Union.AI, Spotify, Linkedin, HBO 還有ShareChat合作

如果你是社牛的話,就可以順便跟他們公司的人教朋友,了解公司文化,甚至有機會直接被介紹去他們公司工作

目前大部分的實習都是給你一個Impact不大的Project

或是給定重複任務,讓你一直幫忙解決不難,但正職沒空處理的事

但是開源不會有這種問題

只要貢獻量上升加上實力拉上來,Community就會願意給你做困難的專案

而這是實習沒辦法給你的

開源給你一個當Outlier的機會參與世界級專案

讓你可以突破年齡、學歷、經歷的限制

你只需要有實力和時間就可以了

心得和致謝

在開始開源的前2個月

是我大學最挫折的時候

大學這三年來的努力雖然有達到自己的設定的標準

但我沒有達成我的目標

進去台灣的Google, Microsoft 和 Amazon實習

之所以想進去是因為希望能夠看到世界級的軟體是怎麼樣的

以及認識更厲害的人

好讓自己更知道未來的下一步該怎麼走

那時候找工作的狀況也不樂觀

我很擔心自己的履歷找不到理想的海外工作

這時候認識了Kevin,認識了源來適你

才知道開源的好

透過Kevin的瘋狂輸出,以及自身的努力

現在的履歷比半年前好非常多

拿到了一直想跟外商公司合作的經歷

也體驗到了世界級的專案是怎麼做的

拿到頭銜,以及實力巨幅進步

這些讓我對未來充滿了信心

現在熬過了前期,加上Kevin總是很認真帶我

以及專案其他合作的對象們總是很認真的一起弄

還有手上的任務非常有趣,會對世界造成很大的影響

每天起床我都很期待弄開源

甚至都在想老天爺是不是看我大學前3年太辛苦

派人來幫我拉XD

說起來,我就只是有努力而已

身邊也是有大學過的很努力,但結果不理想的朋友

自己也常常設定的目標沒有達到

我深知在這個世界上努力不一定會有結果

因此我很感謝大家給我這個機會努力

對我而言,有人一起努力

是可遇而不可求的

至少過去我挑戰成為Google Intern的時候

大部分時間都只有我自己陪著我自己

雖然有學會怎麼忍受孤獨

不過一群人努力會有比較多笑容

非常感謝你們

謝謝嘉平

謝謝你舉辦源來適你讓我能夠認識大家,向大家學習

在我拿到Committer後贊助我開發設備

我一開始覺得辦活動找大家參與開源專案跟撒錢一樣

因為這條路太難了,能夠走到最後的都是怪物,可是怪物本來就是少數

很高興現在大家做得很不錯

謝謝你當一個有勇氣有夢想的大人

謝謝你即使在成功機率不高的情況下,依然去嘗試

謝謝你願意堅持推廣開源

你是了不起的大人

謝謝鼎軒

在挑戰FAANG失利的時候給我很多建議,鼓勵我繼續嘗試

謝謝你推薦我去問謝秉昂建議

謝謝秉昂推薦我嘗試開源這條路

謝謝Kevin

有人帶是非常幸福的一件事情

你讓我只需要瘋狂努力就好

不需要擔心自己的方向和努力的方式正不正確

還能夠有更好和準的反饋,讓自己進步更快

謝謝你願意一直瘋狂輸出

謝謝你讓我可以在Flyte做出這麼多貢獻

你給了我繼續努力下去的希望

未來我會繼續努力的,會盡量幫上你忙的

我知道你因為怕大家反饋太慢,卡太久

所以額外多花很多時間帶我們

以後你就不用這麼辛苦了,因為我來了

謝謝Byron

謝謝你主動傳訊息給我,看過你的背景後我覺得太厲害,根本不敢認識

謝謝你願意主動給我需要的建議

謝謝你拉我一起貢獻PR

謝謝黃翔哥哥在參加源來適你後給了我很多建議

也嘗試過幫我內推工作

之後還要幫我買嘉平給的開源獎品XD

我很欣賞Troy, Yi Cheng Lu, Jason, Wu Da Yi, Chao Heng在學生/上班族身分的狀況下

依然每周花時間投入開源

這需要熱情和毅力

成為Commiter後所看到的景色是很美好的

希望之後能跟你們一起欣賞

我為你們加油

最後推薦對開源有興趣的人

可以來源來適你看看

這是一個將開源技術帶給台灣工程師的社群

這個組織會

  • 每周舉辦開源相關的讀書會
  • 定期舉辦Open Source營隊培養Committer

我自己就是裡面成為Committer的一個案例

終於等到你,還好我沒放棄

--

--