# 2024q1 Homework5 (assessment) contributed by < `williamS` > 我是 [Linux 核心設計/實作](https://wiki.csie.ncku.edu.tw/linux/schedule)的旁聽學生,這是我繳交的第一份作業。我並沒有積極參與課程,也幾乎沒有閱讀課程教材。然而,課程內容討論中總會被老師對學習的熱愛所感動,僅以這份 HackMD 回饋上課至今的感想。 ## 學習本課程至今的感想 * 這門課程讓我反思過往學習的方式,老師傳授的內容中其實就是在==培養學員在資訊科技產業中成為一個稱職的工程師==。以下是我認知到的老師在課程中想傳達理念。 ### [:mega: 工程師須具備的能力](https://www.youtube.com/live/ljyo4Es_phM?si=8b30zH4SjP9j8VO5&t=7511) * 充分的表達,清楚的產出,良好的溝通,還要有風險管理,與他人協作的能力。 * 工程師不要孤芳自賞,真實世界的工程是大量的集體創作,工程師協作勢必需要清楚表達。 * 工程師會對於相關議題進行 trade off 分析再做決定, 而不是憑感覺。 * 然而,進行一個周延完整的驗證並不簡單,但這是必經之路,也是以理服人的根據。 * 再者,在這個時代中,憑感覺進行設計還有辦法勝過 Chat-GPT 所提供的答案嗎? * 工程師會持續不斷的學習,遇到不會的就開始學,且需要有對於事物的洞察力。 * 使用 Maslow's pyramid of code review 帶到工程師對自我的要求。與[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2023)第 5 週課程 `Oct. 3, 2023` 提到的 Engineering levels simplified 有關。 * 猜測老師希望學員不要只做 Junior Engineer / Mid-level Engineer在做的事情。 :::info 是因為希望台灣的軟體產業轉型,不希望學員只當代工的 Software Engineers嗎? ::: ### :mega: 工程師的樂趣 ==Hacker's Delight== 原來是簡單的快樂 * 身為一個資訊人,要有能力使用 C 語言完成任何自己想要完成的事情。 * 這是在說==自由==嗎?我也夢想過有這樣的自由。 * [jserv](https://wiki.csie.ncku.edu.tw/User/jserv) 有時會設計一些遊戲給女兒玩。Cool! 想起一些電影中電腦遊戲設計師的橋段。 * [課程討論區討論問題 - 有關除法器設計](https://www.facebook.com/groups/system.software2024/posts/1572555173522375/) * 我在寫 [Leetcode](https://leetcode.com/problems/) 題目也曾遇到類似的問題要求。那時的我只知道把程式寫出來,不明白題目背後設計的動機。 * 在課程討論區看見討論時才發覺其實背後原因很單純,有些硬體架構沒有除法器的時候,身為一個工程師該怎麼實作出有效率的解法呢?謝謝老師的解說,這個答案很簡單卻價值連城。 Hacker 就是在重重限制內找到出路,探索過程就是在追求自由,而擁有自由其實是一種簡單的快樂,且是所有人都可以追求的,只要你願意付出的話。 * 佳句偶得 * 平靜的海造就不出偉大的水手。 ### :mega: 成為一個稱職工程師的準備 * 誠實面對自己,歡迎選修 [Linux 核心設計/實作](https://wiki.csie.ncku.edu.tw/linux/schedule)。 * 課程介紹 * 為何值得學 Linux kernel ? * 因為 Linux kernel 基本上就是資訊科技產業的縮影,是一個不斷革自己的命的系統。 * 現在不學,以後還是會遇到。 * Linux kernel may be more than what you thought * 當中許多有趣的設計啟發自 user level 端的使用者需求,而單有寫程式的能力是不夠的,本課程也將介紹 Linux kernel 應用其他知識的一些面向,例如: EWMA。 * Linux kernel programming style 背後的考量。 * 例如: branchless,考量到 Real-time 追求 determinism,好像也與 security 有關。 * 例如: in-place algorithm,考量到不引發額外的儲存空間配置。 * 老師提到 Linux kernel 會那麼複雜的一個原因是為了維持不同 system architecture 之間的相容性。也有考慮到編繹器最佳化造成的影響,因此只懂 C 語言是不夠的。 * 想要把 Linux kernel 學好需要許多其他學門知識,光憑一個學期就想不在這座叢林中迷路已是相當有難度的學習目標。 * 工程師如何鑑賞自身的作品 * 效能評估 Performance Evaluation 有許多標準,例如:執行時間, Energy Consumption 等。課堂上先選用較容易進行的執行時間進行評估。 * 老師也使用課堂作業==對於 Tim Sort 的改進==,提及工程師不能忽略的技術細節 — 進行 Performance Evaluation 的方式。 * 老師點出了 test case 的 coverage 決定了 Evaluation 是否周延與公允。然而,怎麼產生涵蓋所有組合的 test case 有時是個難題。 * 也帶到範例程式測量執行時間的方式,不使用準備好的 C Language STL ,而是使用 Signal Handler 觸發 ALARM SIGNAL ,猜測老師是刻意提供這個方式的。 * 還未做交叉驗證,應該要觀察 C Language STL V.S. Signal Handler 量測結果差異。 * 若是量測方式不夠公允周延,如何說服開發團隊接受這個 commit 呢? * 至於對於自身作品進行量測前,也介紹了一些不可不知的好用工具來輔助 code refinement 以及觀察 Linux kernel behavior。 * gcc的某些 FLAG功能,strace / ftrace 的使用時機與方式需要瞭解。(我目前還不瞭解) ### 「紙上得來終覺淺,絕知此事要躬行」的意涵 :::info I had to create an equivalent for what I felt about what I was looking at - not copy it." — [Georgia O'Keeffe](https://en.wikipedia.org/wiki/Georgia_O%27Keeffe) ::: * 若當個 Junior Engineer / Mid-level Engineer ,也許我們擁有 copy 的能力即可勝任,但這門課程的目標不僅止於此。 * 再者,每個人對每件事情的認知都有著些微的差異,而同個人在不同時間看待同一事件的觀點通常也會有差異,這使得即便是模仿,結果也可能有所不同。也是因為這樣些微的差異造就了不同的產出。另外,藝術家則進一步追求原創,因為原創產出往往伴隨著對目標的重新認識,過程雖辛苦但意義不同,產出的收穫也不同。因此,要把握每個模仿或原創的練習機會。 * 尤其這是一個 University ,而非 School 。[大學是開創新知識的地方](https://ntualumnibm.ntu.edu.tw/index.php?action=bimonthly_page&monthbook_id=21&id=203),把 University 當成 School 在讀的話,稍嫌可惜。 * 然而,我也必須承認有些 School 所傳授的知識我也沒有學懂學通,需要重新學習。 * 我需要至少先具備當代工工程師的能力。 * 擁有實作的能力同時也培養看待問題的新視野,這才讓到大學讀書這個人生旅程更有意義。 * 成大在台灣有其得天獨厚的發展條件,位在頂大的 boundary ,老學校,綜合型大學,南部學校。入寶山,不要空手而回。 * 意指在誤差範圍內,這邊的學生或天資聰穎,或家境優渥,或上進好學,白話文就是可塑性高。又有眾多的校友以及國家的資源挹注,是很不錯的學習環境。 * 我認同這門課程的開設,若成大學生都不肯學習這些知識的話,那台灣其他學校的學生接觸系統軟體領域的人數可能會越少。至於課程難度與進度的話,可多方溝通與彈性調整。 ## ==[因為自動飲料機而延畢的那一年](https://blog.opasschang.com/the-story-of-auto-beverage-machine-1)== 閱讀心得 * [EP1](https://blog.opasschang.com/the-story-of-auto-beverage-machine-1) * 沒有人供給,就沒有需求方願意上來,沒有需求,就沒有供給方願意提供服務,平台必須要兩邊燒錢,燒到兩邊的人數大到能夠養活公司,才有可能做起來。 > 教育現場也是如此嗎?五味雜陳。 * [EP2](https://blog.opasschang.com/the-story-of-auto-beverage-machine-2)