Try   HackMD

2024q1 Homework5 (assessment)

contributed by < williamS >
我是 Linux 核心設計/實作的旁聽學生,這是我繳交的第一份作業。我並沒有積極參與課程,也幾乎沒有閱讀課程教材。然而,課程內容討論中總會被老師對學習的熱愛所感動,僅以這份 HackMD 回饋上課至今的感想。

學習本課程至今的感想

  • 這門課程讓我反思過往學習的方式,老師傳授的內容中其實就是在培養學員在資訊科技產業中成為一個稱職的工程師。以下是我認知到的老師在課程中想傳達理念。

工程師須具備的能力

  • 充分的表達,清楚的產出,良好的溝通,還要有風險管理,與他人協作的能力。
    • 工程師不要孤芳自賞,真實世界的工程是大量的集體創作,工程師協作勢必需要清楚表達。
    • 工程師會對於相關議題進行 trade off 分析再做決定, 而不是憑感覺。
      • 然而,進行一個周延完整的驗證並不簡單,但這是必經之路,也是以理服人的根據。
      • 再者,在這個時代中,憑感覺進行設計還有辦法勝過 Chat-GPT 所提供的答案嗎?
    • 工程師會持續不斷的學習,遇到不會的就開始學,且需要有對於事物的洞察力。
  • 使用 Maslow's pyramid of code review 帶到工程師對自我的要求。與資訊科技產業專案設計第 5 週課程 Oct. 3, 2023 提到的 Engineering levels simplified 有關。
    • 猜測老師希望學員不要只做 Junior Engineer / Mid-level Engineer在做的事情。

      是因為希望台灣的軟體產業轉型,不希望學員只當代工的 Software Engineers嗎?

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
工程師的樂趣 Hacker's Delight 原來是簡單的快樂

  • 身為一個資訊人,要有能力使用 C 語言完成任何自己想要完成的事情。
    • 這是在說自由嗎?我也夢想過有這樣的自由。
    • jserv 有時會設計一些遊戲給女兒玩。Cool! 想起一些電影中電腦遊戲設計師的橋段。
  • 課程討論區討論問題 - 有關除法器設計
    • 我在寫 Leetcode 題目也曾遇到類似的問題要求。那時的我只知道把程式寫出來,不明白題目背後設計的動機。
    • 在課程討論區看見討論時才發覺其實背後原因很單純,有些硬體架構沒有除法器的時候,身為一個工程師該怎麼實作出有效率的解法呢?謝謝老師的解說,這個答案很簡單卻價值連城。 Hacker 就是在重重限制內找到出路,探索過程就是在追求自由,而擁有自由其實是一種簡單的快樂,且是所有人都可以追求的,只要你願意付出的話。
  • 佳句偶得
    • 平靜的海造就不出偉大的水手。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
成為一個稱職工程師的準備

  • 誠實面對自己,歡迎選修 Linux 核心設計/實作
  • 課程介紹
    • 為何值得學 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 的使用時機與方式需要瞭解。(我目前還不瞭解)

「紙上得來終覺淺,絕知此事要躬行」的意涵

I had to create an equivalent for what I felt about what I was looking at - not copy it."
Georgia O'Keeffe

  • 若當個 Junior Engineer / Mid-level Engineer ,也許我們擁有 copy 的能力即可勝任,但這門課程的目標不僅止於此。
    • 再者,每個人對每件事情的認知都有著些微的差異,而同個人在不同時間看待同一事件的觀點通常也會有差異,這使得即便是模仿,結果也可能有所不同。也是因為這樣些微的差異造就了不同的產出。另外,藝術家則進一步追求原創,因為原創產出往往伴隨著對目標的重新認識,過程雖辛苦但意義不同,產出的收穫也不同。因此,要把握每個模仿或原創的練習機會。
  • 尤其這是一個 University ,而非 School 。大學是開創新知識的地方,把 University 當成 School 在讀的話,稍嫌可惜。
    • 然而,我也必須承認有些 School 所傳授的知識我也沒有學懂學通,需要重新學習。
      • 我需要至少先具備當代工工程師的能力。
    • 擁有實作的能力同時也培養看待問題的新視野,這才讓到大學讀書這個人生旅程更有意義。
  • 成大在台灣有其得天獨厚的發展條件,位在頂大的 boundary ,老學校,綜合型大學,南部學校。入寶山,不要空手而回。
    • 意指在誤差範圍內,這邊的學生或天資聰穎,或家境優渥,或上進好學,白話文就是可塑性高。又有眾多的校友以及國家的資源挹注,是很不錯的學習環境。
    • 我認同這門課程的開設,若成大學生都不肯學習這些知識的話,那台灣其他學校的學生接觸系統軟體領域的人數可能會越少。至於課程難度與進度的話,可多方溝通與彈性調整。

因為自動飲料機而延畢的那一年 閱讀心得

  • EP1
    • 沒有人供給,就沒有需求方願意上來,沒有需求,就沒有供給方願意提供服務,平台必須要兩邊燒錢,燒到兩邊的人數大到能夠養活公司,才有可能做起來。

      教育現場也是如此嗎?五味雜陳。

  • EP2