普通人也能做到的 Open Source 開源一年 100+ PRs 完整指南 feat. 源來適你, Flyte

Han-Ru Chen
13 min readJun 28, 2024

如果能夠投胎選擇任一人的人生,我想選擇我自己。

— Roland

如果看過我之前寫的
如何成為Open Source Committer (Flyte) | 大學生21周心得分享
這篇文章更像是我的故事,也就是我是怎麼走過來的

自我介紹

正在看這篇文章的你,是個什麼樣的人呢?

是想透過開源成為軟體工程師?接軌世界?轉換跑道?

還是想在這個 ChatGPT 能夠達成許多事情的年代,成為難以被取代的存在?

無論如何,讓我先自我介紹一下

我叫陳翰儒。

22 歲,中正大學剛畢業

在過去一年成為 Flyte 這個 Open Source 專案

外來者貢獻中,貢獻量排名世界第一

最後畢業的時候拿到 Union.AI, 也就是 Flyte 背後的軟體公司的Offer

成為 Union.AI 史上最年輕的軟體工程師

在這之前,花過 900 天挑戰成為台灣 Google SWE Intern

大學 4 年中,有 2 年 3 個月都在工作

不知不覺間

成為了少數在學生期間就在嘗試過研究、實習和開源的人之一

在最後把自己的故事拿去給了一場 Ted Talk

我想證明

像我們這樣上大學才開始認真思考自己未來要做什麼

沒能進頂大讀書的人

即使晚一點才開始努力

也可以在世界級的軟體舞台上,做自己喜歡的產品,被世界看見

希望可以鼓勵到為夢想全力以赴的你們

也希望大家不要用 “像我這樣的人 …” 當作理由放棄自己的夢想

看完這篇文章能得到什麼?

我會交給你走過這段路後

所獲得的大局觀、心態、思維、方法論、心得以及未來規劃

我會盡可能地告訴你

我是怎麼演化過來的

這樣當未來和現在局勢不同時

你們才可以打造出自己的策略

希望能夠讓你們透過這篇文章

看見我現在所看見的軟體世界

以及獲得一點點拿出行動的勇氣

大局觀 ( 遊戲規則 )

這邊的目的是讓你知道,有什麼樣的經歷更容易找到前 10 %的人才能夠有的工作。

一、前輩們在做什麼?

從 Linkedin 上觀察,你會發現大部分比較厲害的純軟畢業生會有 3 種可能。

(這邊不討論 Quant 和 AI 領域,我不熟悉)

  1. 去台灣 Google, Apple, Amazon, Microsoft 和 Nvidia 等大公司工作
  2. 去海外公司 (日本,新加坡,歐洲 or 全遠端) 工作 (詳情請看這)
  3. 去美國讀碩買工作簽證,並在畢業後去找到公司願意幫忙辦綠卡留下來

二、履歷上放哪些東西加分?

要把這 3 條路做好,通常有以下條件會加分,並把這些條件加起來,
分數越高,越容易成功

  1. 大公司實習經驗 (1 列舉的公司),而去 Linkedin 上觀察,你會發現 NTU CSIE 把大部分機會拿完了
  2. 開源經驗,最好有頭銜
    (領域 Match 非常加分,寫的 Feature 被大公司用到加分)
  3. ICPC 經驗 (銀牌以上,愛考演算法的外商適用,像是 Google)
  4. 台灣頂大學歷 (限在台灣的公司適用)

三、必須知道的客觀事實

  1. 隨著 ChatGPT 的出現,現在大多數的軟體技能,
    所有人都能以非常快的速度走完從 0 到 1 的過程,
    而這也會讓以往 3 個人的工作,在現在變成 1 個人就能夠做完了
    這也是為什麼開源有價值,上面有許多任務都是從 1 到無限
    而這些任務也是真實在公司裡面會遇到的
  2. 大多數的 SWE Intern 工作,不管是大公司像是 Google, Apple, Microsoft, Nvidia 或是小公司。
    如果你問身邊去這些大公司實習的朋友,同校同學能否完成這些工作,
    答案是肯定的
  3. 遇到 Tech Layoff 的話,整年度大公司 Intern 收的男生人數可能在 50 人以內 (大公司內部有規定男女比),而競爭對手有四大四中台科北科,以及海歸,因此你必須足夠厲害通過面試,
    也必須運氣足夠好讓你的履歷被挑到
    (早點投,公司找人的邏輯,前期是有合適的人就收,後期是收最強的)
  4. 太多人能夠把實習的工作做好,而台灣大公司實習缺太少了,因此除非自身有夠突出的特殊經驗,不然想進大公司實習現在基本上,有一定程度是運氣遊戲
  5. 中小公司通常也能夠讓自身軟體能力變強,但放在履歷上 Impact
    沒有大公司實習和開源大
  6. 公司開實習缺通常有兩種目的 (1) 讓實習生做正職不想做的東西 (2) 宣傳公司,並找到願意轉正的 Intern
  7. 實習可以打開你對軟體世界的眼界,知道公司是怎麼運作的,大家是怎麼完成一個大 Project 的,不過公司幾乎不會派核心任務給你,所以你能力進步幅度會有上限

四、我的求學生涯

我在大學前三年做了 3 份實習,有 1 年 3 個月的工作經驗

在大三時遇到 Tech Layoff,沒有把握 Google SWE Intern 後

Microsoft 沒有拿到 coding interview 面試機會

Amazon, Nvidia 和 Mixerbox 沒開實習缺

Intel 那年只收 4 個人軟體 Intern

我那時候已經在工研院、中研院以及 Synology 都實習過了

體驗過資料工程師,AI 研究員和軟韌後端工程師的工作

當下跳其他公司實習的目的就是為了履歷加分,不是為了學東西了

因為實習不太可能分配我重要且困難的東西做

而這時候大三的我其實有點窮途末路

開源是我最後能夠讓履歷加最多分的選項

但因為之前在工研院接觸過 Kafka,覺得開源是一個很硬的東西

所以有點怕怕的

在看完 NTUEE x Apache 開源系列講座

Byron 的 Apache Committer 心得文

以及實際參加 Apache Submarine 的會議後

決定 All In Flyte 這個專案累積開源經驗

後面的故事可以來這篇看

總之在名人堂等級的工程師 Kevin Su 導師的指導下

順利做出很好的成果!錄取 Union.ai !

心態、思維和方法論

這邊我想聊一下自己思考過的問題和做過的嘗試

在 Open Source 做出有影響力的成果對學生來說會是困難的過程

不過把這段過程走完,會學到兩件事

  1. 如何從 0 到 1 貢獻一個 Open Source Project
  2. 從 0 到 1 完成困難的事所會有的心理過程

1 可以幫助你繼續在其他 Open Source 上取得成功

2 可以幫助你過好你的人生

所以其實這條路走完其實並不只有拿到頭銜而已

高預期 vs. 低預期

抱持高預期做 Open Source 在一開始心理上比較煎熬是必然的

因為他高機率會是你大學生涯中做過最困難的事

抱持低預期做 Open Source 心理上的負擔會比較小

但也會因為這樣做的成果就比較少

我大部分的時候都是選擇用高預期的心態在做 Open Source

會比較累,但成果也會更肉眼可見,

因為做的不上不下的沒辦法帶給我太多東西

我曾經重看過去 1000 多天的日記,
並每 50 天做一個小心得,每 200 天做一個大心得
我得出來的結論是前 200 天之所以突破速度很慢,
就是因為我沒有抱持著要改變人生的想法去挑戰目標
我只是想試試看而已
如果抱持著想要改變人生的想法去挑戰,過程會辛苦很多,
但最後這段經歷會教會你對夢想全力以赴的態度
帶著它可以把人生往後很多事情做好

每 50 天所做的小心得
每 200 天做一個大心得

要贏很簡單,難的是要一直贏下去

這句話是 Roland 說過的,

想讓大家思考要怎麼健康地穩定輸出 Open Source。

不建議有時候整天都在看 code,有時候 burnout,這樣長久下來效率其實會輸穩定輸出很多。

不過有一些 burnout 經驗是好事

因為這代表你有盡全力過

目前跟前輩們聊過,大家訂目標的方式通常有兩種

  1. 每個月要有 8 隻有用的 PR
  2. 每天投入 6 小時的專注力,一週 6 天

備註 1:人的一天專注力其實只有 4 小時,
不過因為寫程式會 build 很多東西,
以及常常要寫一些 PR Description,以及查資料
所以很難 4 小時大腦都用最快的速度運轉,把專注力用完
因此我抓 6 小時
備註 2:有 burnout 問題的朋友們,在這邊推薦兩本書解決你們的問題,
Dopamine Detox 會教會你多巴胺的運作原理並提出可執行的方法讓你可以控制你每天的多巴胺完成任務。
深度工作力會教會你怎麼讓你的生產力更高,可以透過它給的方法在發揮最大生產力的同時,兼顧人生工作以外的事情。
簡單來說,多巴胺是貨幣的生產原理,深度工作力是貨幣的運用方式。

不需要第一次就成功

這個想法在遇到挫折的時候,專案進度比較慢的時候很適用。

我剛進來的時候相當的急著有成果,但客觀上我確實還有很多先備知識要補,還有很長一段距離,做困難的事情不能急於求成,應該要有耐心點。
世上大部分的成就是因為難和阻礙多才有價值的。

學著跟不確定感相處

通常被分配到困難的任務的時候,是很難預估 PR 哪時候能被 Merged 的。

因為以下原因

  1. 你不知道要花多久時間把 PR 做出來
  2. 不確定 Maintainer 哪時候會 Review

我在自己實力不夠的時候, 1 會常常花我很多時間

而且常常做出來要一改再改

加上 Maintainer 可能要先把更重要的 PR 看完才能來看你的 PR

舉這個花一個月才 Merged 的 PR 為例

這時候我已經有一定程度的了解 Flytekit 了

Maintainer 只要有 Review 我的 code,我都盡量 1 天內改好

但還是因為 Maintainer 們當時有更急的 PR 要弄

所以可能有時候一個禮拜只能看一次

之前實力比較菜的時候

甚至有一度花 3 個月才 Merged 的 PR

舉這些例子只是想讓大家知道可能很多重要 PR
可能都會花蠻長的時間才能 Merged
建議心態上是 “固定精力投入直到做出重要貢獻”
而不是 “幾天內要做出重要貢獻”

每天複習自己的目標

可以的話,
建議把目標寫在一張紙上,做成一部影片,或是寫在一個記事本上
每天早上醒來去看它
這樣會更容易達成自己的目標,這是有科學研究的
經常盯著自己的目標,自己的腦神經就會更容易捕捉跟目標有關的資訊,
也會更容易想到達成目標的方法
(除了吸引力法則,運動科學和腦神經科學也有證明過這個方法有效)

心得

這段心得不僅是開源這一年的心得,也是我大學這四年一路走過來的心得。

  1. 年輕想要成功會犧牲很多,不過它會教會你對夢想全力以赴的態度
    帶著這個經驗,往後做許多事情都會有很大的機率成功,
    至少會做到一個不錯的高度
  2. 關於 1 ,值得思考的問題是,你想要花多久到達什麼樣的高度?
    大部分的人都跟你我一樣,會發現自己只能在一段時間內很專注地把一件事情做好,所有選擇都是一體兩面的,在年輕時選擇要往事業成就發展,勢必要犧牲其他人生體驗,以及其他領域的可能性,而反之亦然。
    就像 24 歲就有環遊世界的經歷跟 40 歲就有環遊世界的經歷是不一樣的,人生一定會因為這些故事做出許多不一樣的選擇。
    作為大學前 3 年半都 All In 在程式這塊的人來說,我確實體驗到了這樣做的獎勵,但也體驗到了這樣做的犧牲,大學前三年半我沒有夜唱、夜衝以及在酒吧待過超過 12 點過,因為這樣做我還要花 2 天時間把身體復原回來,但我覺得我付不起這樣的代價。
    直到已經為自己累積足夠多的優勢了,才敢開始玩,做一些以前一直很想做的事情。
    如果把想達成目標的時間拉長,那原本的犧牲可以少一點,所以關鍵還是看你怎麼組合你的人生。
    因為這世上年紀輕就有成就的文章大家很愛看,因此我特別想提這點讓大家反思一下。
    備註:當初想要挑戰 Google SWE Intern 跟做開源時,我都沒辦法知道我要努力到什麼樣的程度才足夠達成目標,因此我只能盡可能每天瘋狂努力,達到自己的上限,就像是用衝刺的方式跑一場看不到離終點有多遠的馬拉松。
  3. 你要學會跟孤獨相處,但要記得找到志同道合的人會進步更快。
    因為教育體制的關係,幾乎所有人都會從上大學那刻開始,才真正地開始學習走自己的路,當你比他人更早確立目標並執行的時候,你會感到很孤獨,建議這時候試著先在自己的目標上做出一定的成果,然後透過網路或參加活動,找到志同道合的人一起努力。
    我就是在獨自努力 1 年半後,到 10 個 FB 社團 PO 文後徵到跟我挑戰 Google SWE Intern 的人
    很感謝大家當初願意相信我一起挑戰 Google!
  4. 開源能夠帶給你職涯進步的機會以及寫程式的感動。
    至少我在源來適你每天都能看到這樣的感動。
    身為軟體工程師,你可能會因為做到自己不喜歡的工作而漸漸對寫程式失去一些熱情,我經歷過。
    而因為開源可以挑自己喜歡的專案,願意當 Mentor 的人,也是對寫程式有熱情的人。 (並不是職場上所有 Mentor 都會熱愛自己的工作)
  5. 開源雖然辛苦,但成功的話,獎勵很豐富,一定能夠打開選擇權,
    它是對想成為軟體工程師的學生來說上限最高的一條路。
    也是能夠不靠學歷,彎道超車的一條路。
  6. 那些大家認為遙不可及的大神,其實就是很平凡的在正確的方向上用正確的觀念每天努力而已。
    而找到能夠帶你的 Mentor 可以幫助你知道正確的方向和正確的觀念是什麼。

致謝

謝謝嘉平創辦源來適你,總是即時的回答我遇到的所有問題,你示範了 “真正的體貼是讓人察覺不到的” 這句話,希望我們之後也能當朋友

謝謝桓平,這一年來總是用行動照顧我,從你身上學到很多成熟的想法和特質,(大多時候我是用感受的,那是由許多行為形成的一個氣質),以及看到了什麼是熱情,以後跟 Terry 還有 TheKellyYang 一起拍片時一定揪你

謝謝鼎軒,升大三暑假的那通電話,回過頭來看改變了我接下來這 2 年的人生,認識你的那天打開了我的軟體世界觀,開始思考了很多自己根本沒有想過的可能,謝謝你做過的所有努力和熱情,這 2 年總是鼓勵到我很多

謝謝建平,你是我第一個 Mentor,謝謝你這半年來的耐心,願意把 10 年工程師的經驗傳給我,非常鼓勵我要往自己的夢想和目標前進,我想我會記得一輩子

謝謝 Byron,感謝你在大學時期成為 Apache Committer,並推廣自己的文章讓我能夠用 Google Search 就看得到,沒有你的推廣,21 歲的我或許連嘗試都不會做,因為對我來說太遙遠了

謝謝 Sean,感謝你傳授程式世界以外的人生課題,還有幫我買開發設備,相當關心後輩 XD,西雅圖秘密任務執行中,回去會回報進度

謝謝偉赳,從去年 7 月源來適你的經歷開始就以 Apache Member 啟發我很多,私下對談傳授了很多自己對軟體業的看法,最後還幫我內推 Eventual 讓我跟前 DeepSpeed (後來被 Tesla 收購到 Autopilot) Tech Lead 能夠認識交流

謝謝俊宏,非常罩的中正學長,分享很多經驗讓我有問題的時候都可以問,真的很感謝,很高興大學最後一年能夠跟你變熟!

謝謝育嘉,感謝從認識到現在一直挺我,陪我面對人生這幾年的所有困難,很開心最後能夠達成目標一起生活

謝謝 Jenniffer,感謝你相信我會在中正完成看似不可能的任務,有時候想放棄的時候你剛好按了一下 claps,我就覺得自己好像還可以再嘗試一下

謝謝爸媽,把哥哥和我養大並不容易,感謝你們總是盡可能地做出對未來的我們最好的決定

謝謝哥,從小到大總是不吝分享,讓我能夠早點看到 2 年後的人生可能的樣子,也讓我更有機會做出正確的選擇

謝謝你們,沒有你們不會有今天的我。

--

--