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

User/Nahemah1022

自我介紹

成功大學 資訊工程系111級(2018-)

聯絡資訊

  • Email: a122774007@gmail.com
  • GitHub: Nahemah1022

2021春季班 個人評量

作業及筆記

期末專題

主題: simplefs 檔案系統

開發紀錄: Hackmd

問題選答 (回顧內容)

  1. 知道 x - y < 0 敘述為何不能寫為 x < y 嗎? (CS:APP 第 2 章)

    • 因為相減後可能會造成整數 overflow,而導致前後結果不相同。
  2. 知道 Linux 核心 < include/linux/list.h> 裡頭 #define list_for_each_prev(pos, head) for (pos = (head)->prev; pos != (head); pos = pos->prev) 這樣的巨集到底在做什麼?以及 head 使用時需要加小括號,為何?

    • 在 linux 中的 linked list 是雙向鏈結的,list_for_each_prev 巨集用來 iterate 過整個 linked list 後回到 head 即停止,其中可以定義在 iterate 的每一階段要做什麼操作

    • 因為無法保證傳入巨集中的 head 是一個 unary expression 的變數,為了確保其結果會優先被運算出來,需要加上括號

修課心得

在修課以前,由於我的程式經驗大多是在開發應用程式,鮮少接觸如系統軟體這樣底層的程式開發,本來在選課時我也只是抱著探索、增廣見聞的心態來修這門課程的,因此在學期初我遇到最大的困難其實不是在作業本身,而是從應用程式開發跳到系統軟體這中間的落差感,C語言的開發沒有辦法像應用程式那樣能夠即時獲得視覺上的回饋感,這點讓我相當不適應。但在修課的過程中我也逐漸體會到,就像老師上課時說過的,每天的工作內容就只是在重複著CRUD的工程師,也只能夠算是軟體的使用者而已,是很容易被取代的,必須要投入底層的開發、才有真正有辦法做到改進、做出貢獻。

在寫隨堂測驗、作業、以及期末專題時我也發現到了,許多在開發高階的應用程式時不太需要理解的細節如數值系統、記憶體管理、甚至更基本的演算法、資料結構都會派上用場,在 linux 系統軟體之下,過往的不足與漏洞全都被翻了出來,這些都反映出了自己還有很大的努力空間,也對於自己以往走馬看花式的學習態度是一次深刻的警惕。

整體而言,由於修課時投入時間並不足夠,中間也有大半部份都拿去補過往的知識漏洞了,導致我在系統軟體的實力上進步的並不精彩,但至少在心態得到了一次很大的醒悟,往後才能夠正視自己的不足並盡力補上,也看到了厲害的同學們達到了什麼樣的高度,作為學習的榜樣,待暑期課程時能夠更加努力跟上進度。

自我評量: 7分 (1 ~ 10)

  • 學期初: 在學期初時我自認投入了相當多的時間,每次課程的作業、隨堂測驗都有花許多時間去理解,也進步了不少,我認為可以給自己7.5分。
  • 學期中: 由於當時有其他課程以外的外務需要兼顧(如期中考),加上當時認為花相同的時間下,這些作業能帶給我的回饋感較低,導致當時有點失去興趣因此投入程度驟減,只剩下每次的小考會固定參與而已,此階段我認為只能給自己4分。
  • 學期末: 在跟老師約了一對一討論後正式投入期末專題 simplefs 的專案開發,基本上持續一週以來每天的所有時間都花在這上面了,也開始體會到開發系統軟體的樂趣所在不在於應用程式那樣的視覺回饋,而是投入、鑽研的過程本身,更能實質感受到自身的進步,我認為此階段可以給自己9分。

因此整學期的課程中,滿分10分的話我認為能給自己7分,很感謝老師能夠在成大開這麼棒的課程,讓我認識到自己的不足,也看見了不同的高度,期待自己在暑期課程中能夠有比這學期更顯著的進步。