我正在念交大資工所,我決定要走資工是一個漫長的過程,這篇故事想從最早開始講起,描述過往我對資工的興趣如何慢慢建立。每個人的故事都是獨一無二,但我的故事希望可以給別人一些靈感和借鏡。

my photo cover
(某次在分享的我)

在上大學以前,我以為我會成為物理學家。我甚至不曾懷疑過這件事情,即使我高中物理段考都考不好,物奧題目一題都不會。但因為對做研究還有點熱忱,物理科展還算有拿到一點點成績,認為自己應該還是能走得下去。直到真的上大學之後,微積分跟普物都表現沒很好,我就知道自己真的沒天分。真的適合念物理系的人,在數學和物理上會有天份,朋友中不乏物理真的超強的,用觀察的就知道。我也是這時才知道,我的天賦絕不是在物理。

雖然後來一直到大二我才發現自己非走資工不可,但其實最早接觸電腦、產生興趣卻是國小的時候。國小覺得資安很酷,可以駭進別人電腦感覺就很帥,市面上不外乎木馬、病毒相關介紹的書籍,就都會借來看,裡面往往會使用一些工具當範例。現在想想那些書真的超沒用的,要當駭客的人工具當然是自己寫,漏洞也要自己找。在我小時後,<PCHome 電腦家庭>還算是很新鮮的讀物,裡面往往有一些教學,像是如何灌 Ubuntu 之類,我就會照著做,還算是滿好玩的。所以從小其實就已經對電腦感到好奇。

上了國中之後有看過 C++ 入門的書,但那時候除了基礎語法有看懂之外,當他介紹到類別、模版時,就不知所云,那時候的我完全無法理解,程式直接寫就好了,類別有啥好處。還記得有天數學老師趙麗蓮問我,「劉安齊你那麼聰明,能不能把 Wii 的手把搭配投影機改造成電子白板」那時候我覺得太難了,跟她說我辦不到。現在回想,要做到這件事,其實技術不會很難,只要能拿到 Wii 的 API 應該就可以輕鬆辦到,或是自己用紅外線發射器搭配紅外線接收器,去分析 3D 空間軌跡,大概也不是難事。那時同屆有另一個同學程肯,後來考上 Yale CS,高中時拿了資訊跟物理奧林匹亞金牌,我認為這件事情在他國中時就可以辦到,而我卻一直到大學才有這樣的能力。

國中的我還沈浸在天文物理的世界中,那時候我幾乎翻遍了所有市面上討論宇宙的書,很神奇的是,不知道為啥講天文宇宙的書真的超多,我那時天真以為我通通唸完就可以變得很厲害。我也是後來才知道,看科普書只能培養科學素養,真的高手在國中階段都已經在啃大學普物、力學、電磁學,只是從來沒人告訴我這件事,其實滿難過的。我認為我上科學班之後程度低落,跟我國中沒有用對方法唸書有關,原來其他科學班的學生都是國中就在念原文書了。

上了高中之後,高一有程式設計,老師上課方法就是講程式邏輯的概念,例如什麼是 if,可以用來判斷某個條件是對事錯,然後程式會做不一樣的事情。接著老師會直接丟一個題目,大致就是「小明想要檢查他的身份證字號是否合法,身份證字號規則是第一個字母是英文,後面數字要符合第幾位成第幾位加上某個數字要等於多少…」然後就讓同學開始練習,最後會跑一個檢查程式。那時候又激起我對程式的好奇心,我就自己找一本 C++
入門又重新念一次,老樣子還是不知道類別和模版可以幹嘛,但至少我進度超前老師了,老師上課講的東西我都會了。還記得那時候,班上同學因為聽不懂老師教的,或是對程式還沒有開竅,總之就是不會,我還會去教他們,結果這幾個現在都跑去念電機、資工都在寫程式了。

同時,我發現學校有資訊競賽,老師會在他臉書上丟一些競賽題,然後我看到覺得挺有意思,就跑去玩玩看,同時老師也會給參考資料,基本上就是演算法筆記,就邊學邊做,然後發現程式真的很有趣。不得不感謝一下「演算法筆記」,還有像是「鳥哥的 Linux」或是「Beej 網路程式設計」,這類的教學文章堪稱經典,幾乎就是教科書,又是免費給大家看,造福了不知道多少莘莘學子。

所以高一高二有斷時間就在鑽研資訊競賽,其實就是資料結構和演算法,寫題目覺得很好玩,尤其是看到 AC 的時候更有成就感。不過我認為我對資訊競賽真的沒天分,其實我覺得是共同的問題,就是我數理邏輯並沒有真的很強,所以我對數學和演算法這類的抽象思考都不太擅長,都要想很久,又不能觸類旁通。所以資訊競賽跳脫範例題,典型的 LCS、LIS 之類的題目以外,只要有一些變化,我就會不知道怎麼做。這很讓人沮喪,我覺得我不適合搞資訊就放棄了,回去搞物理科展和物理辯論。

高中時,還參加了中研院原分所的物理培訓,其中有個課程是用數值模擬去算原子分子之間的作用力,就可以研究怎樣的結構是穩定的,原分所有自己的機房,那時候好像是由一堆 PS3 核心所堆砌出來的。那時候還不是用 NvDia 的 GPU,誰會料到後來深度學習大紅,全世界都開始拼命買 Nvidia GPU 來搞深度學習。總之我覺得這個體驗對我來說也滿新鮮的,讓我瞭解到資訊在科學上是重要的工具。

雖然我的物理科展也有要寫程式,但我覺得那都非常淺,也就是跑跑資料而已。後來學測考完,覺得要幹點有意義的事情,就又做了一個科展,用數值模擬的方法去研究傳染病。關於科展我記錄在這篇這篇。簡單來說那個科展就是建立一個虛擬的世界,然後裡面得人能有互動,當有人生病時,會如何藉由互動傳染給別人。我覺得建立一個虛擬世界是非常好玩的一件事情,就像是電影 Matrix,或是刀劍神域中的人工搖光,類似的科幻作品其實也滿多的,我覺得不是不可能辦到,只是人類要花多長時間做到而已。但想要做一個虛擬世界光想就讓人很興奮,不管是高中時候的我,或是現在的我都是,所以那時候我又開始練習寫程式。這次的程式不同之前競賽題偏向演算法,我是在用程式去建立一個模型。雖然說傳染病的問題才是研究主體,程式只是一個工具,但要能把程式這個工具用的好也是滿有學問的,這過程中我又開始覺得寫程式很有趣了。

不過因為我始終認為念資工系的人應該要對資訊競賽得心應手,加上我一直認為我就是要當物理學家,所以指考填志願的時候第一填台大物理第二就填台大大氣,後面填什麼我也忘了,但其實當年我分數能上交大資工的。有時候會有點感慨,當初直接念交大資工會不會比較好,但我又覺得可能不會,因為我的各種際遇在交大不一定也會有,雖然在交大也可能有其他際遇,但我滿喜歡我在台大發生的總總事情,像是認識了台大各個科系的同學、大一就跑去修電機系選修被電、參加集思論壇和綠領、無聊時就在校園聽演講、台北地利之便讓我更好找實習等等,畢竟是在台大的那些時光造就了現在的我。

確信要走資工是在大學階段決定的,大學階段詳細故事我都寫在「台大心得與觀察系列」文章中,還有一些比較獨立的故事幾乎都有紀錄下來,所以就不再重寫。簡單整理的話,先是學網頁開始覺得前端有興趣,前端跟後端又綁在一起,所以就會去學後端,不滿足寫一些小程式就想去貢獻大型開源專案,誤打誤撞開啟我對瀏覽器的興趣,不僅貢獻 Mozilla 的 Servo 瀏覽器,還有機會開發 Puffin 瀏覽器。還修了幾門資工相關的課,其中因為修了 DBMS 覺得很有趣就開始自己寫一個玩具 DBMS。後來還跑去 Skymizer 去開發 ONNC 跨平台機器學習編譯器。此外也參加不少開源活動,在台灣開源年會和香港開源年會都有過演講,還帶領一群同好翻譯了 Rust 程式語言官網,也有在 COSCUP 主持了一個 Rust 的議程軌,這些故事我都覺得很精彩。

對資工的興趣在大學前都還在萌芽,而大學後就開始快速發展,發現有興趣之後,就開始主動做一些我覺得很酷的事,不管是開源、實習、修課,我覺得都是自己有積極去爭取的結果。不過雖然我的經歷看起來好像很豐富,但背後也被不少公司打槍過,同時也知道自己不是科班出身少了很多基礎,導致程度跟不上我想成為的高度,為此才選擇念資工所,希望把沒打好的基礎都補回來。目前就是努力鍛鍊自己,讓自己成為一流的電腦科學家吧!