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

User/POCHUN-CHEN

title: POCHUN-CHEN (陳柏鈞) categories: User …

簡介

  • 國立中正大學 機械工程學系 (2018 ~ 2022)

  • 國立成功大學 機械工程所 (2022 ~ )

  • GitHub: POCHUN-CHEN

  • HackMD: PoChunChen

2023 Linux 核心設計 春季班 自我評量

作業共筆

測驗共筆

期末專題

  • rhashtable 研究和應用: HackMD

  • 一對一討論

    • 2023/03/24 (五) 20:00 ~ 21:00
      1. git commit 避免濫用 Update
      2. 解讀計算機編碼要看熟
    • 2023/05/06 (六) 20:15 ~ 20:45
      1. 持續讀書,把不懂的東西好好弄懂,並且記錄。
    • 2023/06/18 (日) 16:00 ~ 16:50
      1. 2023-06-18 補考測驗
      2. 實際動手編譯,避免舉燭

貢獻

Linux Kernel課程共筆改錯字

所見所聞所感

修課前階段:

在剛來成大就讀研究所時,許多研究室學長就大力推薦宅老師的課,於是我與其他五位同研究室的同學就在上學期選了計算機結構。上了兩個禮拜,發現都沒學過,也聽不懂,再加上有其他四門課的情況下,我與其中四位選擇了先退選計結,只有一位過去有修過不少資工系的同學堅持且修完了計結。

時間很快就來到下學期的選課,這次只剩下我跟那位同學一起修Kernel,身為一個不會寫程式的新手。我知道接下來的課,對我來說都是很大的挑戰。但在臉書的社團常常可以看到 jserv 的許多梗圖貼文,「 Linux Kernel 今天不學,明天會更難!」於是我抱著被當也沒關係的心,來學習這門課。

修課初期階段:

第一個禮拜就有 lab0-c 這個大作業,我第一次安裝 Ubuntu,第一次辦 Github ,學習使用Git 第一次寫 C (沒錯,我之前只寫過 C++ 、 Matlab )。海量的講義也讓我很挫折,光是前面 C 語言的部份,難度就很高了。進度一直掉變成是常態,雖然修課前就知道,但是還是會焦慮、恐懼。

這時候我就出現了第一個學習規劃,到底是要追成大 Wiki 上課程 Week 的進度,還是停留在前幾週好好補一些比較細節的地方?

這邊先提到一個我開始出現錯誤的學習態度,即便 jserv 在上課就一直提到,學習程式不要「舉燭」(舉燭來自郢書燕說),而且實做才是真的學會。但就像是被催眠一樣。我被挫折與無知領著頭,就一直做著這些「舉燭」的工作。這邊來細說,我到底為什麼會有挫折感與逃避的原因,首先我不懂終端機的基本指令,當時我還不知道 Makefile 是什麼?這會出現什麼問題呢?我直接拿講義lab0-c - 取得程式碼並進行開發舉例:

切換到 lab0-c 目錄並嘗試編譯程式碼:

$ cd lab0-c
$ make

切換目錄是很好理解的,但是當時我以為在 Ubuntu 編譯的方式就是在該目錄下輸入 $ make ,但事實是 Makefile 的用法,編譯方式都寫在 Makefile ,錯誤的認知就這樣累積了。錯誤的認知導致我不太會編譯、測試程式,進而導致我逐漸習慣「舉燭」這種「用看的、用想的」錯誤寫程式方式。導致在實做上很挫折,進而惡性循環。雖然 jserv 說不要花太多時間在 Google ,因為很多資料都有錯誤,而且也有資料過時等等一堆問題,學習第一手資料這個態度才是進步的不二法門。這些概念都是正確的,但有些觀念基礎到成大 Wiki 上也族繁不及備載(或者說寫在那邊,但我還是看不懂),需要額外去學習(不過我真的去問其他撐過兩星期還沒退選的同學、學長,他們都已經沒有這些基礎疑問了,但我就真的不會)。

所以對於真的沒基礎的學生,實做前先學會基本功(如何用 gcc 編譯、 git 、終端機怎麼用等等),不然真的沒辦法往下學習。

修課後期階段:

其實上一段講的,該如何入門的學習方法,很多都是到了課程的後期才知道的,這些東西也好難單純使用文字紀錄,真的要實做後才會知道(難怪 jserv 在第一堂課就說自己不懂怎麼教學生,唯一作法就是自己陪著學生一起做)。我自己的心態上,是真的想好好學好這些知識與經驗,但方法錯了,不過再打這篇心得時,我捫心自問「我自己現在到底知不知道,自己在學習路上無效率的繞圈圈?」,老實說,我到現在還是不知道,我是不懂,只能埋著頭,自以為得苦做「舉燭」?還是害怕自己什麼進度都沒有,然後要趕快生東西出來?老實說,我真的不知道(但至少我現在真的意識到這個問題了),就當成兩者都有吧!這問題可能也無法解決,就盡可能先嘗試做做看(要真的編譯測試),而不是寫完或讀完就放著。

最後幾週,我有問老師能不能補考隨堂測驗,因為知道自己能拿出來的作業要求寥寥無幾,但不管如何,我就是還不想放棄,因為放棄後就什麼都沒了,而且就代表以後我遇到相同困難的也一樣會放棄(金句節錄自因為自動飲料機而延畢的那一年),所以精神上我還不能輸。

課程初期幾週,我一開始連題目都看不懂,過了一整個學期,我是有感受到進步的,雖然不能像很多厲害的同學,拿專案或對 Linux Kernel 貢獻來條列自己的進步過程,但我至少知道某些作業的要求是什麼,某些隨堂測驗在考什麼觀念。

後記:

補考隨堂測驗剛好是這學期我跟 jserv 的第三次一對一討論,一共有三題,我在看完第一題後,就直接填答案了,就先去看第二題。這時候, jserv 問我,有沒有編譯過第一題?我就說沒有,然後我就被 jserv 大聲斥責了:「連測試都沒測過,你連一個工程師該有的最基本素養都沒有」、「這是工程問題,會出人命的」(原意大概是這樣,因為是用聽的,所以不一定每一個字都一樣)。我當下自己不是因為被罵而難過,而是有種精神被往後拉了 10 年的感覺,好像是我未來成為了工程師,但是因為我的工程疏失,有一個人因此喪命的那種奇妙感覺。感到無比的自責與空虛,然後後面的一對一討論我就不太能集中注意力了。

結束一對一討論後,我就沉默了一陣子,並檢視剛剛的基礎題目,用最集中精神的方法,最仔細的態度,去檢視我的每一個想法與概念,並且盡我的能力去編譯測試我寫過的程式。

當我再次起身,六個小時過去了,才注意到肚子餓了。 晚上的11點多,台南還是有很多辛勤的店家提供熱食,一口熱食下去,我真的好難過,平時在社會活著,我並不用過於擔心,一切生活所需會不會有問題?食物是不是壞的?但我卻沒有好好的面對我的工作態度,沒經過自己能提供的嚴謹態度下,所產出的產值給社會,真的是對不起納稅人。

唯一能慶幸的是,這件事情在我還在研究所的時候發生了,還好我還沒真的負責實體運作的工程,還好我還沒真的因為工程疏失害死人,還好我現在意識到這件事重要性了。

人生一輩子會遇過很多人,也會有很多事情讓人心很累、很無力改變,逐漸忘記堅持與重要的心。但是這仍然一種選擇,如果很多事無力改變,就選擇自己重視的人與事,即便只是一個小小的點,也要好好的堅持負責任的心。感謝 jserv 讓我想起這件很重要的事。

補充:

除了成大 wiki 上面的資料,以書籍來說,我只有看 CSAPP 跟 C 語言規格書。看 C 語言規格書的心得是,白紙黑字寫給我,我光是要理解那句精簡的話就要看很久,尤其是很多性質,是要去意會的,沒有一個指令一個步驟這麼簡單,要思考很久為什麼書上要這樣寫。

自我評量 (1 ~ 10)

我給自己 5 分

回顧到第一次接觸到這堂課時,出現在課程介紹講義的最後一頁

開始挑戰前,請思考這席話

「夢想到底是什麼?有的時候,我覺得夢想遭到濫用。而夢想和白日夢的差別又在哪裡?對我來說,夢想,缺乏一個步步為營、量力而為的態度,以至於夢想一直都像夢一樣,你實在說不出一個所以然,也不知道如何實現他,你也沒有實際的目標,遇到抉擇的時候,你還是選擇玩樂,以至於,夢想就真的成為了一個夢想」 – c9s

經過一學期,我現在好好面對這問題,我現在已經沒有夢想了(學期初我肯定不承認這件事),因為都在做白日夢,夢到都迷失自我了。經過以前失敗的經驗,就算是重新出發,也不再准自己單純的思考夢想是什麼,先參雜著實際嘗試,再一面思考,這是我未來打算實行的方向。

以下列出算是我給自己分數的項目

  1. 我沒放棄,撐到最後。

  2. 撐住被老師罵醒,加速「誠實面對自我」的進度(真的好痛苦)。

  3. 把這篇心得誠實的打出來,第一次誠實面對自己的實作。

  4. 克服羞恥的要求補考,然後盡力好好做(還在努力改中)。

  5. 真的有學到東西,雖然還不足以實際條列式的展示。