在台大的日子已經進入第四年,不知不覺留在校園的日子只剩一年,讓人十分的不捨。從高中進入台大,到快要從台大畢業,這段日子我的變化很大,像是從一個物理學家變成軟體工程師,喜歡的運動從游泳變打網球。經歷了很多事情,多到我自己都常常忘記原來我曾經歷過,像是集思論壇、綠領農學市集、好幾家公司實習、參加的各種演講等等。

大學的主要目的是傳授專業知識,但我在台大最珍貴的是社會化的洗禮。我在校園參加各種活動、演講、課程,接觸到台灣青年中最頂間的一群,同時我也在校外參與許多活動,以及在業界工作。藉由彼此互動、學習、共事的過程中,了解到如何跟各種背景的人接觸相處,學會如何表達自己、傾聽他人,學會如何溝通與協調。

這個系列是紀錄完整的大學生活,所以這篇已經邁入四上,上一篇到三下,不過有關於三下暑假的部分,我記錄在 <這個暑假我在 CloudMosa 所見所聞>。為了畢業,該修的學分還是得修,之前因為工作、轉系、或跑去其他系修課,導致我這學期有多達五門課是為了畢業而修。然後外加自己想修的資料庫管理系統 (DBMS) 計算機結構,加起來超過 20 學分。要知道,大四還有一堆學分是很不正常的,我都替自己感到可悲。(順帶一提,下學期仍有三門系上的課要修,才能順利畢業。唉!)

申請研究所篇
其實有關於申請研究所的心得都寫在<半路出家申請國內資工研究所>,不過那篇只針對申請本身做紀錄,所以這邊再寫一點前後文,算是互補。這個篇段可能比較無聊,可以直接跳下一篇。

早在大四之前,其實我根本沒想過要念研究所,甚至一度想要休學。不過畢竟我不是賈伯斯,也不是蓋茲,沒有偉大的計畫,就硬著頭皮念下去拿到台大學士證書。後來興起念研究所想法是因為,我念資工的科目明顯輕鬆,而且暑假實習時發現自己程度其實還是滿差的,可以趁念研究所時補齊。

我很早就想到要念研究所的事,早在半年前的研究計劃就開始鋪路,並在八、九月時就開始把文件準備好,多數同學都是等十月開始要交文件才準備,不過其實這方面沒啥差,反正只是倉促問題罷了。但即便有準備,申請過程其實還是滿煩躁的,從開學一直到十月中,生活都有被干擾,一直在想要如何修文件、推薦信草稿,申請時還要跑流程,和不斷提醒教授幫忙上傳推薦信。

過程中我常常想要不要出國的問題,跟同事聊天聊過,跟洪士灝教授也請教過,自己也想過,其實還是困擾到現在。但國內先申請好總是一條退路,所以就申請台大網媒所和交大資工所。網媒所其實就是資工,但我後來沒被錄取,其實我滿失望的,因為我認為以我的程度和經歷應該要能上,但台大就是只看成績,一個未來的軟體工程師,機械工程學科都拿 C 又怎樣?不過交大資工所倒是順利申請上了,也算是放下心。在我轉型的過程中,一直擔心別人瞧不起,某種程度上申請到資工所也算是證明自己,但其實就算沒有這種外在價值,我早就已經證明自己。

申請上研究所之後,交大規定要先找好指導教授,找教授也是一件很辛苦的事。第一位找的給人很差勁的感覺,跟我對談時常常不耐煩,感覺就是不想收我,我也不懂為啥一開始寫信時不拒絕我就好,還要我特地來交大聽他講一堆自以為的大道理。第二位找的教授和善很多,我先與研究是資深學長聊過,又和老師聊過,但他認為我可能不適合,要我多想想。然後又寫信給第三位,第三位似乎很厲害,洪士灝老師推薦我找他的,不過他實驗室滿了。直到第四位,我找張永儒教授,才順利談好。

張永儒是做人機介面(HCI),而且是密西根大學博士,這點跟洪士灝一樣,讓我覺得跟密西根應該很有緣,幻想之後能去念。我覺得 HCI 對我可能也比較好,因為他不像其他領域需要很正統的資工訓練,對於我這種半路出家的工程師是非常好的題目,而且 HCI 更貼近生活,不像是其他研究題目虛無縹緲,對於想創業的我有更大的幫助。

最後就是,我雖然申請上研究所,但我也不知道我會不會去念。也許我畢業後就直接出國工作,也許我多花一年申請國外研究所。總之,未來仍充滿著不定性,但有申請上交大資工還是一件開心的事啦!

計算機結構篇
我在暑假就問洪士灝老師該不該修計算機結構,他就把我訓了一頓。我被訓了啥我早就忘記了,我只知道我不修一下不行,而且後來修課我覺得很有收穫。老師在臉書寫了多篇文章,都與計算機結構有關,我最早有印象的是 <與時俱進的計算機結>,不過老師基本上常常針對這類主題發表感想,而且看了通常也會覺得若有啟發。

到了學期末我又寫了一篇<軟體工程師必修的三門課>,三門課分別是資料結構與演算法、計算機結構、作業系統,其中一門就是這門課。這三門被資工所將非本科生的碩士生列為需補修的三門課,絕對不是沒道理,軟體開發過程中這三門相輔相成,對一個軟體工程師能不能寫出高校快速的程式碼有絕對的影響。

DBMS
這學期修了一堂資料庫管理系統(DBMS)。一開始我就打算自幹 DBMS,專案命名 StellarSQL,是一個用 Rust 實現的輕量 DBMS。而一個整學期幾乎都在打這邊 Code

這學期剛好 ITHelp 鐵人賽提早舉辦,而我這學期已經是第三年參加鐵人賽。剛好我想自幹 DBMS,就決定從從鐵人賽開始。我以 Let's build a DBMS 為題目,想說每天研究一點和寫一點,看能不能一個月搞定。但每天有固定產量真的太難,老實說我拿寫一個新的系統當主題,光是研究和查資料就把整天耗掉了,所以鐵人賽後面進度追不上,最後拿了個佳作。

後來在頒獎典禮碰到評審之一的徐千洋先生,他是 HITCON 創辦人,每年都有當評審,我們算是認識。他見到我就勉勵我說,這兩年我都寫的不錯。我覺得去年瀏覽器系列還行,但今年 DBMS 真的寫的滿差的,如同我上段所說。結果,我真的算是懂 DBMS,並且把自行開發的 StellarSQL 弄得有模有樣也是兩個月後學期末了。我想之後應該要重新寫一份更順暢的教學,但我認那段時間寫的「日誌」仍值得閱讀。

今年連有拿佳作都很令我意外,畢竟整個系列就像漫無目的的研究日誌。但我相信我選的題目都滿 獨樹一格,當大家都在寫如何用輪子,我則是在研究如何造輪子,這大概也是評審會喜歡我文章的原因。所以當我說我覺得寫很爛時,徐先生只是笑笑說他知道這東西不好寫

 ITHelp 鐵人賽會場

後期找了組員,他們幫忙分攤一半的工作,StellarSQL 的開發速度有明顯提升。幾個月下來寫了超過 10K 行的程式碼,花的時間數以百小時計。感謝 黃宇平 董書博 李彦均 組員的協助,讓專案更順利與完美。

寫一個系統真的很有趣,學校學到的東西基本上都用的到,學校沒交的也會自己去學到。我們在規劃 StellarSQL 時基本上已經有對系統做過詳細考量了,礙於時間有些以最簡單方式實現,像是 protocolcache parser 等設計都很陽春。但若以輕量版 DBMS 的定位來說,我認為架構設計絕不差,並且程式碼品質應該也算很高。

完成度老實說大概不到 1/3 吧,但雛形已經有了,是一個能動且持續開發中的專案,之後會把重要功能補齊,像是 SQL 指令還不完整,並且一些系統的模組要重寫,慢慢抽換成比較複雜但效率高的設計。