第五學期修課心得
Fifth semester
這個學期(大三上)原本預期是要在十一月參加 ICPC World Finals 的,所以選課除了必修以外都是選自己想選的,盡量只選到不用填低修單的學分。
很貪心的還想要 4.3,但最後大失敗。
室內五人制足球初級
跟 ZCK 一起來修的我的第三門體育課。
跟之前(室外)足球的老師是同一個老師,課程也大同小異,只是從室外十一人制變成室內五人制,球也換成室內五人制一般會使用的低彈力球。
不過畢竟是在室內,所以不太會在室外踩泥土曬太陽,而是踩體育館的地板有屋頂,也許比較舒服。
看到許多之前在室外足球課的熟面孔,好課一修再修。
這次一樣有分組比賽,分組後我們這組看起來似乎是四組裡面最菜的XD 之前的熟面孔強者都在別組。
不過除了跟最強的那一隊比賽以外其實都打得還可以?
我們這隊有幾個印尼人,他們感覺比較會踢,有大局觀的感覺,帶著我們也算是可以跟一些隊打平。
除了比賽部份會加分以外,術科項目的考試有兩個,一個是兩人互相傳球,一個是帶球繞一圈。
帶球繞一圈就吃小學的老本,感覺帶得還不錯(可能整堂課都有吃老本的部份,小學有在踢足球)。
另外這次有 ZCK 當隊友,兩人互相傳球的部份配合得比較好,總之最後拿到了 A+。
數值線性代數
來修一門感覺很數學的課。
這門課一開始先介紹高斯消去法,然後講 condition number,也就是什麼樣的線性系統是病態的,只要一開始出了一點誤差就會被放大數倍。
前半學期講了 matrix norm 以及 SVD 等(整個學期都不會講 SVD 實際上怎麼有效率計算 :P)。
後半學期介紹 iteration method,重心會放在 conjugate gradient method。
一些簡單的矩陣分解(LU, LDU, QR, cholesky 等)也會講到,但感覺都 focus 在手算的方法(畢竟真的實用的方法是都頗複雜),再稍微給我們一些 QR 的數值穩定度比較好、LU 比較快之類的概念。
這門課使用的教材是 ALAFF,會要求我們預習看影片等等。
另外每堂課後幾乎都有實驗課,是助教用 google colab 讓我們用 numpy 跟 scipy 的套件寫一些有關矩陣運算的東西。感覺我應該還算熟這些套件所以很輕鬆。
最後還有一個算分的作業是每個人要上台分享一次一個 topic 的環節,但我沒有上去分享,再加上蹺了數次課,有幾次實驗課沒作到。
考試期中考了 89 期末考了 92,但 lab 分數只有 75、作業分數只有 78,拿了一個難看的 B+。
不過我覺得這門課算是有趣,而且在 virtual 某場 WF 的時候彷彿有幫上忙。
計算機網路
系上必修。
其實我只有學期初上過幾次課。
期中考前的大部份知識都是修 NASA 時就知道,或是從其他管道(例如 CTF 或者高中專題)本來就知道的知識。
期末考會把 TCP 以及一些 protocol 考得更細。兩次段考都有很多定義、公式,雖然會做簡單的計算但還是背誦蠻多的,需要多看投影片。
比較有趣也比較困難的是程式作業的部份,作業二跟作業三分別要求我們用 C/C++ socket programming (不能用框架例如 drogon) 自己寫一個 http server 跟 congestion control。
對我來說算是個大工程,例如作業二我的 server 和 client 加起來總共有快一千行,但寫出一個還算滿意的東西有點美。
期中 98/100 期末 97/120,總之最後拿了 A+,考期末離開的時候大助教還來 survey 一下這門課上得怎麼樣但我甚至蹺課成癮好心虛。
不過從少數幾次上課經驗來看,老師和大助教都很不錯,助教品質優良(?)而且作業是用 github classroom 提交不得不給好評。
計算機結構
系上必修。
對我來說是一個跟 SP/OS 一樣煩躁的課。
老師會要求我們每週先看影片預習,然後上課就快速講過投影片,並且抽人來回答問題,有一些點名機制的感覺。
另外會把各班分成大概六個人的小組,在第三堂課會先讓我們小組討論一份題目後在 NTU COOL 上抽兩題以選擇題的方式考,題目可能會改一些細節例如改數字之類的。
小考題目各組一學期需要出題一次,這個小考感覺不太嚴謹,常常會有題目怪怪的問題,然後雖然是關書不討論的方式考但也是自由心證。
有時候老師會遲到,大概快十點到之後又十點半開始小組討論,就常常有一種印象是老師沒講多久。
作業一開始會是寫一些組語的程式,接著後面的 verilog 作業先是寫一個 CPU,最後用 verilog 寫出有 pipeline 加速的 CPU。有 pipeline 加速的 CPU 實在是一個有點大的作業,有一件事是我一開始想把不同的 pipeline stage 好好分成不同檔案,但 CPU 內部的東西耦合實在太嚴重難以分開,最後重新寫把大部份的 code 放在 CPU 的檔案裡面,當成用一大堆全域變數來寫。
課程內容對我來說幾乎都是背誦內容,會學 RISCV(一個比較簡潔的 CPU 架構)的組合語言命令以及 CPU 內的幾個 component 怎麼運作的,會講 pipeline 這種加速方法以及做 pipeline 會遇到的問題,也會講一些 virtual memory / memory hierachy 的東西(SP/OS 不是講過了嗎?)
考試會需要背誦很多細節,把自己當人腦 CPU 模擬一些東西,算一些小學加法,當然也要對組語非常熟悉。
整堂課找不到什麼想學的動力,兩次考試都考差不多八十分,最後拿了 A。
計算邏輯簡介
因為之前有去過 FLOLAC,所以想要來修一下這門課。
課程一開始會講怎麼寫出一種特定格式、很工整的形式化證明(主要是有關邏輯,會談一階跟二階邏輯),有點像 FLOLAC 裡面講的 natural deduction deviation tree 但是是壓平版本。
後面則是講把時間或是狀態(finite state machine)考慮進謂詞邏輯的一些 extension 例如 LTL。
一邊教會一邊帶給我們一些特定的程式驗證工具或證明輔助工具,例如 SAT solver, promela(可以用來驗證 LTL), 還有 Coq。
上面有部份唬爛因為我都沒去上課 但總之寫作業是一個輕鬆的休閒活動(準備考試不是,前兩天看投影片瘋狂抱佛腳),最後有拿 A+。
程式設計技巧
這個學期擔任助教,但也同時在 too_soft
打比賽。
已經是修課第三個學期,不能再算進畢業學分,但沒去過其他國家的 regional 想去去看,oT 又已經畢業不能打所以找了新隊伍。
不得不說真的是蠻貪心的一個決定,除了每個週六要跟 too_soft
一起團練之外,平日又要找一到兩天在 ckiseki
打。
原本以為真的是十一月要比賽,所以在十月左右瘋狂蹺課練習,到十月底才知道要延期到明年。
在 too_soft
目標大概是去日本的 regional,但在排名賽被重擊,校內賽也打得不算理想,不過有拿到去越南比賽的機會。
在越南拿到了第四名,前期在某題打表花太多時間,做後期題的時間分配也燒雞,幾何題如果最後打算要寫應該要早點開始想。
第四小時完全只做了一題,雖然我覺得我和許博翔去把數數實做完有讓那題過得比較穩,但好像那題其實怎麼樣都會被做出來的話我應該去想別題例如幾何題才對。
btw 在越南玩的經驗很酷,第一次搭有床的火車。從越南回來之後發現在越南抱怨的很多缺點例如煙味或是交通在台灣其實一直也有XD
結語
剛剛去翻了成績查詢網站後,發現足球的 A+ 比例是 75%,計網跟計邏簡分別是 36% 跟 48%,計結更只有 15%,資工再甜沒有足球甜。
撰寫本文時正在 FLOLAC 當助教,是大三升大四的暑假,已經過了一段時間才來寫,希望記憶還算準確。
會先寫第五學期而不是第四學期是因為接下來是下半年,應該先寫奇數學期感覺比較有用。