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

版本 e1c95fd22a4b3db4f68241937d1ac3e5e3f80957

User/Andrushika

Changes from beginning to e1c95fd22a4b3db4f68241937d1ac3e5e3f80957

# 2025 Linux 核心設計 春季班 自我評量
## 簡介
* 國立成功大學 資訊工程系 115 級
* Github: [Andrushika](https://github.com/Andrushika)
* HackMD: [andrewchang](https://hackmd.io/@andrewchang)
## 成果發表與貢獻
貢獻:
* barco: [`docs: Fix small typo in user_namespace_prepare_mappings() comment #8`](https://github.com/lucavallin/barco/pull/8)
* lab0-c: Reviewed PR [`Improve dudect test with cropped time analysis #283`](https://github.com/sysprog21/lab0-c/pull/283)
* kxo
    * [`Fix incorrect file name in README.md #3`](https://github.com/sysprog21/kxo/pull/3)
    * 作業說明 kxo(A) - 加上數學式遺漏的右括號
    * 作業說明連結失效時,提醒老師修改文件權限
* khttpd: 修正作業說明拼字 khpptd -> khttpd

我給自己 `7` 分。
每當發現缺漏時,我總是相當興奮,因為這代表新的機會;一想到自己的名字會出現在大家都在使用的文件或程式專案的貢獻列表中,就覺得很有成就感。尤其是發 patch 到 barco 的經驗,也是我人生第一次對超過 1000 個 stars 的專案貢獻。但回顧這學期的貢獻經歷,幾乎都是修改錯字之類的小貢獻,這是我覺得自己不足的地方。

## 作業 / 隨堂測驗
* [2025q1 Homework1 (lab0)](https://hackmd.io/@andrewchang/linux2025-homework1#2025q1-Homework1-lab0)
    * 確實 Reviewed 五位同學的程式碼並給出建議: `yy214123`, `chensheep`, `Eric-0522`, `zinsei`, `dainel40911`
* [2025q1 Homework1 (ideas)](https://hackmd.io/knzS9BozTl-dnWA5cRnoTA)
* [2025q1 Homework2 (quiz1+2)](https://hackmd.io/@andrewchang/linux2025-homework2)
* [2025q1 Homework3 (kxo)](https://hackmd.io/@andrewchang/linux2025-homework3)
* [2025q1 Homework4 (quiz3+4)](https://hackmd.io/@andrewchang/linux2025-homework4)
* [2025q1 Homework5 (assessment)](https://hackmd.io/@andrewchang/linux2025-homework5)
* [2025q1 homework6](https://hackmd.io/@andrewchang/S1NTI7Gbxg)

前一兩週的作業,我總是很急著想要看見成果、急著把每一件作業要求裡的要求完成並交差了事,因為我很討厭「事情沒做完,又有更多事情出現」的感覺。而這般速戰速決的結果是,我學到的東西很淺薄,做完一份作業後也說不出來有什麼領悟。

後來去讀了 `yy214123` 同學的 lab0-c 筆記,發現他對細節格外著墨:例如佇列操作的函式,除了實作程式碼以外,還會透過實驗去分析多種實作方法的效能優劣差異。看到他的作業,我覺得落差感很大,而且有種醍醐灌頂的感覺:這才是正確的學習方式吧!
所以在後面幾次的作業中,我開始放慢腳步,把教材、作業的內容讀懂。印象最深的是 Homework 2 的 Week 2 Q2,我面對了一直以來對數學的恐懼,將整數開根號實作的數學推導讀懂,並記錄在該次作業的 HackMD 上。雖然花的時間超級長,但我好好的面對了。

另外,我覺得課堂出的測驗題都很生動,因為都是從實際應用的專案中擷取下來,且據說都是在企業面試會出現的程式碼,一次就是數百行。印象最深的是 Homework 4 的 week 4 Q2,是一個用核心模組播放音樂的專案,我也藉此了解到濾波器、ADSR、取樣等實作中出現的知識。

雖然我認為自己在寫作業的過程中收穫豐富,但以結果論來說,我還是沒有達成所有老師所給出的作業要求(尤其針對 hw3 kxo 和 hw6 ktcp 兩項作業)所以我給自己 `7` 分。

## 期末專題

* [開發紀錄](https://hackmd.io/elX0ZH57S6CQIEdmsfGPBQ)
* [Github](https://github.com/Andrushika/light-container)
* [解說錄影](https://youtu.be/OSU4qUK90v4?si=6iFZll5D4Rx6u7qP)

專題的題目為「輕量級容器實作」。一開始和老師討論定題時,被問了很多問題,但我都回答不出來。我因此察覺到自己學習方式一定出了問題,老師也建議我不要急著貢獻,專注細節、搞懂機制才是最重要的。
我一直將這句話惦記在心中;印象深刻的是,我當時正在研究 user namespace 的 pid/uid map 的權限問題,因為我想盡快解決問題,後來問 AI 無果;直到靜下心來把 user namespace 的 man page 仔細看過一遍後,才發現文件中早已精準註明使用的限制。此次事件後降低了我對 AI 及第二手文件(CSDN)的依賴程度。

真的從最基本的系統呼叫開始,自幹出容器的最小可行產品後,我也將 capabilities, namespace, seccomp, cgroups 等機制深深刻印在腦中了。但最終專案在 cgroups 設定上仍存在一些權限問題,我給自己 `9` 分。

# 與授課教師的互動
課堂問答:
* 2025/04/22 [問答追蹤](https://hackmd.io/i6ZSoExATqOQMf1EvtNFoA#Andrushika-lumynou5)
* 2025/05/06 [問答追蹤](https://hackmd.io/8rwu2EOaQwW7AzjJOFK-gw#Andrushika)
* 2025/05/13 [問答追蹤](https://hackmd.io/uiNwM35dQ6qeFQwfTypc_w#Andrushika)

一對一討論時間:2025/05/22

第一次的問答,老師問了我一些關於同步 / 非同步、快速排序、殭屍行程的問題,因為是在線上進行,所以沒有那麼緊張。而後面的兩次都是現場授課:老師問了 PELT、EWMA 及一些延伸問題,而我對內容本身不熟悉以外,加上老師直接站在座位旁那股 look in my eyes 的威壓,使我的腦袋中一片空白。
這讓我有些擔心又有些慶幸,擔心的是未來面試的自己是否也會是這副模樣,慶幸的是提早面對了現實,所以有充分的時間可以去改善。
可惜的是,在課程的 20 週裡,和老師一對一互動的時間比較少,再修一次的話,我會希望維持最少兩周討論一次的頻率。
而每次課堂結束的問答,我總是深入完成議題追蹤。我給自己 `8` 分。


## 所見所聞所感

* [因為自動飲料機延畢的那一年 - 心得](https://hackmd.io/@andrewchang/linux2025-homework5)

我覺得這門課對我而言最大的意義是,學會「放慢腳步」。
這學期我開始深深反思自己,而我發現自己是相當重視結果的人:我重視「考試考得好不好」大於「過程中學到了什麼」、我重視「羽球比賽贏了沒有」大過於「和隊友一同拼搏的快樂」、我重視「有沒有被人看見」大於「我真正懂什麼」。
所以我在短時間內發表成果的情境中(考試、報告等),都可以表現得不錯;但面對需要長期鑽研的議題,我好像缺乏一份靜下心來的韌性。面對需要短時間內看不到成果、嚐不到甜頭且需要高度自律的事情,我很容易放棄(學吉他、學語言等)

回顧前半個學期的我,會很急著想變得和厲害的同學、學長姐一樣,去貢獻、投入大型專案開發,去找有哪些缺失的地方可以改善;但後來發現這就是「還不會走路就想學跑步」的心態。老師要我先不要急,先掌握好細節、想懂課程教材的內容、搞懂機制才是最重要的。其實一開始我並沒有聽進去,這件事我到了做專題的過程中才有所領悟。

學期初聽到 `visitorckw` 學長的分享覺得很震撼,到底要怎麼在 Linux 如此大型的專案中,發現可改善之處?後來做專題的時候,發現只要靜下心來,把一個問題研究得夠深入,問題就會在思考的間隙間自己跑出來。(例如,當初研究 slirp4netns 時,在思考 rootless container 是否能在無法建立 veth 的狀況下處理 inbound connection?)

包含先前所提到的寫作業過程的心態轉變、「期末專題」章節中所述經驗等,讓我意識到太急著看見結果不是好事。縱使美麗的果實可能成為短時間內前進的動力,但也很容易因為看不見盡頭就將這份動力燃燒殆盡。對我而言,最好的心態就是放慢腳步。先把成果放一邊,才能夠專注眼下應該全心投入的議題、專注於細節。

另外,我覺得這門課很難能可貴的是「客製化」的程度很高,老師並不是用統一的衡量標準去衡量大家的付出;而且和見過社會殘酷的老師一對一討論後,也確實幫助我定位到自己的問題。這是在微積分、線性代數、演算法等課程裡面不可能發生的,因其衡量標準是齊頭式平等(考試)而非實質平等;大家願意多花時間寫考古題,也不願意正視自己不理解的地方、放慢腳步好好理解(其實包含我自己在內)。

經過這 20 週,這份「放慢腳步」的習慣已經慢慢養成了,也將會繼續影響我未來的學習方式。畢竟投入工程並不是要成為一隻急於展現自己的孔雀,而是要用專業改善生活。(還有要賺很多錢,可能這才是主要目的)

我給自己 `10` 分。

## 自我評量 (1 ~ 10)
* GEOMEAN = $\sqrt[5]{7*7*9*8*10} \approx 8.12$
* 方案 B : 1 + floor(GEOMEAN) = 1 + floor(8.12) = 9