大三上修課心得(2025 Fall)

PixelCat31415
  • 共同必修
    • 沒有共同必修 😴
  • 系必修
    • 〔3 學分〕 計算機網路 by 周承復
  • 通識
    • 〔2 學分〕 音樂作品欣賞一 by 蔡世豪
    • 〔3 學分〕 大氣環境概論 by 谷邁世
  • 系選修
    • 〔3 學分〕 程式設計技巧 by 鄭卜壬
    • 〔3 學分〕 編譯程式設計 by 洪鼎詠
    • 〔3 學分〕 平行程式設計 by 李濬屹
  • 一般選修
    • 〔旁聽半學期〕 日文三上 by 石川隆男

在寫心得的時候最後的官方等第都還沒出來,反正沒有很重要所以就比較不評價成績給分。

系必修

〔3 學分〕 計算機網路 by 周承復

據說是大甜涼課,被我搞笑到變硬課,有沒有甜還不知道。課程內容其實真的沒有很多,講了網路那五層之後照著課本順序教到前三層(application/transport/network),大概就是一些常見的協定和其他一點點概念性的東西之類的。上課投影片看起來是直接拿課本作者的前幾版的投影片,所以我後來都沒有看上課錄影,去找新版投影片照著看,看沒有很懂的時候配一點點課本。內容不難也不多,手寫作業奇簡單好像都是課本題照搬,考試考一大堆考古題,所以到這裡為止提到的上課、手寫作業、考試都是幾乎沒有 loading 的。

問題整個就出在程式作業。計網出了一個 socket programming project,要用 C++ 寫一個線上聊天室,不可以用其他 networking library。我覺得我把 socket I/O 包裝得還蠻好看的,但是好的部份到此為止。我一開始往遠端傳訊息選的是 blocking I/O,要傳訊息過去對面收到處理好傳回應回來我這裡才繼續跑,又沒管好哪個 thread 可以做什麼事,結果後果就是到處都在 deadlock,尤其是 server 和 client 都 multi threaded 的情況下,越寫越亂,越搞不懂到底哪個 thread 都應該用什麼順序搞什麼事,一直到 demo 的時候都還一直戳到 deadlock 還是無窮迴圈之類的問題,至今沒有去找到底 bug 出在哪裡,感覺正確作法根本就是再好好想一想我的 server/client 到底都想做什麼事情然後整個專案重寫。最糟糕的是今年的評分標準裡面沒有一項是圖形界面,我想說「聊天室怎麼可以沒有一個畫面」,所以搞了 FTXUI,根本就是史上最白痴決定;我花了好久搞懂這個東東的邏輯,搞懂之後還是每次都要寫一大堆有的沒的才能顯示個簡單的東西,連「我要加一排會動態變多的按鈕」都是一件很花力氣的事情,最後整個 code base 有快四分之一是在搞 UI,浪費一大堆時間,而且其實也沒有真的很好看。雖然寫的時候覺得還蠻有趣的啦,但是最後只能寫出垃圾實在是感覺特別糟糕。總之這個 project 佔用我一大堆時間,尤其是在其他課也最需要時間的期末前幾週,結果我寫醜了還寫錯了,搞出一坨大便專案,連放履歷都沒辦法,純小丑,醜哭。

題外話是我寫 socket project 越寫越覺得 javascript 的 event loop 和 async/promise 真是太有道理了。更加覺得我在那邊亂搞就是純搞笑雜耍砸到自己臉上的行為。

通識

〔2 學分〕 音樂作品欣賞一 by 蔡世豪

這門課我只能說 🥴。眾所周知我的音樂素養是一個趨近零,我選這門課的唯一動力就是他可以算通識學分。

這門課是真的不錯的,老師(看起來)很專業,每次上課介紹一些曲子讓我們聽,比較多提到的有貝多芬、舒伯特、德布西,其他有時候是歌劇。但是音樂吧,這種東西我是真的聽沒有懂,他說這曲子想描繪什麼意境我只能說我沒聽出來,他說哪裡在重現前面哪一段我還要看譜字串匹配才聽得懂他在講什麼。這門課頂多算我去每週聽聽音樂,偶爾記得幾個片段,總覺得上面是這麼厲害的老師,我坐在底下根本浪費一個位子了。

最後一堂課甚至有音樂會,老師親自上去彈鋼琴,和其他(看起來像老師認識的)音樂家一起。我醒著把他聽完了,很不幸的我說得出的感想只有「哇好厲害」和「哇好好聽」。都覺得台上的音樂家都領了多少願意來這裡表演,台下還有我這種根本就什麼都不懂的 sneak in,這真的是我可以免費聽的嗎。

其實我覺得有抽到這門課太好了。不說我平常根本不會有任何機會接觸古典音樂,大概更難找到一個人這樣一首作品一首作品耐心解說然後帶我去聽。尤其是最後一堂課,那前後幾天是期末週最多事情的時候,一堆考試還有一堆作業要 due,醒著的時間大概只有音樂會那兩個小時是沒有在看螢幕的,給期末週的我帶來一點點救贖,第一次感覺音樂可能真的是能治癒人的。

不過這門課給我最大的陰影是期末考。原本期末考是倒數第二週,但是我去打馬尼拉 regional 了請假,老師居然叫我下一週找他口試,一對一面對面現場即時口試,我整個人都不好了,筆試還可以沒有壓力的亂猜唬爛想很久,面對面口試我是要怎麼糊,要不是期末考 50% 我都想進去直接承認老師我啥都不會給我零分吧。結果口試的時候老師問你對德布西有印象嗎?我說不知道;你什麼都不記得嗎?啊你上課都在幹嘛?我只好承認我啥都不記得,上課常常睡著,怎麼會這樣。不過最後等第還沒出來所以我不知道我的災難的期末考到底會造成什麼後果。

只能說真的是好課,但是我大概不會想再選了。

〔3 學分〕 大氣環境概論 by 谷邁世

大氣也是個好課,教授是美國人所以上課全英文,不過我覺得語言層面的門檻不高,只有有時候出現專有名詞怪字需要查一下。需要的背景知識也沒有很多,甚至其實上課內容有不少高中範圍,所以會高中自然就聽得懂了。課程內容大概是先講一下高中地科,然後講解一下一些雲或氣旋之類的大氣現象,然後花最多篇幅講空氣污染和氣候變遷。有三次作業兩次考試不過我承認我沒有搞得很認真,感覺最後也不會拿 A+。

第一次上課的時候好像有討論時間叫我們跟隔壁同學討論,不過好像參與度不高後來就沒有了,怎麼會這樣。

沒什麼心得,可能因為我其實沒有很認真對待這門課,就當科普小知識在加減聽。不過可以一邊拿通識學分一邊聽聽有趣的大氣小知識是還挺不錯的

系選修

〔3 學分〕 程式設計技巧 by 鄭卜壬

第三年可能也是最後一年的培訓班,第三年同時相當有可能也是最後一年的 PCkomachi。今年我們校內賽和台中站都打得比前兩年好,fysty 決定去打菲律賓站的策略大成功,拿到 regional 第一,所以明年要去打 APAC 了,不過跟 std_abs 打是不覺得有什麼贏面,大概就會是 PCkomachi 最後一舞了。

在培訓班做的事情就那樣,不過我覺得每週一次團練和一次隊上自己的團練真的是有不小 loading 的。

對培訓班好像也沒什麼特別的心得。時間不斷證明我在隊上就是個接近湊數的,不求有什麼厲害的表現只求不要搞笑,但是我還是每天都在搞笑;有智慧的事情都是隊友們做的,我頂多算一個知道 C++ 怎麼寫的人,說我是競程選手是勉強了。總之我現在的任務就是平安的打完 APAC 同時不要太醜。

明年不知道還打不打,可能還要看其他事情有多少,畢竟培訓班 loading 是不小,我再打大概也頂多只能算玩玩。

〔3 學分〕 編譯程式設計 by 洪鼎詠

寫編譯器課,花一個學期寫一個真的能動的編譯器。跟高等編譯器不一樣的是高等編譯器比較多討論編譯優化,編譯程式設計是在討論怎麼寫出編譯器本身。一個編譯器做的事情大概有幾個階段:

  • lexer 把原始碼分成一個一個 token,像一個 operator 或一個 identifier 都是一個 token,這一步需要靠匹配 regex。
  • parser 把一串 token 按照 CFG 變成 parse tree,但是匹配 CFG 不好做所以需要一些其他處理和條件(L(0)、L(1)、LR(1)、…)之類的。
  • 做 semantic check 檢查語法錯誤看他有沒有亂寫。
  • 生成 target code,這門課不討論 IR,生成的是 RISC-V 組合語言。

這門課是真的學得到東西也還蠻好玩的。四次作業分別是做這四件事情,兩人一組一步一步的最後寫出一個完整能動的 C–(一個簡化版 C 語言)的 RISC-V 編譯器;兩次考試考上課教的東西,open anything 包括網路資源和 LLM,甚至考試前會給一份複習題,有讀就能考很高。分數奇甜,看起來是一個全班 A+ 的節奏。當然最重要的還是寫編譯器就是還蠻好玩的事情,雖然我一直亂寫一通污染 code base,又該跟小方塊道歉了 😔

〔3 學分〕 平行程式設計 by 李濬屹

(嘆氣)

我去年就打定主意我要修平行,因為我是真的想學平行,包括 CUDA 之類的內容。但是李濬屹這門課,真的是 😀👍

課程內容一開始是複習一些計結教過的東西,然後 MPI,然後 CUDA;過程中一直複習和討論效能優化該注意的事情,像是你要想盡辦法到處發現並降低各種 overhead、你要找到是誰在慢之後優化那個最醜的瓶頸(Amdahl’s law)、你要很注意並想辦法利用 memory hierarchy,等等之類的。其實我覺得課程品質是還不錯的。

但是平行作業整個就是一坨。

  • 作業一是玩一個 推箱子遊戲,號稱是要你平行解題,結果根本就很難有什麼平行策略,在公開測資上 single threaded 暴打所有 multi threaded 解;我的平行解從頭到尾做的事情只有把所有資料結構換成別人寫好的 concurrent 版本,半點智慧都沒有,其他力氣都花在大力壓常和算法優化,找不到一點「平行作業」該有的要素。
  • 作業二是某個電腦視覺的算法要拿 MPI 在很多 node 上平行,結果因為 arithmetic intensity 特別低所以幾乎所有平行策略都要輸 single process,更不要說完全輪不到要優化 message passing 的那步因為根本沒幾個 message 要傳;搞不好他要我們學的就是好好 benchmarking 然後合理在該平行的時候平行,那我只能說好吧。
  • 作業三是 ray marching,但是 ray marching 平行之後真的沒什麼優化空間,我想很久到底憑什麼我在排行榜上輸一大截,結果是因為整個程式的最大瓶頸就是輸出 PNG,前面那些人把 PNG 的壓縮選項關了所以快一大截,三小,這樣算我輸喔。
  • 作業四是你要像挖礦一樣猜一個 nonce 拿去 hash,但是他評斷的 metric 居然不是你算雜湊算多快(每秒可以做幾次雜湊之類的)是計時你猜到一個對的 nonce 要花多久,整個跟猜拳評分是一模一樣的意思;而且我寫了好幾天一直想我到底能壓什麼發現我失敗了,有其他人直接扔給 LLM 花三分鐘寫完,hash/second 跟我一樣快,我整個人都碎了。
  • 作業五是唯一有道理的作業,要在 GPU 上面做星體運動(N-body)模擬,我花很久搞砸很多次才找到好優化的方向是什麼,不過我其他作業要燒起來了所以寫到一個程度就早早交了沒有繼續卷;糟糕的地方是 N-body 就是一個很知名的混沌系統,助教完全沒有想解決模擬誤差問題,如果模擬過程有誤差他就送你一個 WA,所以某種程度上包括我有過的人都是有一點靠賽過的。

有一說一覺得作業五還是不錯的,但是前面的就是純搞笑。

平行考試我也覺得還蠻沒道理的。期末考出一個「請問 CUDA 的 thread/warp/block/grid 在 ROCm 上叫什麼名字」,搞什麼笑;公告更正都嘴巴講講,沒聽到就沒了,我是不承認這是我的問題;其他題目有申論題有手寫程式題,我寫完的感想是他出這份考卷的目的只有壓平均分,感覺不到我寫這個考卷有檢驗到我多會平行或我有從這些題目學到什麼。

上課內容是不錯的,但是作業和考試完全就是一坨,偏偏最後分數還是要靠這些。現在等第還沒出來,如果最後我沒 A+ 我不會很意外,但是我會(我已經)對這門課相當失望。往正面一點想至少我覺得我確實學到一些平行的技術,但是只能說別對這門課有什麼非分的期望。

一般選修

〔旁聽半學期〕 日文三上 by 石川隆男

想選日文三上是因為前兩年已經修了日文一二上下,想說要不要繼續,但是日文三全台大只開個位數個班,還有一宇宙的人想修,結果就是第一堂課 50 多人抽九個之類的荒謬的機率,然後我就沒抽到了,所以去登記旁聽想說反正我不缺學分,旁聽也可以一起聽課考試。

石川隆男看起來就是個慈祥和藹日本阿伯。他的日文課還蠻自由的,他常常會上課提個問題然後叫 每個人 輪流全日文回答,你說什麼他還會像聊天一樣來回跟你說幾句,很可怕不過我覺得相當不錯。課本的上課內容的話就差不多那樣,有時候會補充一些相關的、一般日文會用但是課本上可能沒有的表達之類的。

不過到後半學期其他課事情多了一點,所以就扔掉日文減少不必要的 loading 了。我覺得其實現在我日文變好的瓶頸是要去持續的背單字,但是我沒有做這件事情,去上日文課也都是考前短期記憶,是拿了很高分但是我日文其實沒有在變好,之後要不要修日文三可能也可以再想想,大概我哪天下定決心每天自己做點什麼才真的會有用。

後話

這學期本來是有計安沒有編譯器的,不過看到編譯器就覺得「哇好想修喔」,又覺得上面這些加計安我一定扛不住,所以決定退計安加編譯器。最後證實還算蠻對的,修計安需要花的時間真的很噁心的多,而且我這樣還是感覺好忙喔。

我真的不知道到底憑什麼我會覺得我很忙,明明只有 17 學分,尤其是接近期末的幾個禮拜。可能是因為平行兩週一次作業,每次作業其實 loading 都不小,不只是實做還要一直測試修改來回調整實驗,還要寫 report,最糟糕的是因為作業品質很糟還會有額外心理傷害。也可能是因為培訓班一週團練兩次讓我感覺起來好像時間很多但是其實沒有。也可能是(根本就是)因為我計網 project 在搞笑,不找隊友(太晚找以致全世界早就都兩兩一組了)還妄想寫 GUI 在期末前浪費大把時間。總之我還是很莫名其妙的把自己搞得很沒時間。

其實這個學期最重要的根本就不是修課,是投實習的時節又到了。去年我只投了 Google 和 Jane Street 都一下就死了,今年我投了 Google 和幾個海外的量化交易公司,現在看起來只剩台灣 Google 比較有機會。投實習的過程要做履歷,要面試,要跟 recruiter 說說話,有時候他問問題有時候我問問題,其實我覺得我是沒說出什麼充滿智慧的發言,但是在這個過程總是會慢慢看到一些學校外面的、recruiter 和 professional developer 他們到底關心和他們在思考的是什麼。感覺開始看見一些修課以外的事情,而不是把修課當世界裡最重要的第一順位。

上個學期末我寫下「所以我都學了什麼,還不是花一堆時間去學早就有八千萬人會的東西」,現在我有點覺得那又怎麼樣,我本來就是個沒什麼特別的灰塵,死不了就好。只要我做的事情覺得很開心那就很好了,像是我寫計網寫編譯器寫得很開心,寫醜了那又怎麼樣,我不可能有辦法寫出一個世界頂尖的什麼軟體,同樣的東西一定無數個人早就做過了,那做這件事情剩下的唯一價值就是我寫得很爽,那我真的寫得很爽很喜歡做這件事情嗎?對,那就好了。

消極的失敗主義好像也不是惡魔,反正人生價值本來就不可評價。

後話(二)關於等第和下學期的計畫

過幾個月後的現在等第出來了,正是又該選課初選的時節。

等第的話算是一點都不意外,兩個通識拿 A- 其他 A+。本來想說平行敢不給我 A+ 的話我就要一怒之下怒一下,結果沒有發生;不過想一想我期末專題可以說亂做一通,要是他想不給我 A+ 我可能還是要找找自己問題。通識就,通識,我拿一個很通識的心態修他結果拿這個成績合情合理,A- 的官方描述是「所有目標皆達成,但需一些精進(All goals achieved, but need some polish)」我覺得是相當的中肯。

反正通識本來就是一個聽好玩的,要不是畢業門檻我可能不會想選這幾門課。想到這裡寫下這句話的時候突然覺得我是不是什麼時候開始變成那種只關心自己的領域鑽牛角尖對其他領域一概不聞不問的人了,但是我覺得話也不是這樣說,你今天要我去當聽演講一樣聽他的課或是你要我去聽個音樂會,我覺得相當好,但是我還要花時間寫作業還要領一個不好看的成績在成績單上(或是拿好成績但是要花很多力氣卷一個我其實沒有那麼那麼熱衷的課,差不多糟糕),是相當的沒有吸引力。

十五年前的我是可以幾乎什麼書都能讀得下去的,怎麼會呢,怎麼會呢,怎麼現在的我已經連一門通識都覺得找不出看起來有興趣的了呢?說到這個的話,十五年前的我可以連著幾小時讀一本書,一直到國中都還是,現在我一本正常長度的小說讀三個月才斷斷續續的讀完了。從什麼時候開始我做什麼事情稍微久一點就總是有一種焦慮,覺得我花了好多時間喔,我好不 productive 喔,我到底在幹什麼,專注力像往高山爬的路上越來越稀薄的氧氣,一點一點被抽乾,直到我沒有辦法繼續手上的事情;更可怕的是這種焦慮是可以被麻痺的,只有在放棄思考,開始反覆的沒有意義的活動的時候(像是滑 threads 或打開踩地雷),讓思緒變成一具清醒的屍體,屍體是不會焦慮的。結果就是只要我的精神不夠強的時候,就會開始增加每一天裡面保持這種醒著的屍體的狀態的時間,然後精神更不好了。

扯遠了,整段都扯遠了,不過就是一個剛好的有感而發,這個問題存在好一段時間了。總之我覺得通識的成績就給他去吧,どうでもいい,知らん。

下學期看到一個數位影像生成,課程介紹長下面這樣。

我覺得我應該不是第一次看到他了,但是今年他特別引起我的注意了,ray tracing in one weekend 不就是去年計圖期末我們的 final project 的原型嗎?尤其是,我覺得我太想學會這種寫實的渲染到底是怎麼做的了,越來越想知道,修完計圖之後更有興趣了,總之我現在的計畫就是直線去加簽然後獻上我的生命一生懸命的把他修完。

不過還是有很多討厭的課,像是 AI 導、國防、經濟學(通識用),計系.網實可能其實也有一點點沒有那麼樂意修,然後我的 loading 就這樣被沒有很想做的事情一直塞滿,非常討厭。排一排覺得我下學期 loading 應該可以預期的必須有點大,希望可以活下來。

fingers crossed!(我投某實習,recruiter 在最後一關面完等結果的時候的某一封信跟我說這句,真的被暖到了。結束之後一定找一天寫面試心得)