文有點長,請多多包涵。
【背景】
本身是四大化工系畢業,不過對化工應該是沒甚麼興趣,就渾渾噩噩順利四年畢業。當完
兵在石化廠工作了一陣子之後想換個跑道,所以就跑去補習班學JAVA和Red Hat Linux,
然後又去資策會上了JAVA班。結訓後就在接案子的公司用JAVA寫些金融的中台系統。
【報考動機】
最主要的原因是因為之前的工作其實就只是在做CRUD和傳資料,一般專案寫的東西稍微有
點千篇一律,覺得有點乏味。想要寫些別的甚麼像是大數據處理、機器學習或是更底層的
一些東西呢,能力又還不夠,因此才想要報考研究所,提升自己的能力,對電腦科學了解
得更透徹一些。
【成績】
數學 計組/OS 資/演 英文 結果
台大資工 47 59 21 86 落榜
交大資甲 65 64 49 - 備19
清大資工 35(計科) 61 - - 備30
成大資工 73 59 80 - 正26
台大電機丙 60 88 76 60 正6
【準備時程】
我在前年的11月就報名了大X,因為還在工作,時間上想要比較彈性,所以全部課程都是上
數位課程。一直到去年十月底離職全心準備考試。雖然前年11月就報了,但因為本身太懶
惰的關係,直到去年11月中才把所有課程影片上完(汗)。一月上旬開始寫考古題,台大資
工寫了八年,交大寫了三年,清大寫了四年。
【各科心得】
我自己的學習各科的順序如下:
離散 => 線代
記組&資結 => OS
資結 => 演算法
◎離散數學
離散這顆準備起來很方便,東西較少,相對好學,因為離離散散,沒甚麼連貫性,可以上
完一塊後休息一下先上別科再回來也沒關係。大致上分為基礎數論,排列組合和遞迴,圖
論,代數和其他(邏輯、狀態機)。題目方面,我是把黃老師課本的題目大概做了1/3左右
。可以的話,做多一點題目會比較好,但如果為了做完淪於用死記或者沒有完全弄懂的話
,那倒不如做少一點。離散這科雖然好學但是卻不好考,運氣成分稍微重了點,就看題目
難易以及考試時有沒有靈光乍現。
◎線性代數
線代基本上是環環相扣,建議是一氣呵成學完,中間如果有斷掉的話之後要接著學會比較
吃力。像我自己就是到向量空間的時候覺得太難,先跑去學別的,回來要再接起來又重新
把前面學過的掃過一遍才能接下去聽得懂。
線代是相對難學的科目,一開始會覺得東西非常多非常雜,但其實背後的觀念大概就那一
些,概念真的通了那是非題和證明就會簡單很多。計算方面大部分其實就是一些機械性的
動作像是SVD分解,找representation matrix,找eigen value,正交化,找投影向量等等
,須做熟。
計算部分真的是白花花的分數,像我自己是沒做熟,考試的時候算得很慢或者算錯,掉了
不少分數。黃老師教起來比較偏向直接用代數的方式來教,我建議上完課之後,可以看一
下這一本LINEAR ALGEBRA, Jim Hefferon,網路上有合法的資源可以下載。這本書有講到
determinant,eigen value和eigen vector的幾何意義,會比較清楚線性代數在玩甚麼。
黃老師課本的是非題對培養觀念來說太重要了。後面計算部分我自己是挑簡單和中等部分
的做,大概做了一半。建議多做一點,做完才會熟,考試才算得快,才不會算錯。線代是
相對難學但是好考,畢竟計算題變化較少,而是非計算又總是圍繞著那些主要觀念。
◎資料結構
資結的內容基礎的部分就是把那些堆疊和佇列,那些樹,那些hash table,那些排序演算
法。這些部分其實就是要記insert/delete/modify等等的步驟。接下來就是會討論在一些
演算法裡面,使用不同的樹/堆疊/佇列/排序演算法對時間複雜度的影響與討論等等。老
話一句,熟練度。再來就是要確定一些次數的算法,基本上應該是以演算法聖經那本教科
書為準啦。像這次有幾題hash table搜尋次數就因為多算了1,被倒扣到吐血。
◎演算法
我自己準備的方法是熟讀重點中的重點,時間複雜度計算、dynamic programming、
shortest path problem、flow這些都是重點中的重點,每年必考。NP complete那邊就是
把定義弄懂,真的了解證明步驟背後的緣由,演算法就是考古題有出現的在念即可。剩下
的就是做考古題不會的去找聖經或google。
◎計算機組織
計算機組織其實就是做計算機的規則,這些規則都是人訂定的,它是有一套邏輯和步驟在
那邊的,確確實實將這些規則和做法記起來,大部分的題目上是不難的。準備這種類似背
科的東西最容易了,只要一直做題目,一直記,一直做題目,一直記。我自己是把補習班
課本的題目全部做完。
◎作業系統
如果把電腦想成一個公司,作業系統就是CEO,要分配錢、設備(resource)下去給員工
(processes)然後完成許多任務(tasks)。這個學科就是在探討怎麼個分法最快最有效率。
所以有很多作法(演算法)像是排程,memory allocation的方法等等。這些也都只是規則
和步驟而已,跟著規則走基本題拿到分數是絕對沒問題的。比較難的大概
synchronization 部分的演算法,這邊的code至少要練到自己默寫的出來,而且完全懂每
一行code在幹嘛才行。這一科我也是有把補習班課本的題目全部做完。
記組和作業系統這兩科我覺得是最穩定的兩科,反正就是背多分,除了台大以外,其他學
校的考題變化較少。申論題的部分考的就是到底有沒有把背的東西真的弄懂,應用在題目
上。沒學過的就是google。我自己是沒看恐龍,因為沒有時間,遇到問題會找找看恐龍有
沒有這樣而已。
【結語】
其實動機是最重要的啦,首先要確定自己想要念資工。如果不知道是不是真的想念資工的
話,那至少要確定自己想要考好,哥考的是尊嚴XD。觀念是最重要的,念書的時候我自己
是傾向一步一步,在觀念上扎扎實實的一小塊一小塊弄懂。就像柯P說的,很多個0.9乘在
一起還是0,把它變成1是很重要的。一開始會覺得要念的東西真的超多,會很慌,有的時
候甚至會囫圇吞棗一直趕進度,但其實根本就沒有懂或者是用死背的,這樣唸到後面反而
事倍功半。
接下來是熟練度的部分,熟練度真的就是要靠許多的題目累積,這是騙不了人的,像是我
的記組和作業系統,寫的題目最多,分數最穩定。而數學寫的題目太少了,不夠熟練,儘
管知道方向,但算得太慢,或者在一些細節上容易出錯,成績就比較低。然後我因為演算
法可以說只熟練重點部分,考試當然像賭博一樣,有讀到的就會,沒讀到的就GG,分數標
準差超大。
還有就是避免粗心,如前人分享的,一張考卷一定有題目是我們會寫,答案都算出來了,
但粗心少看一些條件或者計算錯誤算錯了,這些分數真的也是不少,我自己今年考平均一
個學校可能掉了十分不只。惰性人人都有,但要想辦法克服,老師常說撐下去就是你的。
或許讀書會是一個方法,不過我自己還是單兵作戰啦。
最後感謝我的家人、女友、補習班以及朋友給我的支持與幫忙,期許自己在學成之後能夠
和大家一起為台灣在電腦科學領域的競爭力盡一份心力。