研究篇
大三上開始接觸瀏覽器的原理與開發,不知不覺就變得很有興趣,覺得還想要接觸和了解更多,所以參加了 IT 邦幫忙的鐵人競賽,透過連續寫三十天的技術文章,加強與強迫自己去學習有關瀏覽器的更多知識。
不過單純就原理而言,我寫差不多快二十天的時候就沒料了,只能說因為我懂的原理實在還太淺,無法更深入討論很細節的部分。為了撐場,就想到可以去找一些論文來看,我都鎖定有關瀏覽器研究方面的論文。沒想到後來也這麼就讓我把剩下日子撐完了,過程就是每天花四小時左右把 6 到 10 頁的中短型論文看文,然後寫摘要和心得。後來我系列文章來《做個網路瀏覽器吧!》很幸運在鐵人賽中拿到軟體組的首獎,真的是挺開心的。
不過其實我也只是懂的比外行人多一點。所以我想要更深入的研究,就升起想要找教授做研究的念頭。就跑去資工系網站看,有哪個教授比較適合指導我,看來看去好像都沒有哪個教授的研究專長直接與瀏覽器原理與開發有直接關連性。不過我認為瀏覽器應該是一個跟「架構」很有關係的題目,資工系很巧的是,研究專長中有「架構」兩個字的教授有三位,三位都位在官網中最上方彼此相連,兩位副系主任一個網媒所長,接著我有去看一下這三個教授的研究背景和經歷,最後我發現只有一個教授比較適合我,也就是機會只有一次。
我在此之前已經為了「做研究」這件事情累積很多打交道的經驗。高中時期專題研究找過師大物理系教授,為了實驗器材跑去找中研院物理所研究員,大一開始在大氣系當研究助理,大二跟生機系導師做研究。
經歷雖然滿多的,其中師大傅祖怡教授和大氣系林博雄教授應該對我是滿意的,但也有幾個是失敗的例子。我找中研院研究員指導的高中生青年研究培育計畫,後來因為高三上覺得要唸書,最後不了了之,我想她大概對我很失望吧!在生機系本來想做生醫方面的深度學習研究,後來也被我隨便混過去,好在當初是找班導,感情比較好也讓我比較沒這樣自責。但先前的失敗經驗卻深深烙印在我心中,我不希望我又重蹈覆徹。
在找教授方面,我只有一次機會,失敗了大概就要出台大找指導教授了。好險我在寫文章的時候看了很多論文,算是我的籌碼之一。我滿欣賞清大彭明輝的,他的故事我覺得都很值得學習,其中一項是,他在去英國念博士的時候,飛到英國與教授第一次見面的時候,教授丟給他幾篇論文,叫他回去念完之後來討論研究方向,這時候他跟教授說「報告教授,這幾篇我都看完了!」,教授馬上對他另眼相看。想看原本故事的話,可以去看〈劍橋去來〉這篇文章。這篇故事基本上就是告訴我在找老師做研究前,總得先唸過一些論文、做點功課,不然好意思說想做研究?換句話說就是做任何事之前要有所準備。
我挑教授,教授當然也挑我,但我相信教授一定會收我。我先寫信表明我有意願找教授指導,並詢問是否先見面討論過,信件中並附上我之前閱讀過的好幾篇論文以及解析,再說明我有開源貢獻經驗,以及在兩家公司實習過。我想不管哪個教授看到這麼有誠意的學生一定會收的吧!後來跟教授談得滿順利的,就正式找資工系洪士灝教授指導了!
鋪陳了這麼多,我的大三寒假其實就在做研究的基礎功課,包含繼續看了一堆論文,並且申請科技部大專生計畫,光是寫計畫申請書和想研究方向與題目,寒假就悄悄地過完了。 後來申請計畫有過,研究計畫正式執行期間是七月到隔年二月,得知計畫通過已經六月中了。不過當然不能這麼等到結果出來才開始做研究,有沒有上計畫都得要認真做研究,所以大三下每兩三個禮拜會去找教授討論一次。
一開始是滿熱血的,不過後來慢慢發現瀏覽器方面的研究真的不好做,因為瀏覽器這個軟體發展目前大概算是高原期了,而且是不是已經快到天花板了也沒人說得準。簡單來說就是很難有重大突破,進步都是些微的。而我認為最困難的還是瀏覽器本身的複雜度,如果想做有份量的研究,勢必要拿 Chrome 這類主流瀏覽器來當材料,但這類軟體都是百萬行程式碼的大型專案,程式太複雜以至不是說想改就能改,甚至想要有全面的理解都不容易。
這方面我也是挺慚愧的,雖然我有心想有有成果出來,但也不是花時間就能確定有回報。我真的不想重蹈覆徹,我已經下定決心這次要把研究做好做滿,畢竟是我真正感興趣的題目。最後大三下只做一些空想實驗,建立系統並收集前十大網站每天的備份映像(瀏覽器的重要研究素材)。雖然一直跟教授說要把 Chromium 改一些內容來做應證空想實驗的結果,但最終大三下仍沒實際做到,我的確有花時間研究原始碼,只是我實力不夠最終沒在這學期做到。
但研究做不出來一直是我的隱憂,使我壓力非常大。我希望我能做出高水準的研究,我不想讓教授失望。在一次找教授討論的時候,我問說如何確保自己有穩定的產量呢?教授說做研究要有洞察力和遠見,要能發掘哪邊有題目,並在看到題目時候能判斷可不可以做,這個能力是要練習的。如果今天是博士生,當然就會有做出研究畢業的壓力,如果有幾個月沒有做出亮眼的成果,指導教授可能會擔心是不是能力不足,但倘若他以前的表現夠好,教授會相信他最後能做出成果的。教授的確有安慰道我,意思就是我還是大學生,現階段主要在練習。但我對自己大三下的研究滿失望的,我覺得並不夠水準,但老師專題研究仍然給我 A+,老師願意相信我,我下半年的研究絕不能失敗。
修課篇
下學期系上必修有四門,我真的認為太多了,電資學院大三下開始就沒必修了,我們系到大四上還有兩門。比較值得一提的是,我退掉一門比較不重要的,把同時間安排成資工系的資料結構與演算法,另外又選了資工系的作業系統。
由於大二到大三上我都在公司實習,基本上沒有安排多餘的時間去資工系修課。雖然我在軟體開發算是有點經驗,但缺乏最基礎知識訓練,因此這學期下定決心好好來修課。最後我這學期總共修了 23 學分,是大一之後最多的一次。
先講講資工系的課,我在大三去修其實比一般資工系學生都晚了,對他們來說一門大一下,一門是大二下。但我認為我這時間去卻別有一番滋味,因為我寫的程式不少了,參加過開源專案也在公司實習過,對這些知識會更有感覺。就有點像剛學了微積分可能不知道可以幹嘛,但事實上之後在任何工程學問都用得上。我的順序就是在解決問題時發現能力不足,再回去補,我認為兩種學習方法都不錯,我恰好是缺了再補。總之資工系的課都上的滿開心的,帶給我這學期快樂的時光。雖然我一直很懊惱怎麼不是直接念資工系,但我認為有現在對軟體開發的熱情卻也是因為我山迴路轉的經歷。
必修有一門流體力學。有一本小說叫做《十月的天空》也有拍成電影。是描述美蘇太空競賽時期,美國一個煤礦小鎮高中生築夢做火箭的故事。我覺得對我後來影響很大,我因為對宇宙好奇所以喜歡物理學,因為覺得航太技術很迷人而喜歡工程。那時候我夢想去 NASA 工作。不過那時我只有國一,興沖沖取得了《飛行工程基礎》《實驗火箭原理設計與製作》兩本書。都是看完前幾章就看不懂了,後面都是微積分,讓我覺得很挫折。後來期末報告,我想到可以重新研究火箭技術,再去翻這幾本書,不經會心一笑,現在看這些書變得很輕鬆了呢!
另一門必修課是機械元件設計,是有史以來的大危機,因為這老師下手不留情,直接講結論吧,這學期有 10/40 學生被當了。其實我在轉進生機系以前覺得機械滿有趣的,那時候以為我可以念得來,不過事與願違,我發現我對力學計算真的是爛地一蹋糊塗,一路上力學課程都感謝老師仁慈的放我過。所以碰到這麼嚴格的老師真的很不幸。
這門課考四次段考,並以段考成績當作學期成績,此外老師不調分。為了讓這門課能過,我真的是繃緊神經在應付,最後剛好過及格邊緣一點點,拿了 C- 過關,但我已經心滿意足了,這麼嚴格的老師好險我只需要遇到一次。對這門課我是又愛又恨,好的地方是我從來沒這麼認真上過系上的必修,我又重新體會到認真去理解機械是怎麼一回事,此外雖然我成績不好看,但我確實比較不那麼怕機械力學了。不過壞的地方是,他真的佔了我一堆時間,辛辛苦苦應付才混個及格,使我不能花更多時間和心力在資工領域上。我同班同學好幾個每次考試都接近滿分,這時候老師就會說指著 M 型化的分數的右邊說,看來我又考得太簡單了,這麼多滿分。我親愛的老師,您有看見左邊一堆人考不好嗎?即使在台大,社會的差異依舊明顯。
總之這學期順利 All Pass 了,軟體工程師能順利熬過一堆機械的課程,真的謝天謝地了!
課外篇
每年三月中台大都會有杜鵑花節,就是舉辦校系與社團博覽會給高中生參觀,今年我也有參加。我和學弟妹負責一個攤位,做了一隻會動的章魚機器人做展示。
杜鵑花節我都會很認真地跟高中生解釋,不過我覺得高中生的心態都有點隨便,讓人感受到誠意的少之又少。面對沒誠意的客人,主人也會失去熱情的。
此外也有去學生開源年會 SITCON 演講,題目是瀏覽器原理與開源經驗,演講真不是容易的事情,準備過程也發現自己有許多地方不是很懂,但真的能從自己說出來的知識,就是真正屬於自己的知識了。在會場也認識了一個 Mozilla 的工程師鄺子進,因為我參加的開源專案 Servo 就是 Mozilla 的,他很清楚我講的題目,也因為這樣交集我們共進午餐聊了一些。談談瀏覽器的開發,中西開發文化差異,以及過往經驗我覺得都挺有趣的。不過我最佩服他的一點是,他會到處參加這種會議,並擔任講者講各種題目,且他能用中文、英文、廣東話演講,每次的演講他都嘗試挑戰自己。事實上這次演講後,我也有點「上癮」了,面對超過一百名聽眾演講真的是件有趣的事情,我在大三的暑假會在開源人年會 COSCUP 有兩場演講,相信我之後會找更多機會趁勝追擊!
剩下時間我也寫了不少程式,都市傳說云大學畢業需要累積十萬行程式碼才夠水準。我想我大概輕鬆達到這目標吧!其中這學期花比較多心力的是開發【氣象機器人】,這是一個可以回答任何問題的聊天機器人,我讓她可以支援 Line 、Messenger、Telegram 這三個平台。花了不少心力增加和改善功能,學妹和朋友也有投入協助開發,達到近兩千位使用者,也算是小有成就了!
故事大概就到這邊了,感謝大家的閱讀,接下來的故事會更精采,之後別錯過了!
沒有留言:
張貼留言