# Linux 核心課程自我評量 ==[直播錄影](https://youtu.be/JSUkg8KXx-Q)== ## 自我評量不是作文比賽,而是藉由這二十週的投入,為自己爭取「翻身」 授課教師在大學教書十餘年,見到不少學生在課堂表現不俗,但在面試場合卻無法清晰地闡述自己的成果和獨到的成就,從而錯過躋身一流資訊科技企業的機會。 藉由學生撰寫「每月學習回顧」信件和自我評量,不僅清晰且明確說明自身在專業領域的成長,之後也準備跟科技公司的主管及早接觸 ── 與其在面試場合語焉不詳,不如趁現在就做好應對的準備。 務必「誠實面對自己」。 > [Linux 核心實作課程之「每月學習回顧信件」](https://hackmd.io/@sysprog/linux2024-progress) ## 客觀事實 > :point_down: 「在閱讀理解教材上已花費相當大的力氣,尚無能力對於教材提出貢獻,在未來如果有機會再研究 linux 核心程式碼,期許自己可以提出貢獻。」 * 所謂的「貢獻」可以有很多形式,就算修正錯別字也行。本敘述缺乏對「閱讀理解教材上已花費相當大的力氣」提出證明,而且倘若你剛好在隨堂測驗表現不佳,是否暗示他人你的學習狀況不佳呢? * 既然授課教師說過,Linux 核心建構著 21 世紀的資訊科技的大量基礎建設,當你說「如果有機會再研究 linux 核心程式碼」,豈不暗指自己未來對資訊科技的參與程度有限? * 避免說「期許自己可以提出貢獻」這樣預支自己信譽的話語,客觀事實就該強調過去和現在。 * 倘若你在閱讀教材的過程中,已紀錄相關提問 (還記得第五次作業的規範嗎?),且善用課程討論區和授課教師或其他學員,在此主題進行互動,從而釐清你的問題,當然也是自身貢獻的另一形式。 > :point_down: 「在隨堂測驗中也很認真思考每一題該填入的程式碼為何,到了課程中段以後,因為實驗室的比賽以及其他課堂的作業以至於花費在此的時間大幅減少,無法順利跟上課程進度,教材理解不夠充分導致無法充分理解隨堂測驗,雖然如此,但我在每周進行隨堂測驗前,都會花費度少時間嘗試理解當周的課程教材」 * 這樣的說法是否也適用於其他科目?差別只在測驗的頻繁程度。 * 自我評量不該拿其他事件來合理化沒充分規劃自身付出的事實,應著重於自身的產出、實際學到的理論和實務議題。 > :point_down: 「期末被其他科目的作業、考試佔據了較多時間,在時間分配上過於失敗,無法兩邊兼顧。但在最後一週我注入了所有時間在期末專題上,但無奈最終時間還是不足以將預期的項目完成。暑假會嘗試繼續完成後續的內容。」 * 考慮到自我評量可能會被日後的主管和同事看到,強調自己忙於其他科目,其實沒什麼資訊量可量,畢竟他們更在意「你對 Linux 核心或相關系統軟體有什麼認知?多快可加入工程團隊來解決問題?」 * 現在就能做的事,不用等到暑假。 > :point_down: 「起初我對網頁伺服器完全沒有概念,但透過閱讀許多文件以及實作,能夠理解其原理,並結合測驗八實作出一個網頁伺服器,並搭配相關測試,雖然最後的結果並沒有比全部測試的比較對象還要好,但我對於這個專題的投入,已盡學生最大的努力。」 * 避免說「已盡學生最大的努力」這樣無法令人感同身受的話,尤其出自一位理工科系學生之口,你知道「最大」的定義嗎? * 既然授課教師多次強調「過程比結果重要」,那就該強調你過程中的投入,無論是遭遇困難或迎來突破都可列入,且用客觀事實來闡述,例如善用 Ftrace 定位出效能瓶頸、知曉效能分析工具的原理,和鞏固原有的網頁伺服器測試流程等等。 * 自我評量應著重自己在短期內克服問題的方式,特別是當起點是「對網頁伺服器完全沒有概念」,一旦有所突破,就暗示自己能夠「作什麼,就像什麼」,當然是極具潛力。 > :accept: 「在第一次作業 lab0-c 撰寫開發紀錄的時候,老師在我的筆記問我「如何確保排序的『穩定性』」,”stable” 一詞我只在過去學習演算法課程的時候把定義背下來,但我從沒想過要怎麼確保一段排序程式碼是否為穩定排序。從一開始單純在每個排序元素的成員加上編號,到現在使用陣列來紀錄節點的位址,目前的實作還有進步空間,因為固定長度的陣列沒有辦法適用於任意大小的佇列,可以利用像是 sliding window、hlist 之類的技巧來避免使用固定數值的巨集。不斷和老師討論、修改電子書或是程式碼教材的過程也讓我知道原來把小事情做到好是很重要的,光是留意細節就可以贏過許多人。」 * 注意英文的 [quotation marks](https://en.wikipedia.org/wiki/Quotation_mark) 的使用,注意對稱,或用半形的字元。 * 呼應[第一次作業](https://hackmd.io/@sysprog/linux2024-lab0)提到的「留意各式細節,唯有重視小處並步步為營,方可挑戰原始程式碼規模超越三千七百萬行的 Linux 核心」 * 上述過程就是「客觀事實」的案例之一。 > :accept: 「在討論中我問老師浮點數乘以十的運算如何用 bit-wise 的方式實現,老師給了我一些提示並要我現場寫出來,但我當下想不出來,在討論結束後,進一步解析 IEEE 754 的格式,便成功寫出來了,也許就如老師所說,我常常陷入先做再說而未能全面理解我要實作的事物。進行期末專題時,便記起此次的教訓,先理解在實作。」 * 這也是客觀事實,搭配佐證。 * [再啦 X](https://pttpedia.fandom.com/zh/wiki/%E5%86%8D%E5%95%A6%E5%B9%B9) > :point_down: 「在討論中老師問我如何使用 bit-wise 方法做到浮點數乘 10,而我連乘 10 都不會,更不用說誠實面對自己,在討論結束之後我將自己在計算機組織所學到的浮點數乘法使用 bit-wise 實作出來,並搭配相關測試,在這個討論中我深刻理解在遇到問題時,不會的原因是因為我第一次看過這個問題,所以我才覺得我不會,但是如果我能夠具備足夠的基礎能力,無論遇到什麼沒遇到過的問題也能透過積累的經驗去慢慢解決問題。」 * 在資訊科技領域,時常會遇到「第一次看過這個問題」,然後你歸咎這是自己不會的理由,豈不變相承認自己不適合這領域嗎? * 避免說「如果我能夠具備足夠的基礎能力,無論遇到什麼沒遇到過的問題也能透過積累的經驗去慢慢解決問題」,這不是暗指自己現在仍沒有「足夠的基礎能力」? * 授課教師之所以準備多樣的測驗題目,一來是「預測」資訊科技公司的面試,二來是強化學員對於「背誦題庫只適用中學測驗,在資訊科技領域,就該每天勇於接受新挑戰」的認知。既然你當初表現不佳,事後就該在 bitwise 運算和相關議題有所突破,例如在期末專題特別強化,這樣就可彰顯自己學習的積極程度,而且正因自己具備「足夠的基礎能力」,才能從哪裡跌倒、很快從哪裡站起來。 > :point_down: 「我給自己 10 分,雖然我寄給指導教授的學習回顧數量不多,但我在實驗室進度開會的時候會跟指導教授說明課程的相關內容,指導教授也大概了解我的學習狀況,在回顧信中,我會詳細的說明我在課堂上的學習狀況還有掌握的知識。」 * 還記得授課教師要求研究生發信給實驗室指導教授的動機嗎? * 與其強調每月寄送信件 (但真相是沒有) 這樣的形式,為何不說指導教授與你的互動?為何不說自己因為參與本課程,對看似不相關的研究實際做出貢獻?例如利用 bitwise 加速實驗室在電腦圖學 raytracing 的效能等等。 * 倘若「我給自己 10 分」是建構在臆想,而非客觀事實或真正的突破,他人會怎麼看待你?難道不是「為了怕失敗,無法正視自己」? * 自我評量可能會被日後的同事和主管看到,務必「誠實面對自己」且「用客觀事實介紹自己」。 > :point_down: 「我認為我投入在作業的時間不夠多,導致很多部分完成度都差強人意。 但還是學到許多以往不曾接觸的部分,(bitwise操作、用linux list API刻佇列、統計手法驗證分布性、linux module等)。」 * 注意書寫規範:「無論標題和內文中,漢字和英語字元之間要有空白字元 (對排版和文字搜尋有利)」 * 差強人意與否,不是客觀事實,相反的,你的起點在哪、終點又在哪才是。既然本課程若干主題都是你過去不曾接觸,現在初步有所突破,不啻是闡述自己適合資訊科技這行業的極佳說明嗎? * 既然作業中不免有各式量化表現,就該援引說明自己可在極短的時間內掌握上述進階主題,從而「用客觀事實介紹自己」。 > :point_down: 「我在期末專題主要欠缺了利用 RCU 機制釋放系統資源 (如清除閒置連線),相關流程與資料結構大致想好,但就差尚未動手實現。 在之後暑假實習空閒之餘,我會努力補足剩下內容,將專題做個結尾也對自己有一個交代。」 * 現在能做的事情,為何要拖到暑假呢?倘若暑假過去,你依舊沒在指定的主題有所突破,授課教師又該如何評價你? * 既然你宣稱「大致想好」,為何不詳盡闡述呢? * 開發紀錄務必依據[資訊科技詞彙翻譯](https://hackmd.io/@sysprog/it-vocabulary)和[詞彙對照表](https://hackmd.io/@l10n-tw/glossaries),使用清晰且明確的漢語書寫,例如使用「實作」,而非「實現」。 > :point_down: 「前幾週課程所列進度我都盡力跟上,但到了中間發現教材之豐富,實在無法一一跟上,只能選有興趣的課程來跳著看。」 * 倘若你在學生階段無法克服難題,你又何德何能在隔年 (或不久的未來),在工作崗位因解決工程問題,為公司開創獲利 (或止損)、從而為自己爭取到更好的薪資或分紅呢? * 學生階段就該接受難題,不只是鞏固「足夠的基礎能力」,更是藉由這些客觀事實,明確跟未來的雇主或合作夥伴說明,你就有能力解決問題。 * 既然你很快就會踏入職場,結果面對挑戰時,卻只能「選有興趣的課程來跳著看」,日後在職場難道不會用這樣的態度面對雇主、主管、同事,和客戶嗎? > :point_down: 「每周上課測驗的部分 : 這部分都有認真去看待,但是因為大部分的題目都要先對程式碼有初步的理解,以及對以些指令要熟悉,在時間急迫下有時會來不急完成。」 * 開發紀錄務必依據[資訊科技詞彙翻譯](https://hackmd.io/@sysprog/it-vocabulary)和[詞彙對照表](https://hackmd.io/@l10n-tw/glossaries),使用清晰且明確的漢語書寫,例如此處是「命令列的命令」,而非「指令」,後者在本課程特指 CPU 或機械裝置的低階且最基本的操作。 * 「都有認真去看待」不是客觀事實,特別當你測驗結果不佳時。 * 「在時間急迫下有時會來不急完成」是當初授課教師設計題目的用意:模擬資訊科技產業的挑戰,你不用當下盡善盡美,但你事後做了哪些反省、檢討,從而在同類型的議題有所突破?這才是該在自我評量揭露的「客觀事實」。 > :point_down: 「我其實不是沒有在看教材,但我時常以固定的學習方式在進行,比如說我會等待所有頁面都看懂我才會去紀錄,導致在文字上的著墨越來越精簡,這樣不僅在回顧上難以理解,也時常導致無法一次表達清楚。老師也有提到「我是不是都用背的」,也許我理解的方式與步調讓自己沒有系統性去理解,導致問題再次浮現時就無法有條理地回答,因此我覺得這方面我需要去改進。」 * 不用特別說「時常導致無法一次表達清楚」,工程人員需要大量的溝通,本課程就著眼於此。與其說自己表達能力不好,不如檢討自己平日有無持續融會貫通。 * 既然很快就要步入職場,難道這些問題在你換了座位後,就會瞬間消除嗎?與其闡述這些[囈語](https://dict.revised.moe.edu.tw/dictView.jsp?ID=151269),不如用客觀事實,說明自己在一對一討論時,遇到什麼問題、在特定的議題如何進行後續追蹤,這些認知又如何在後續測驗和期末專題展現。 > :point_down: 「這學期的作業和小考訂正讓我第一次體會到數學和程式碼實作的連結,若要加速二進制電腦很吃力基礎運算像是除以3或是除以10,需要利用二進制數值位移的特性和數學證明才能得出較快的算法 第四週測驗二,而且最後還要進行實驗驗證。對其他人很簡單的數學我花了3天才訂正出來,讓我意識到我也能完成證明以前覺得不可能的數學。到學期中課程進入並形程式設計,我閱讀atomic 操作和 acquire-release 和 不同種 memory model,雖然我是電機背景比起程式設計更熟悉處理器架構,但也讓我學到現代處理器設計考量決不會是像計算機架構參考書寫的一樣只是在加速單核心性能。」 * 注意書寫規範:「無論標題和內文中,漢字和英語字元之間要有空白字元 (對排版和文字搜尋有利)」。 * 開發紀錄務必依據[資訊科技詞彙翻譯](https://hackmd.io/@sysprog/it-vocabulary)和[詞彙對照表](https://hackmd.io/@l10n-tw/glossaries),使用清晰且明確的漢語書寫,例如「二進位制」在台灣簡稱「二進位」、algorithm 譯作「演算法」,而非「算法」(the way to calculate),還有「並形」更是不該出現的錯誤,或許是因為你用的中文輸入法不好,請愛用[新酷音輸入法](https://chewing.im/)。 * 本課程的「核心」特指作業系統核心,因此 (processor) core 該譯作「核」,以區隔「核心」。理解詞彙背後的考量因素和使用精準詞彙,也是工程素養的一環。 * 「我也能完成證明以前覺得不可能的數學」這當然是你在本課程獲得突破,應當有更多闡述,學生階段鞏固自己對理論和實作的認知,來日才能用這些客觀事實說明自己「作什麼,就會像什麼」。 > :point_right: 「在課程中可以遇見很多厲害的同學,每次看到大家的成果都會讓我反省自己的不足, 但也藉這樣來激勵自己,從一開始的被大量糾正到慢慢注重一些以前不曾注意到的問題, 過程中的累積都是自己的,在遇到困難時都會讓我想到 〈因為自動飲料機而延畢的那一年〉 中所提到的 “你該學習的不是看到事情要完蛋了就去避免失敗,而是應該學習如何處理與承受失敗”,並勉勵自己堅持下去, 到現在還有很多不足的地方需要加強並勉勵自己繼續精進,最後很慶幸自己在這學期能夠有機會參與課程並持續到現在。」 * 注意書寫規範:在中文敘述中,使用全形標點符號,例如該用「,」,而非 ","。此處應該使用「」標點符號,而非英文的 [quotation marks](https://en.wikipedia.org/wiki/Quotation_mark)。 * 這席話揭露的資訊:一來說明 Linux 核心課程不乏厲害的學生,二來因為自己堅持到現在,暗示自己跟前述厲害的學生有著同等級的堅持和付出。可惜沒說明因為什麼被糾正、詳細的突破在哪些領域,以及如何承受失敗,後者是未來雇主和同事在意的議題。 > :point_down: 「由於我的實作經驗不足和作業難度頗高的關係,我的作業進度不太理想。希望在七月時可以把作業0繼續改進。」 * 注意書寫規範:「無論標題和內文中,漢字和英語字元之間要有空白字元 (對排版和文字搜尋有利)」。 * 「實作經驗不足」是你的「起點」,而非「終點」。 * 作業難度之所以高,就是授課教師想藉此彰顯學員在短期內解決難題,從而為自己爭取「翻身」的機會。 * 現在就是七月,不要只有「希望」,授課教師等你。 * 由於很快就步入職場,難道現在的困境不會在隨後工作遇到嗎?之所以要求學員回顧,就是從中萃取足以說服他人的客觀事實,特別是彰顯自身能力、應對困難的心理建設,和「作什麼,就該像什麼」。 > :accept: 課程教材修訂 > * 你所不知道的 C 語言:編譯器和最佳化原理篇: Braifck -> Brainfck、.改成,、增加空白、增加程式的格式 > * 你所不知道的 C 語言:編譯器原理和案例分析: 又 -> 有 > * 錯誤更正碼介紹和實作考量: 增加空白,漢明離 -> 漢明距離 > * 你所不知道的 C 語言: 執行階段程式庫 (CRT): imgur 圖片無法顯示修正 > * 你所不知道的 C 語言:連結器和執行檔資訊: RELA relocation -> RELA relocations > * 你所不知道的 C 語言:動態連結器篇: 作中學 -> 做中學 > * 你所不知道的 C 語言:物件導向程式設計篇: develeopment -> development * 看似微小,但絕對是客觀事實。 * 《三國演義》第八五回提到:「勿以善小而不為」 > :point_down: 「我認為自己投入本次課程狀況開高走低,後面也沒有為專案做出貢獻。但在約談後有認真為了自己第一周作業排序問題做出了數學分析。」 * 用空泛詞彙描述自己在這們課程的成就,很有創意嗎? * 既然你做出數學分析,為何不進一步貢獻到本課程,成為新的教材呢?善用課程討論區提出。 > :point_down: 「在隨堂測驗方面,我參與了每一次的測驗,每一次測驗的內容都不太一樣,要在短時間內理解 200 - 300 行程式對我來說還是很困難的,特別是 bitwise 的考題,但這些測驗讓我認識了 Linux 核心設計的各種議題,具體收穫如下: (1) bitwise 操作,這學期好幾周的考題都是有關 bitwise 操作,到了最後一次測驗也是關於 bitwise 操作的,還是只考了 50 分,目前對 bitwise 掌握度還是不高,後續還要 review 考題。 (2) 並行程序設計,包含 Atomics , RCU(有一次上課在討論 RCU ,但忘了是不是考題內容), Producer-consumer problem 。」 * 開發紀錄務必依據[資訊科技詞彙翻譯](https://hackmd.io/@sysprog/it-vocabulary)和[詞彙對照表](https://hackmd.io/@l10n-tw/glossaries),使用清晰且明確的漢語書寫,例如 concurrent programming 是「並行程式設計」。 * 既然要強調自己藉由測驗,認識 Linux 核心設計的議題,那就該清楚說明這些測驗和 Linux 核心的關聯,不只用於自我評量,也是在日後科技公司面試或入職後的會議場合中,能夠信手拈來,脫口說「就我對 Linux 核心和相關基礎建設的認知,並行會是這類議題的關鍵考量,因此要如何如何規劃」。 > :point_down: 「我學到了許多撰寫程式的技巧,尤其是如何使用前置處理器進行優化,並學習了位元操作(Bit Operation)及其優化方法。」 * 開發紀錄務必依據[資訊科技詞彙翻譯](https://hackmd.io/@sysprog/it-vocabulary)和[詞彙對照表](https://hackmd.io/@l10n-tw/glossaries),使用清晰且明確的漢語書寫,避免濫用「優化」。 > :point_down: 「因為 Character Device 在進行讀寫操作時,也會呼叫相應的操作回調函數,所以儘管我只閱讀了部分教材,但這些內容都與我未來的職涯發展有著正相關的影響。」 * 開發紀錄務必依據[資訊科技詞彙翻譯](https://hackmd.io/@sysprog/it-vocabulary)和[詞彙對照表](https://hackmd.io/@l10n-tw/glossaries),使用清晰且明確的漢語書寫,區分「函數」和「函式」,本例的 callback function 可譯作[回呼函式](https://developer.mozilla.org/zh-TW/docs/Glossary/Callback_function)。 * 這裡說「這些內容都與我未來的職涯發展有著正相關的影響」實在太早,除非你剛好已有科技公司面試或實習的經驗,若有,則可說「今年四月我在 Google Silicon 面試時,就遇到面試官對相關議題的重視,我幾乎不假思索就依據自身對 LKMPG 和研究 KVM 相關的認知,予以回應,甚至直接用 Linux v6.8 原始程式碼來舉例,精準說明原始程式碼的行數,因為我前一天正在研讀那段程式碼。」 > :point_down: 「在這過程中我完成第一週作業中指定的佇列操作,並成功整合了 list_sort.c 程式碼。第二份作業中的五個測驗題我也閱讀並執行了程式碼,並為運作流程畫了 Graphviz 圖例,最後成功整合了 merge sort 命令進入 lab0。第三份作業是將家喻戶曉的井字遊戲融入 list_sort.c 專案當中,我有成功的融合並且執行遊戲...我在作業和隨堂測驗中都投入了大量時間和精力,並詳細記錄了我的開發過程和結果,所以自我評分 9 分,」 * 避免說「投入了大量時間和精力」這樣難以證明且不易獲得他人共鳴的話語,與其說「詳細記錄了我的開發過程和結果」,不如說這些成果多次被其他學員引用,甚至授課教師特別在課堂探討我的專題一類的話語。 * 只是「整合」是絕對不夠的,你真正的突破在哪?務必詳細描述。 * 還記得上課有時出現的 HTC 案例嗎?你送男友、女友、親朋好友的手機是哪個品牌?絕對不是某款手機欠缺功能整合能力,而是可能根本不是選項。 > :point_down: 「開發過程中,我對自己的方法感到不安,或許做實驗本來就不像國中寫考卷有正確的答案,我對於自己投入的時間心力,以及最後的完成度感到滿意,所以自我評分 10 分。」 * 倘若你根本沒定義「完成度」,並佐以客觀事實來說明,是不是讓人聯想到「看到事情要完蛋了就去避免失敗」呢?在本課程本來就會遇到一系列挫折,而你該學習如何處理與承受失敗,這也是「翻身」的契機。 > :point_down: 「在本課程中,我全力以赴,每一項作業和專題都盡最大努力去完成,這些努力也得到了應有的回報。」 * 這席話是不是很熟悉?小學作文的範本就是這樣書寫的,但「自我評量不是作文比賽」,應該詳細論述。 > :point_down: 「在作業和測驗的部份我給自己 9 分,在作業的部分雖然並不是每一項都有完成,但是有盡力的去理解教材和撰寫共筆,實作方面或許沒有真的對專案做出被採納的貢獻,不過在共筆上也有描述自己經過教材理解和參考其他資料後嘗試做出改進的過程,而在測驗的部分也有參與,雖然測驗時理解比較困難,但是事後也有嘗試去思考當下不懂的地方並記錄在共筆中。」 * 自我評量的 9 分,到底跟後方猶如形式的投入有何關聯?這社會很多人薪資不高,是因為他們沒準時上班、沒有依據指示投入工作嗎?不,主要的問題不在於「投入」,而是「創造價值」的多寡。你該清楚聲明自己的起點,以及到了接近終點的此刻,你掌握什麼,而這些經驗又對應到真實世界的哪些關鍵工程議題,後者才是你日後獲得理想待遇、爭取自己舞台的談判籌碼。 > :point_down: 「於雙向佇列的操作,是第一次碰到使用龜兔賽跑法來找佇列中央的節點,藉由指針的操作來思考如何有效率和安全的進行節點操作,也用在實驗室的計畫當中。」 * 開發紀錄務必依據[資訊科技詞彙翻譯](https://hackmd.io/@sysprog/it-vocabulary)和[詞彙對照表](https://hackmd.io/@l10n-tw/glossaries),使用清晰且明確的漢語書寫,此處為「指標」。你探討過快慢指標和利用環狀雙向佇列的特性,操作成本的落差嗎? * 既然「用在實驗室的計畫當中」,何不講清楚呢?日後在科技公司面試的場合也用得到,且能暗示自己就適合在資訊科技產業,運用一貫融會貫通的學習能力,為雇主和合作夥伴解決工程難題從而獲利。 > :point_right: 「最初我的 TODO 並沒有被明確的寫下來,令我有些不知所措,猶豫半刻後,便決定先把知道的部分做出來,後來,我為了真正的了解紅黑樹,往後的時間我都拿來研讀紅黑樹的相關教材,和 rbtree.c 的程式碼,也因此讓我有機會修正其中的錯誤,最讓我驚訝的是 TODO 的 extra 內容竟然和我在做的事情一模一樣」 * 那是授課教師親自批改每位學員的每份作業 (應該都改得到) * Linus Torvalds 說自己 [not a people person](https://www.bbc.com/news/technology-35599774),授課教師也不指望學生會喜歡自己 (但仍歡迎學生[贈送卡比玩偶給女兒](https://www.facebook.com/groups/system.software2024/posts/1540184823426077),等課程結束),但願有人記得大學教師親自批改作業這樣看似微不足道,但身體力行闡述對細節的重視。 > :point_down: 「透過這次的期末專題讓我更了解 Concurrency 相關議題如 PThread 和 futex 的應用,以及在這過程中通過查閱第一手資料培養自己理解規格書的能力,我認為對我來說是難度適中的題目。」 * 授課教師之所以要求學員詳盡紀錄且進行一對一討論,就是規範難度適中的期末專題,這種「本該如此」的事,就不用提。 * 光是「了解」是截然不足的,有哪些客觀事實印證你的「了解」呢? > :accept: 「當我進行作業二時,我在第 3 週對應的測驗教材頁面的第一題發現了一個數學公式的錯誤。在本課程第二次實體 code review 結束後,我向授課老師反映了這個問題。老師回應說這是故意寫錯的,目的是測試我們是否能注意到這些細節。這次經歷顯示了我在閱讀過程中對細節有仔細觀察。」 * 對細節的重視,很好。 > :point_down: 「這個作業我覺得自己做得不完善,完成度約 50%,但部分的數學推導已完成。」 * 依據教育部重編國語詞典,「[完善](https://dict.revised.moe.edu.tw/dictView.jsp?ID=161584)」的釋義: * 完美、完好。《史記.卷一一○.匈奴傳》:「其得漢繒絮,以馳草棘中,衣褲皆裂敝,以示不如旃裘之完善也。」 * 完好無缺。《初刻拍案驚奇》卷五:「從陸倍道,忽遇虎負愛女至,驚逐之頃,虎去而人不傷。今完善在舟,希示進止!」 * 既然宣稱的完成度約 50%,距離上述「完美、完好、完好無缺」的語境實在太遠,不如不說。 * 避免濫用「完成度」,只有明確知道工期施工內容,才可估算出精準的進度,而作為知識型工作者,我們著重關鍵的突破,而非按圖索驥、機械化的施工。 > :point_down: 「討論結束後,我重新閱讀了 CSAPP 第二章,並開始完善面談中未完成的題目。」 * 依據教育部重編國語詞典,「[完善](https://dict.revised.moe.edu.tw/dictView.jsp?ID=161584)」的釋義,該詞彙沒有改變現狀的寓意,而是陳述現象,注意語境。 * 授課教師之所以多次強調漢語表達的重要,是著眼於學員已學習十餘年的漢語,如果還不能精準使用詞彙和強化溝通效率,何以讓他人意識到學員在其他語文和特定領域的知識也可勝任? > :accept: 「紀錄一下老師給的毒雞湯:幻滅是成長的開始。希望你體會到何以我一直強調「細節」的重要。」 * 授課教師不在意學生是否同意自身觀點,而在意學生能否親身實踐。 > :accept: 「我發現從 ChatGPT 得到的回答往往不切實際。也對應到老師在 Google meeting 上提到的,如果只是一昧的使用這些工具,那並無法與他人拉開差距,其他科系的同學甚至比你還會問 ChatGPT 問題。」 * 這是為何我們用更高的標準要求自己。 > :accept: 「找到 Jserv 最快的方式就是提交 pull request」 * [TEDxTainan](https://www.facebook.com/TEDxTainan/posts/pfbid0tAWm8s3PFqe2pDicfzbZYpbVHZtk92Tp5rMH4XfYSDHbeFyCQRpZvQdpDVo5sA1ml):「我們這些過來人對社會最大的貢獻,不是追求虛幻 GDP,而是拉年輕人一把,一同並肩作戰」,和學員協作、打下一片天,總是授課教師心中最重要的事。 * 當你畢業時,不要窮得只剩下畢業證書,只要想清楚,自己做了選擇,就不要後悔。 > :accept: 「放下面子,誠實面對自己: 一開始在跟老師溝通時常常有易無意地藉由一些話術來掩飾自己的不足,或是先把自己講的很爛,想讓老師把期望降低,進而避免被罵。然而這樣對討論一點幫助都沒有,也忽略與老師溝通的目的就是為了要變強,不是為了什麼可笑的尊嚴,此外老師在教育現場打滾多年,這種雕蟲小技早就看膩了,掩飾的越賣力反而越滑稽可笑。 被老師點破之後我便努力調整心態,放下完美主義並客觀地描述自己面臨的困境,才能讓老師知道如何協助我,進而變強。」 * 這是為何不該說「不太懂」,不懂就說不懂,誠實面對自己。倘若學員不懂,授課教師可再次闡述並隨後確認,而倘若學生已懂,就該繼續朝向設定的目標前進。 * 至今授課教師仍不知道如何教書,但點出學員無法在「變強」這條路堅定走下去的各式現象,應仍綽綽有餘。 > :accept: 「雖然我寄給指導教授的學習回顧數量不多,但我在實驗室進度開會的時候會跟指導教授說明課程的相關內容以及討論,舉例來說在有一次會議上指導教授在跟學姐討論該怎麼洗牌才是足夠好的,這時我想到我在作業1中有實作到的洗牌演算法(Fisher–Yates shuffle),並有搭配相關統計的原理來分析的實作,探究洗牌的「亂度」,與指導教授和學姐討論後加入學姐之論文中,在回顧信中,我也會詳細的說明我在課堂上的學習狀況還有掌握的知識」 * 注意書寫規範:無論標題和內文中,漢字和英語字母、數字標點、符號字元之間要有空白字元 (對排版和文字搜尋有利) * 應回顧統計原理,特別是關鍵字 (原理、定律、人名,或知名悖論),養成信手拈來講出專業出處的習慣,增進面試過程的溝通效率 > :accept: 「撰寫 commit message 的好習慣也導入至我的大三專題,和組員間的溝通有效率 (好的 commit message 可以節省大量溝通成本),因為我的作業和專題都是公開的,這個習慣也被我實習的主管稱讚 (從沒想過寫程式以外的事情能被稱讚)。」 * 評:「本該如此」 > :point_down: 「每月發給實驗室指導教授的學習回顧。我給自己 10 分。 四月實驗室 meeting 時直接和老師說」 * 說好的紀錄在哪? * 事後授課教師知道你的學習狀況嗎? * 這部份有明確規範,就不該用小聰明搪塞。沒做到的事,就不要騙自己,記住自我評量會提供給若干大公司主管參考。 > :point_down: 「我以前根本不知道一個作業系統到底是怎麼運作的,也不知道 Linux 為什麼這麼受到開發者的青睞,經過幾次的作業後,我了解到不管在多麼微小的功能上 Linux 核心開發者都會盡量用數學方法以及優美的程式碼讓效能變快,就是因為有這些人的努力,才能讓 Linux 成為最成功的開源專案。」 * 這樣的說法其實不用你花 20 週,就可寫下來,畢竟第一週課程介紹就提過了。 * 你該強調「你因為投身於 Linux 核心的研究,獲得什麼成長?」 > :accept: 「我們最在乎的事情是效能,所以我就在我能力所及範圍內將效能往上提升,並進行測試,除了 mt-redis 這個專案,之後也會嘗試貢獻 ValKey 或是 Dragonfly DB 等相似的 in-memory storage ,雖然我的專題有很多地方可以改進,像是測試方法等,還有報告時的表達能力,都有待加強,不過也讓我有了這次寶貴的經驗,知道哪裡可以改進,讓我往後找工作面試時可以更流暢的表達與介紹自己。」 * 應摘要讓 Redis 效能大幅增進的手段、啟發,還有描述「很多地方可以改進」的一部分,尤其在面試場合,絕對不要吊人胃口。 > :accept: 「在學期初,我很怕被老師點到名回答問題,因為怕自己回答不出來 .. 經過研究我的期末專題,了解完期末專題的程式碼和架構後,我發現我在討論期末專題時,不太會緊張了,反而能回答老師的問題,讓我了解到,只要了解自己所做的東西或是某一個概念,就可以克服緊張的感覺,在面試時也是如此,題目與原理都懂了,就可以自信的回答出來,不會被無知的情緒綁架,在 6/27 課堂上,我更是主動提出自己的疑問,因為想要讓自己的專題更上層樓的求知慾已經比我的緊張感還要大了,經過這學期,我意識到自己的不足,也逐漸成長且理解要如何準備面試,因為在每次問答時我都當作面試來看待,希望我能靠著這份寶貴的經驗繼續成長。」 * 評:「本該如此」 * 以後 COSCUP、SITCON,甚至是 [Linux Foundation 舉辦的多場研討會](https://events.linuxfoundation.org/),就先投稿。 $\to$ [2024 年開放原始碼專案協作](https://hackmd.io/@sysprog/ByLJ8DUFT) > :point_down: 「在這過程中我確實學到了很多東西。例如,大幅提升了C語言的熟練度,這在面試過程中給我帶來了巨大的幫助;完整掌握了Git等工具的使用;了解了各種排序演算法及其時間複雜度的理想與現實差距;掌握了位運算、哈希表及紅黑樹的實作方法等。」 * 注意書寫規範:無論標題和內文中,漢字和英語字母、數字標點、符號字元之間要有空白字元 (對排版和文字搜尋有利) * 在將技術術語譯成音譯時,需要格外小心。舉例來說,將 hash function 翻譯為「哈希函數」,雖然看似將 hash (音標:[hæʃ]) 進行相似的音譯,但實際上「哈希」更接近英語中的 harsh (音標:[hɑːrʃ]) 的發音。此外,harsh function 描述在苛刻環境中發揮作用的功能,自動化工程的描述,與電腦科學無關。因此,我們要不保留原文,要不採取意譯,例如「雜湊函數」。 * bit 之所以翻譯為「位元」,是避免歧異,例如 "32-bit integer" 在簡體中文寫作「三十二位整数」,bit 乍看就成為量詞,與本意牴觸。 > :point_down: 「雖然這個作業我未能在截止日期前完成,但整體完成度還不錯,對應資料結構的圖示也有清楚利用 graphviz 繪製在共筆中。這次作業 review 是很不錯的體驗,收穫了許多其他修課學員的建議。針對各項建議,我都有進行對應的調整,每次調整後都有獨立的 commit,我覺得這個作業做得很好。」 * 理工人應避免說「我覺得」,儘量用客觀事實來陳述自己的貢獻。 * 「整體完成度還不錯」這種話不要輕易說,特別當你測驗題的延伸問題沒做完時,在授課教師規劃的每個測驗題,都跟 Linux 核心原始程式碼有關,但有些學員停留在「我會填空了,我好棒」這樣的認知,殊不知,工程本該是持續的演進和反省,上面這樣過度樂觀,可能讓他人認為「又是一個害怕失敗的學生」。 * 既然你說「收穫了許多其他修課學員的建議」,為何不列出、分類討論呢?這就是你的「起點」,倘若你在學期末都克服並予以融入在專題和專業領域中,就是自身成長的客觀事實。 > :point_down: 「我在和授課老師的一對一互動中了解了閱讀教科書的重要性,發現許多教科書中都有詳細的數學證明,例如 AVL tree 和 rbtree 的樹高推導,這也是我先前欠缺的部份,我在參考其過程後重新整理了推導過程並更新在筆記上,在討論時遇到不懂的問題也根據授課老師提供的教材整理成表格以供後續複習。」 * 作正確的事,永遠不嫌晚。 * 應當強調你的發現,例如 [tree height](https://hackmd.io/@sysprog/linux-rbtree) 不是越低越好,要看操作而定。 * 數學的討論很重要,倘若你可在面試場合「不小心」給予數學證明 (即便不完整),實質拉開自身跟他人的差距。 > :point_down: 「剛接觸到第一個作業時,我以為能像以前一樣打開作業就開始寫,但看了作業要求後才發現自己完全不會使用 list API。此後,在做新的作業之前,我都會花一段時間閱讀並理解教材,然後才開始著手進行作業 ... 然而,到了學期中後段,由於實驗及論文的進度壓力,我無法再將太多時間分配給課堂的教材和作業。儘管如此,我仍然努力完成作業。」 * 針對碩士二年級的學生,與其強調自己顧此失彼,不如說自己「背負著碩士研究可能會延誤的風險,我依舊堅持選修本課程,並審慎依據事先規劃的目標,著重在 ___ 和 ___ 等題目,因為我期望能加入 ___ (公司名稱) ___ 且為此在 Linux 核心的基礎上進行突破」。 * 不要過早承諾「儘管如此,我仍然努力完成作業」,著重在「你現在有什麼」。 > :point_down: 「評分: 1 分。無庸置疑,我這學期沒有對那些專案做出任何貢獻,無論是錯字修正還是優化。由於我的基礎實力不夠,要理解那些書籍的內容或程式碼的運作流程都需要一段時間,因此很難判斷其中是否存在問題,都無條件地接受所有內容,即使內容可能有錯誤。」 * 不要濫用「優化」。若將 "optimize" 翻譯為「優化」,那該如何跟 "improve" 區隔呢?"improve" 的寓意是 "to make (something) better; to increase the value or productivity (of something)",翻譯為「改善」是合理的,但 "optimize" 則是 "to make (something) optimal. to become optimal",涉及到 "optimal" 這個漢語不存在直接對應的詞彙。"optimal" 著重於經過反覆調整和在不同方案間周旋,挑選出最適宜、最佳且符合需求一項。 * 倘若將 "optimal" 翻譯為「優」而非「最優」,就喪失前述「挑選比較」的暗喻。某些濫用「優化」的語境,根本與「改良」和「改善」無異,那為何不直接講「改良」和「改善」呢? * 不要太早放棄,就算改錯字也算貢獻,你回顧教材時,就可以順手修正。勿以善小而不為。