yy214123 (陳柏儒)
簡介
2024 Linux 核心實作 春季班 自我評量
1.成果發表和貢獻:
當我進行作業二時,我在第 3 週對應的測驗教材頁面的第一題發現了一個數學公式的錯誤。在本課程第二次實體 code review 結束後,我向授課老師反映了這個問題。老師回應說這是故意寫錯的,目的是測試我們是否能注意到這些細節。這次經歷顯示了我在閱讀過程中對細節有仔細觀察。
至於書本部分,目前我尚未有任何貢獻。然而,在 Linux 核心程式碼方面,可以參考 4.與授課老師的互動 中的 Linux 核心程式碼詢問。我原本有意提交貢獻,但基於組合語言序列的實驗結果,發現還需要更多的理論輔佐。在這個過程中,我意識到自己的理論知識仍需加強,因此我決定進一步深入研究相關理論,確保未來能夠提供高質量的貢獻。
這個項目我給自己的評分為 4 分。
2.作業/隨堂測驗:
作業
這是除了期末專題外,我花費最多心力的作業,我認為自己在這個作業中有顯著的進步,列舉如下:
對 C 語言的掌握度提升:在大一上學期我擔任大學部資料結構課程的助教,作業部分是以 C 語言實作,但當時我完全不會 C 語言,只能協助書寫題目部分。為了完成此作業,我透過授課老師的「你所不知道的 C 語言系列講座」和李根逸博士的 C 語言入門,重新學習 C 語言,我認為在這一學期中有了顯著成長。
學會操作 Linux:從小到大我都只用 Windows 作業系統,上大學時甚至覺得 Linux 很難用,直接退選相關課程。但透過這門課,我逐漸發現 Linux 的許多優點,例如環境架設的便利性遠超過 Windows,也不會有擾人的自動更新。雖然一開始不習慣,但現在發現只要給我鍵盤,我就能完成許多事情。
學會 Git 相關操作:以前都用雲端或隨身碟保存程式碼,雲端容量逐年減少,設備也可能遺失或損壞。學習 Git 後,我體會到這個工具的強大,只要認真撰寫 commit message,後續追蹤程式碼功能變更也變得相對容易。
這次作業 review 是很不錯的體驗,收穫了許多其他修課學員的建議。針對各項建議,我都有進行對應的調整,每次調整後都有獨立的 commit,我覺得這個作業做得很好。列舉如下:
在實作尋找中間節點的過程中,有一個經驗讓我特別印象深刻。起初,我使用快慢指標策略進行實作,其中快指標需要走 \(n\) 次,而慢指標只需走 \(n/2\) 次。在進行同學互評時,有人提到,其實可以使用兩個指標分別從頭尾走向對方,這樣可以將總走訪次數降至 \(n/2\) 次。這次經驗讓我深刻體會到,多換幾種角度思考問題的重要性,因為不同的資料結構可能會帶來不同的解決方案。
在實作
q_insert_head
和q_insert_tail
的過程中,我原本的實作中包含多行重複的程式碼。在經過同學的建議後,我才發現這兩個方法其實可以互相配合,只需在呼叫另一個函式時改變所傳入的佇列節點。受到這個建議的啟發,我也同步修改了q_remove_tail
的實作方式,使其可以重用q_remove_head
的程式碼。這個過程顯示了我能夠舉一反三,從而提高程式碼的重用性和維護性。
2024q1 Homework6 (integration)
測驗
我每週都有參與測驗,但有幾次我得到了 0 分。起初這讓我感到相當挫折,但也使我意識到自己的還有許多努力空間。慶幸的是,這些錯誤是在修課階段發生的,而不是在未來的面試中。如果在面試中還是得 0 分,那才會是致命的打擊。
在作業/隨堂測驗這個項目,我給自己的評分為 9 分
3.期末專題
整體而言,我覺得作業的完成度平平,還有很大的努力空間。比較遺憾的是沒有完全理解 CMWQ。然而,在期末專題中,我向老師發信詢問的部分讓我有較大的收穫和成長,這是我實際去實作測試的部分。其餘的部分主要是瀏覽教材,但這也讓我體會到,好奇心不會害死貓,反而讓我獲得了許多意想不到的收穫!
在這個項目,我給自己的評分為 8 分
4.與授課老師的互動
第一次一對一討論
時間:2024/05/08 PM9:30
在這次討論中,授課老師現場出了一道有關 ldexp 的題目,當時我完全無法解答。這讓我意識到自己對位元操作的掌握並不像想像中那麼全面。隨後,老師詢問我對哪些議題有興趣,我經過思考後請老師指派。討論結束後,我重新閱讀了《深入理解計算機系統》(CSAPP)第二章,運用書中關於浮點數的知識,解決了我原先無法回答的問題。這次經驗顯示了我在面對挑戰時,能夠積極尋求學習資源,不斷提升自己的技能。
第二次一對一討論
時間:2024/05/22 PM4:30
完成第一次面談的題目後,我再次聯繫授課老師進行面談。這次面談中,先是討論當前實作在非正規化數、無窮上有缺陷,老師提供了更好的解決方法(使用 union),以及針對我原先的實作方式,並且提到我進步許多。老師還幫助我解釋了期末專題進行過程中遇到的問題。
Linux 核心程式碼詢問(透過電子郵件)
時間:2024/06/26 PM10:23
這個環節源於我的好奇心。在進行期末專題時,我需要研讀 Linux 核心程式碼中的 div4,並發現其中某部分程式碼似乎有改進空間。我發信給老師討論此事,雖然事後想想,老師可能早已知道我的改進建議並沒有實質改善,但他在第一時間並未否決我的疑問,而是給予一些分析建議。我隨即展開實驗,結果雖與預期大不相同,但我很享受這個學習過程。如果當初老師直接告訴我不可能,我可能就沒有動力去研究相關議題。
紀錄一下老師給的毒雞湯: 「幻滅是成長的開始。希望你體會到何以我一直強調「細節」的重要。」
第二次面談後,在 2024/06/19 ~ 2024/06/24 我發了十次訊息到粉絲專頁想要再次預約面談,但沒有收到老師的回覆,在互動這個項目我覺得我有盡全力投入了,
我給自己的評分為 10 分。
5.所見所聞所感,務必提及閱讀〈因為自動飲料機而延畢的那一年〉和回顧自身在本課程的投入狀況
是個很振奮人心的故事,讓人深思。 如果你只會寫程式,而且對原子筆一竅不通,那會發生什麼悲劇就可想而知了。
- 對這段話頗有感觸,也反映了為什麼這門課程特別強調閱讀原始教材的重要性,一直以來我都在舉燭,只會在心中腦補程式碼,還沒著手進行 lab0-c 前,在如今這個生成式AI迅速發展的時代,我常常僅是打開 ChatGPT,描述我的目標,然後是一連串的「ctrl + c >> ctrl + v >> run」。當遇到 bug 時,我再次「ctrl + c >> ctrl + v」尋求 ChatGPT 的幫助來解決問題。剛開始寫 lab0-c 時,我也嘗試過這樣幹,然而,我發現從 ChatGPT 得到的回答往往不切實際。也對應到老師在 Google meeting 上提到的,如果只是一昧的使用這些工具,那並無法與他人拉開差距,其他科系的同學甚至比你還會問 ChatGPT 問題。
If I had eight hours to chop down a tree, I’d spend six hours sharpening my axe." – Abraham Lincoln
- 我意識到基本功的重要性,綜觀這學期下來,我雖然沒辦法按時將每項作業完成,也未能在每週四課程開始前將教材確實看完,更不用說時常需要重複閱讀教材和相關的影片。但我發現,每當我重新閱讀教材時,總能獲得新的理解。那些在第一次閱讀時感到模糊不清的知識點,隨著閱讀次數的增加,逐漸浮現出新的見解和突破。
事情如果太順利代表絕對有問題,而問題永遠會從意想不到的地方冒出來。
- 就像我在期末專題碰到的問題,天真的我自以為找到了好辦法,果然問題真的從我沒預料的地方冒出來!以前會覺得理論、實作是分開的兩個議題,但隨著課程進行我發現兩者其實相輔相成,甚至還會有設備不同造就結果不同的情況發生。
回顧我在本課程的投入狀況,我覺得我很努力了,儘管作業、測驗、期末專題都有瑕疵,但這絕對是我來成大後最用心投入的一門課,跟學期初的我相比,我很滿意自己的成長,
在這個項目,我給自己的評分為 10 分。
6.每月發給實驗室指導教授的學習回顧
二月份學習回顧
- 寄信日期:2024/03/05 PM5:08
- 信件內容簡述:與上方作業一的描述雷同,主要與指導教授分享我不足之處,並分享作業進度。
三月份學習回顧
- 寄信日期:2024/04/07 AM1:29
- 信件內容簡述:主要與指導教授分享本課程所使用的共筆工具 HackMD,並且將此工具用於實驗室內部文件的撰寫。
四月份學習回顧
- 寄信日期:2024/05/11 PM4:16
- 信件內容簡述:主要與指導教授分享期末專題題目。
五月份學習回顧
- 寄信日期:2024/06/23 PM2:27
- 信件內容簡述:主要與指導教授分享期末專題進行狀況。
我每個月都有發回顧信,且在信件只要討論到課程相關主題,我都有附上對應的鍊結供指導教授參閱,也沒有任何隱瞞。
在這個項目,我給自己評分為 10 分。
7.使用GEOMEAN 來計算上述 (1) 到 (6) 各項的幾何平均
- 採用方案 B: 1 + floor(GEOMEAN)
計算後的分數為:9 分