112年台大資工轉系心路歷程

嗨各位,有鑒於資工系轉系心得文跟資訊不多的緣故,想說分享一下今年轉系成功的心路歷程與心得,希望能如果有學弟妹(或學長姐)也要踏上這條路的話,能給大家更多資訊,來評估自己的狀況再做決定。

選擇轉系考

先來自我介紹一下。我是這次轉系考名單裡唯一一位文組學生,物理、化學極差,程式能力不強但是我能樂此不疲。物理指考當初只有40分,認為我用重考/轉學考(都要考物理)的方式也永遠考不進台大資工,因此選擇轉系考的方向努力。

但選擇轉系考的風險實在大過於其他方式,特別是因為轉系會相對其他制度不透明,比如說可能有些系所,要考的科目很敘述很籠統,如果今天準備了一年的東西,上了考場卻發現考題與自己準備的方向相差很多,那一定會很想吐血的。又有可能因為很多事情變掛,比如說像前兩年因為COVID的原因,資工系轉系也從有上機考變成純資料審查,或是有可能有系所得轉系資格突然在你準備期間變了,或是突然不收轉系或是減少轉系人數,讓你從原本有機會轉系變成不能轉系,相關的資訊可以看看這篇,大家如果還在有選擇的時候,可以權衡重考/轉系考/轉學考的利弊,選擇自己最適合的路。

而今年的資工系雙輔的底線GPA變成3.95,而審查方式是100%個人資料審查。儘管3.95已經算高了,但我記得約仍有130/180人報名雙/輔,而都只各取7名,審查資料也沒有明確的評分標準,所以把重心放在轉系應該是相對實際的多的。

資工系今年的轉系審查方式為50%上機考,50%個人資料審查。

轉系資格

  1. 前一學年每學期等第績分平均GPA達3.38以上,或前一學年成績名次在該班人數前百分之十以內。
  2. 曾修習並通過與資訊工程系必修等同之微積分1、2、3、4(含數學系微積分一、二)。

相信GPA>=3.38對要有在顧成績,想要雙轉輔的各位應該不難,但依照去年上榜的真強者GPA只有3.39,我認為資工系在過了GPA的底線門檻後,可能依此評判資料審查的分數不大,所以應該可以適時的放開對GPA的執著,把時間拿來挪去練習轉系考之類的。我自己GPA是3.94/4.25,綜合下來應該也算平庸,大家也不用太過擔心GPA的問題。

而微積分課程只要與資工系的課號相同即可,所以比如說你的微1, 2, 3是模組1-12、13-16班,都是可以認抵的。至於微4是不能用商管微4來抵的,所以如果跟我一樣是文組的同學,記得提前規劃微4的課表,看可不可以去簽簽看其他班的微4。因為我當初沒有在大一先修微4,導致大一升大二的時候沒辦法參加轉系考試,等到在暑修期間修完微4之後,再隔一年才能參加轉系考。

最後,請記得提早準備有關轉系的一切,看好你各位的原系規定跟轉入系的規定,不要功虧一貴了。

個人資料審查

申請者請繳交轉系說明書一份,簡述申請轉系動機、就讀計畫及其他資訊相關能力(格式不拘,但文字以3頁A4為限,請勿超過,證明資料可另計)

關於個人資料,很多人都說大家的分數都差不多,資工系主要還是看轉系考試的分數來決定錄取與否,這點在雙輔的資料上限10頁,而轉的資料上限3頁可見一斑。所以在轉系考試完看一下Leaderboard就大概知道自己會不會上。

關於這點我們無從驗證,但我想在轉系考上多對三個測資的的幫助可能多於你花了好幾個月做project,然後在個人資料上寫半頁的分數。

但資工系要求了還是得好好做,我沒有競賽經驗,也沒有什麼專案,所以大部分就圍繞在轉系動機和就讀計畫,並把有修過資工或資訊相關的課程列出來(DSA、ADA、機率、線代,還包含一個EEML)水字數XDD。另外有一個自己架設的Judge,並有擔任過兩堂程式設計課的助教(一堂通識、一堂系上的選修),大概就是這樣。

轉系考

轉系考是重頭戲,今年的三題都是考古題,分別是50201. Origami、235. Pachinko、50111. Hamiltonian Cycle。基本上每年的必考題型有模擬題、二維陣列、遞迴,而其中二維陣列有可能跟模擬結合,比如去年的50085. Tank Simulation,今年很幸運的遞迴跟二維陣列都不算太難,但 Pachinko考出來有讓我嚇一跳。Origami跟Hamiltonian Cycle我總共花了30分鐘就AC了,接著花了大概50分鐘刻Pachinko。最後大概花了1:30AC了三題,最後拿300/300分(每題都是100分),今年前七名分別是300分兩名,270分一名,210分一名,200分兩名,180分一名。如果資工系沒有選擇不足額錄取的話,最低分數180分就上了。

轉系考跟邦鋒的的計程小考不一樣的地方,有不會限制cyclomatic complexity(if, case, while, for, ?的數量),以及不會限制全域變數,我覺得這兩點可以多多利用。有時候多用幾個if但讓你的code寫的簡明一點是還蠻輕鬆的,有全域變數可以用也可以讓遞迴寫起來比較輕鬆也比較好Debug。

另外在轉系說明上也有提到考場可以使用Windows或是Ubuntu,Windows的編譯環境可以選Dev C++、CodeBlocks、Notepad++、VSCode、Vim,但Ubuntu上就只能選Vim跟Gedit,環境都很簡單,沒有debugger或是花俏的工具可以使用,要習慣在Code裡面插入printf來Debug,可能是有些人會比較難適應的地方。我之後還是選擇使用Ubuntu搭配Gedit,因為我發現我蠻依賴終端機在寫程式的,怕Windonws的環境水土不服,加上Ubuntu上的diff、hexdump(怕考出Bit operation的題目),所以才選擇用Ubuntu,但我看到其他人基本上都是用Windows。

蠻多人都有反應考場螢幕太暗的問題,我在試電腦螢幕的時候發現是可以調螢幕亮度的(按螢幕下方的某顆按鈕),預設好像是在30,我調到70就蠻剛好的了。我記得調整方式應該是蠻直觀的,不然如果亮度太低也不好寫Code。

另外因為選擇了Ubuntu並搭配Gedit,所以我有先開過虛擬機來模擬我要怎麼把Gedit的perference調成自己習慣的樣子,比如說深色背景、tab的空白格數等等,然後進考場在測試的時候就調成那個樣子。不過並沒有自動補齊下括號的插件,所以這個部分得適應一下。

進考場的時候會發一張計算紙跟一張C reference card,但你不會看到這張reference card之後就會寫C,所以用處不大。硬要說的話可以在破台之後看那個打發時間(誤)。

另外有點想吐槽的地方是Ubuntu竟然是中文的,有時候終端機在跳錯的時候是寫中文我就有點錯愕不知道是什麼嗚嗚嗚。

準備轉系考的心路歷程

嗯... 不知道該從哪裡說起。

(先介紹批改娘:批改娘 a.k.a Judge Girl,是台大資工大一計程的網站,是一個線上批改系統,裡面有近400題的題目,使用方式是你可以在上面提交題目的code接著批改娘就會自動批改並回傳結果給你,裡面目前有從2015的開始的考古題,轉系考的題目也有大機率是從這裡面挑題出的。外系學生可以掛台大VPN進批改娘,可以找到一個辦理帳號的表單。)

我覺得這蠻看個人的。因為大家的程式能力其實差蠻多的。有些本來高中就在打程式競賽的人,轉系考對他們來說應該是一塊蛋糕。我自己在高中的時候大概就是會寫迴圈、會寫function,很不清楚pointer跟recursion。我在大一下跟大二上的時候就分別去修了DSA跟ADA,也順便在那時候開了批改娘帳號,寫了將近100題。基礎程式能力從那時候開始比較穩固,但現在回去看我DSA寫的程式碼真的是寫的有夠醜XD。如果要轉系的同學心有餘力的話可以推薦去修DSA,或是其他系的資料結構,因為Judge Girl上的題目後面很多會接觸到tree, binary search tree, ternary search tree, linked list, queue, graph(基本上只有概念跟dfs就夠用了,但今年有考出來), stack, heap, hash table等等。我認為去修DSA應該是最快讓能把C摸熟的方式,順便熟悉資料結構跟評估你的演算法複雜度等等。其他系的資料結構幾乎都不是用C但還是可以讓你熟悉資料結構,讓你在刷批改娘的時候比較不會那麼痛苦。

至於兩學期的修課數我都壓在20以下。上學期修了經濟系的個總統/ADA/線代/三學分通識,下學期修了個經/密碼導/機率/EEML/計概/三學分通識/體育。基本上就是不要讓自己太操勞免得沒有時間刷題目。我在上學期的時候大概刷完了批改娘上的Basic IO and Arithmetic Comparison到Stdlib & Preprocessing。在下學期的時候刷完了所有計程的考古題。另外我覺得太難的題目,像是47. Play with Words, Too.,跟Advanced分類是可以跳過的。

我在刷考古題的過程中,每AC一題就會把我的solution放上hackmd上,上tag並記錄這題的難度以及用時,如果題目的考點特殊或很難的話也會稍微寫一下解題思路跟分析題目。這件事情對我刷第二次考古的時候就蠻有幫助的,比如說有些題目過於簡單就不用再花時間重刷一遍,有些題目可能第二次寫的時候反而沒有第一次順(大概跟打音Game一樣的感覺吧);或是第二次刷到的時候有了更好的做法等等。那就可以交叉比對,從過去的自己學習。

在刷第二次考古的過程中,我著重的題目就是recursion/parsing/2d-array。我會把recursion的解題時間都壓在20分鐘以下,2d-array的解題時間壓到30分鐘以下,如果發現時間過長的話,下一輪就會優先著重在這些題目上。

我的考古題solution可以在我的部落格中找到,希望能幫助到有需要的人,可以從Categories中看年份跟題目,也可以從tags裡面找相對應類型的題目單:傳送門

以下是我認為每種題型的重要程度:

  • ★★★★★:2d-array, 3d-array, parsing, recursion, pointer, string, struct
  • ★★★★:implementation, constructive, sorting
  • ★★★:各種資料結構(bst, tree, hash-table, heap...), file, bit, pointer 雖然每年都有說考題的輸入輸出都是從stdio,但為了保險起見我還是把file列了進去。

特別要注意的像是string, sorting, file, bit等等一些常用函數跟syntax要記起來怎麼使用,比如說strcmp, strcpy, qsort和他的cmp, fopen, fclose, fseek, <<, >>, &, |,繁多不及備載。另外我有時候會使用memcpy()來取代for(int i = 0; i < n; i++) a[i] = b[i];

我認為如果能把array跟recursion都練到精熟的話就十拿九穩了,我考試的時候看到題目的標題就已經知道該怎麼寫了(對我就題庫仔)。

對於相對沒有基礎的人,我推薦就是買邦鋒的「由片語學習C程式設計」並仔細的看加上實作(不要買到cpp的那本,轉系考不能用cpp),如果還是不行的話邦鋒也有錄課程影片放在YouTube上,也可以去看看。我個人會推薦整本都看完,會對你操作C語言的信心有幫助,但如果來不及的話就挑重點看吧。

針對遞迴,說起來也覺得很玄,因為一開始總有陣痛期,很常會看不懂為什麼可以這樣寫,但神奇的是寫到一定程度之後會開竅,所以能給的建議就是不要灰心,繼續堅持下去總會有回報的。

parsing是我在遞迴裡面算是很不熟悉的領域,最近幾年的計程小考常常出現,所以我覺得多加練習的。

關於2d/3d-array,有蠻多小技巧可以讓寫作比較輕鬆的,比如說 需要遍歷x, y周圍的八個點的時候,我們可以:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int dx[8] = {1, 1, 1, 0, 0, -1, -1, -1};
int dy[8] = {1, 0, -1, 1, -1, 1, 0, -1};

static inline int is_valid(int x, int y){
return x >= 0 && x < n && y >= 0 && y < m;
}

void iteriate(int x, int y){
for(int i = 0; i < 8; i++){
int now_x = x + dx[i], now_y = y + dy[i];
if(is_valid(now_x, now_y)){
printf("%d %d\n", now_x, now_y);
}
}
}
這個方式就能讓我們統一的排除掉邊界。 又或者某些題目可以直接把整個array往右下移一格,並把邊界的地方補好等等。

另外在做二維陣列模擬的時候,要記住題目的座標系方向跟你常操作的二維陣列的座標系不同。我們一般在二維陣列當中會認為x+是向右邊,y+是向下面,但比如說50088. Mountain Travelers中的x+是往下,y+是向右等等的,建議遇到這種題目的時候可以先手算過一次sample的測資,可以讓你寫code的時候不要碰到太多難以de的bug。

最後我覺得如果你能暸解一點點C的memory怎麼跑的,或是struct的構造以及eideness,我覺得刷題上也會有一小點點的幫助,會少踩到一點坑。

接著就是我自己也比較不清楚的部分,今年邦鋒大發瘋,2022計程的題目變得很難,我在考前的時候也在思考會不會因為這樣結果變得很困難。所以考前的時候我瘋狂在背解法比較難或是容易出錯、耗時的題目,比如說50012. Block Mover with Bit Operations、50034. See-saw、50234. Maximum Cubic之類的,幸好都沒有出XDD。另外2022的Cubic Tower系列、hash table系列、heap系列也是會寫的有點小痛苦,我因為怕考出來所以也多複習這段。

接著很感謝在Dcard上罵我很爛的那些同學,有你們的刺激我才有辦法在只剩最後一哩路的時候精神振奮,把憤怒的心情化做我前進的動力,雖然沒有雙到但我轉系雙回來了。但不推薦大家把自己的弱點放在Dcard上跟大家講,尤其是有關成績的部分,在匿名的環境下絕對會有很多人來嗆你,如果你在轉系上有什麼困難無法跨過的話,可以來找我聊聊,我的email可以在我的部落格中找到,不會跟你們收錢的XDD。

我最後的批改娘的解題數是370題,其實看著自己每天在批改娘上的ranking一步一步往上攀蠻舒壓的。當我在批改娘寫累的時候就會去刷Codeforces,等心情好一點之後再回來寫,如果一天認真下來的話可以寫15~20題。

雜七雜八的總結

資工系雖然是大系但是選擇轉系的人意外的不多,所以我覺得以資工作為轉系的標準是個可以努力的方向,但千萬不要把你這年來的所有時間和心力All in進去,幫自己留好一條不差的退路真的蠻重要的。

說到底我的轉系之路還蠻樸實的,沒有像其他人一樣的破釜沈舟,就是制定好計畫之後全力衝刺。不要驕傲,不要自負,對自己有信心,就是對自己最好的安排了。

感謝在我轉系路上支持我的朋友們,在我情緒低落的時候安慰我,也幫助我解決了很多疑難雜症,愛你們。


112年台大資工轉系心路歷程
https://aaronlin1229.github.io/transfer_story/
Author
Akizumi
Posted on
August 4, 2023
Licensed under