版本 17400590eec1f634edba77a4c315bee510bdf53f
NeedToDebugMyLife(劉孟璋)
2025 Linux 核心設計 春季班 自我評量
簡介
- 國立成功大學 電機工程所 (2024~2026)
- GitHub:
NeedToDebugMyLife
1. 成果發表和貢獻
我在這堂課並沒有實質提出 commit 到 Linux 核心,也沒有修改筆記,期末專題的完成度也不足,但我撰寫的筆記仍然可以給之後修這堂課的同學一點幫助。
評分: 5
2. 作業/隨堂測驗
- lab0-c: HackMD
- 2025q1 Homework2 (quiz1+2): HackMD
- 2025q1 Homework3 (kxo): HackMD
- 2025q1 Homework4 (quiz3+4): HackMD
- 2025q1 Homework5 (assessment): HackMD
第一次作業是我完成度最高的作業,那時的我還沒這麼忙,所以花了不少時間來研究相關的文章。 透過這次的作業,我重新學習了 pointer 的操作,以及 struct 的應用, 雖然還有一部分內容還沒有完成,但我的 coding 能力仍然有很大的進步。
之後的作業,因為忙於實驗室事務,所以沒有花太多時間在這之上,因此給自己扣了2分
評分: 8
3. 期末專題
- 回顧測驗題和運用來解決真實世界的問題: HackMD
評分: 5
4. 與授課教師「一對一討論」的時間
- 2025q1 Homework5 (assessment): HackMD
受到一位學長在 srv32 上運行毀滅戰士的啟發,我也想做一個類似的
project。
老師在一對一討論的過程中提問:「要如何取一個浮點數的平方根?」我回答不出來。
我連基本的浮點數運算都不會,卻總想著做一個很厲害的專案,這簡直是癡人說夢。
老師給的建議是:
這個期末專題的關鍵是:「你能產出什麼,在過程中學到了什麼,而不是題目是否很厲害。我們要追求的,是解決問題的本事。」
「誠實面對自己」是這次一對一討論的最大收穫。
評分: 9
5. 修課心得
硬體的世界和軟體完全不一樣,一個程式設計師遇到問題時,電腦會告訴你哪裡出錯,接著查資料把程式碼改正,重新執行一次就好,發現問題到修正的速度非常快。你遇到的問題很可能世界上某個人已經遇到過,只要把錯誤訊息拿去搜尋,往往就能找到想要的答案。
你該學習的不是看到事情要完蛋了就去避免失敗,而是應該學習如何處理與承受失敗,你才能變得比以前更強大。
在寫程式的過程中,錯誤是一種再自然不過的事情,原本能正常運行的程式,多加了一小段程式,就可能連帶其他功能一起掛掉。要修正這種程式的錯誤也很簡單,stackoverflow搜個一圈往往就能找到解法,但在現實世界卻不是這樣,一個小小的錯誤,就有可能引發一連串不可收拾的錯誤。
還記得一次的 Kernel 模組開發過程,我動不動就把自己的 kernel 炸掉,雖然炸掉的部分僅發生在我的電腦,但這樣的經歷仍然給我帶來了不少的焦慮。「如果我連寫一個簡單的程式都可以把電腦炸了,我要怎麼貢獻程式碼到 Linux kernel?那可是有好幾百萬人在用的東西啊。」這樣的念頭一度讓我懷疑自己。但經過了一段時間的研究和 debug,我找出讓我程式掛掉的地方,竟然只是一個位移運算所導致的 overflow,原來這一切錯誤的根源就只是這個我在大一計算機概論就學過的小問題。我修改了這個錯誤,程式也正常運作了。
這次經歷讓我意識到,我一直對錯誤有一種本能上的恐懼。這其實是我一直以來的問題,我會對錯誤產生焦慮,會下意識逃避那些可能導致失敗的問題,但殊不知這些錯誤是我有能力解決的。雖然這也只是一個發生在軟體世界的問題,但它帶給我的啟發是真實且深刻的——學會面對錯誤,學會承擔自己寫下的程式碼所帶來的後果。或許在日後的開發,我還是會遇到一樣的問題,但我相信我不會再逃避,而是學會帶著錯誤,繼續往前走。
評分: 10
自我評量(1 ~ 10)
GEOMEAN: \[ \sqrt[5]{(5^2*8^2*5^2*9^2*10^2)} = 7.096668208 \] \[ 1 + floor(7.096668208) = 8 \]
