分享到plurk 分享到twitter 分享到facebook

版本 f281a9fb29f2120a12edf606c342a25fb31d684e

User/Max042004

Changes from f281a9fb29f2120a12edf606c342a25fb31d684e to de5c4fba37eb875a1084ff51e7bf360d0ff8b542

---
title: Max042004 (劉孟劭)
categories: User
...

# 簡介
* 國立成功大學 資訊工程學系 117 級 (2024 ~ 2028)
* GitHub: [`Max042004`](https://github.com/Max042004)
* HackMD: [`Max042004`](https://hackmd.io/@Max042004)

# 2025 Linux 核心設計/實作 春季班 自我評量

## 成果發表和貢獻
修改錯字 [並行程式設計: Ring buffer](https://hackmd.io/@sysprog/concurrency/%2F%40sysprog%2Fconcurrency-ringbuffer) 當讀取端想要取出換緩衝區的資料時 -> 當讀取端想要取出緩衝區的資料時

評分: 2 分

## 作業/隨堂測驗
* [Homework1 (lab0-c)](https://hackmd.io/@Max042004/linux2025-homework1)
  * commit message 遵循規範,確保說明修改的 what, why, how
  * 閱讀論文〈Dude, is my code constant time?〉後,利用 dudect 工具以統計方法分析程式碼執行是否為常數時間,以防止時序攻擊
  * 以 Valgrind massif 工具追蹤佇列操作函式的記憶體開銷

* [Homework2 (quiz1, 2)](https://hackmd.io/@Max042004/linux2025-homework2)
  * 以間接指標實作合併兩個已排序鏈結串列的函式

* [Homework3 (kxo)](https://hackmd.io/@Max042004/linux2025-homework3)
  * 理解 Linux 模組中核心空間到使用者空間的 `kfifo_to_user()` 的通訊機制

* [Homework5 (assessment)](https://hackmd.io/@Max042004/linux2025-homework5)
  * 紀錄有關 `task_struct` pid 機制的問題
  * 紀錄〈因為自動飲料機而延畢的那一年〉的閱讀心得,看到自己學習過程逃避困難的盲點

評分: 5 分

## 期末專題
[回顧課程裡並行程式設計相關測驗題](https://hackmd.io/@sysprog/SJOWVVXZgl)
在期末專題我探討 Linux 核心空間的簡易事件驅動伺服器運作原理,學習 socket 的程式設計,提出用 release/acquire 記憶體屏障避免 SPSC ring buffer 生產者可能覆蓋資料的問題。

我觀摩了:
[Linux 核心專題: 位元運算](https://hackmd.io/@sysprog/SyZPV1SNxe)


評分: 5 分

## 與授課教師的互動
我這學期與老師進行三次一對一討論、兩次課堂問答。
一對一討論:

* 5/15
  * 誠實面對自己,重新專注回課程最基礎的部分如浮點數運算、atomic 操作

* 6/14
  * [回顧上一次討論的問題](https://hackmd.io/@Max042004/HJ70RUmWlx)

* 6/24
  * 討論進行期末專題過程碰到的問題,VFS 檔案系統

課堂問答:

* 5/27
   * 討論 Linux 中 Thread 跟 Process 的差別。後續追蹤從 Linux 原始程式碼分析兩者運作的差別
   * 討論 Linux 中 Thread 跟 Process 的差別。後續追蹤從 Linux 原始程式碼及 Clone 系統呼叫的實作分析兩者運作的差別

* 6/19
   * 討論期末專題的核心伺服器的運作

我在學期初很害怕與老師互動,直到第一次一對一討論之後,我才知道跟老師互動是修這門課最重要的事情。老師一開始問我有什麼問題要討論,我當時腦海裡完全想不出任何問題,嘴巴卻不誠實地說出「很多」,後來老師接著問我讀了什麼教材,我自信的說浮點數,但當老師問我為什麼 Linux 核心不能使用浮點數、何時會發生 FPE 時,我卻完全答不出來。這時我才知道原來我根本沒掌握課程教材,導致問不出任何有意義的問題。
在互動之後,我便放下之前一直倉促寫作業、不仔細閱讀教材的習慣。回到課程一開始的內容,先把浮點數、〈Concurrency Primer〉、並行程式設計一一的好好理解。
在好好回到,

評分: 8 分

## 所見所聞所感
這堂課的老師與同學帶給我極大的震撼,讓我重新審視了價值觀、資訊產業的觀點,以及學習的方法。

首先是價值觀。我在這堂課學會了真正重視細節的意義。重視細節不等於鑽牛角尖,而是對待事物不馬虎的態度。例如作業紀錄的格式要求嚴謹,英文與漢字之間必須空半格,這看似瑣碎,但事實上只要拿一篇格式混亂的文章對比,就能清楚看到差距;任何一篇品質優良的文章,本就具備這樣的細節規範。此外,commit message 的格式、程式碼的 coding style 和遣詞用字也同樣重要。寫程式並非僅寫給自己看,更要考量未來的自己、協作的同事以及來自網路上的陌生讀者。舉例來說,若在討論中把 CPU 核講成「核心」,就容易讓人誤會是指作業系統核心,造成溝通上的困擾。這讓我深刻意識到,重視細節才能真正做好溝通。

其次是誠實的重要性。誠實不只是工作要求,更是一種面對問題與學習的基本態度。學習 Linux 必須誠實面對自己的不足,逐一補足短板。不誠實不但會導致溝通效率低下,也剝奪了從錯誤中學習的機會。短期內不誠實可能帶來一時的心理安慰,長遠來看卻只會損害自己。

再來是與老師一對一的討論帶給我的收穫。在三次的討論中,我不僅學到無法從網路搜尋到的專業知識,更掌握了有效的學習方向。Linux 的領域浩瀚無邊,沒有老師的引導,很容易陷入鑽牛角尖的困境。此外,老師的溝通方式也讓我學會不再掩飾自己的無知。最近在工作場合被問到有沒有去過學校行政大樓的秘書室,我也能誠實說出「沒有」,過去的我大概會為了微不足道的面子含糊其詞。

關於資訊產業的觀察,老師透過豐富的分享,讓我們認識到 Linux 和系統軟體的核心重要性,以及開源軟體的內涵。例如火箭控制系統對程式執行順序要求的嚴格性、烏俄戰爭蜘蛛網行動使用開源控制系統的無人機、伊拉克戰爭飛彈計算浮點數誤差的案例,都顯示出系統軟體在現代科技的重要性。此外,超級計算機領域被 Linux 壟斷、資料中心選擇 Linux 而非 Windows 等現象,凸顯 Linux 的不可取代性。老師還介紹電腦歷史發展,像是 CTSS 排程系統的起源與 Multics 系統的興衰,引發了我對電腦發展歷史更深入的興趣。此外,老師也介紹開源軟體在商業戰略中的角色,Docker 與 Kubernetes 的競爭、A2A 交由 Linux Foundation 管理的背景,幫助我理解開源作為商業戰略的背後考量,讓我理解到開源軟體不僅包含了商業博弈,也涵蓋了樸素的務實者如 Linus Torvalds 和理想主義者如 Richard Stallman 等不同理念的結合。

學習方法方面,老師點出我有逃避數學的習慣,並建議我應該回歸基本,將概念轉化為簡單的數學式來表達。此外,老師強調課堂互動與問答的重要性,我一開始認為課堂互動與問答是在浪費時間,然而經歷了數次問答後,我逐漸體會到這種互動訓練了溝通表達能力、鼓勵誠實面對自身認知不足,並激發思考與臨場反應能力,這些都是非課堂問答無法獲得的寶貴技能。透過兩次的問答與三次一對一討論的訓練,我逐漸能夠坦然承認自己的不足,並且在課堂互動中積極表達自己的想法或誠實地說出「不知道」。閱讀教材的部分,老師也強調教材必須來自開發者的第一手資料,要徹底理解每個細節,不可囫圇吞棗,使我養成仔細閱讀教材的習慣。

課程堅持每位同學公開開發紀錄及透過共筆互評的機制,雖然初期感到負擔,但後來發現透過這種方式能快速發現自己盲點並從他人經驗中學習成長,也能讓老師主動掌握自己的學習狀況,老師能更有效地提供幫助。

最後,我想談一些個人觀察。我曾認為大學資源稀少,需要積極爭取甚至靠人脈獲得,就如台大李宏毅教授的 AI 課程,每年加簽時人滿為患,競爭激烈。然而在這門課,我看到的是完全不同的景象:老師慷慨地提供豐富的知識,不計較報酬且開放所有加簽學生自由加入,反而學生人數隨課程進行卻大幅減少。

最後整學期的課程,讓我印象最深刻的事情,是老師在美國參加研討會期間,在午夜時分仍克服十四小時的時差堅持不間斷教學的精神,深深觸動了我。老師透過 Google meet 上課充滿動力的樣子,讓我記住真正的熱情與奉獻是什麼模樣。

評分: 9 分

## 自我評量 (1 ~ 10)
* $\text{GEOMEAN} = (2 \times 5 \times 5 \times 8 \times 9) ^ {1/5} \approx 5.1$
* 方案 B : $1 + \text{floor}(\text{GEOMEAN}) = 6$