contributed by < Andrushika
>
以下採取佳句節錄以及自我反思的紀錄方式:
我開始透過朋友詢問,試圖在整個交大中尋找懂機械設計和製造,而且對自動飲料機有興趣的同學。然後我發現一個原本以為只有在資工系發生的現象,那就是「資工系的學生不會寫程式,機械系的學生不會做機械」
看了除了資工系的學生不會寫程式,機械系的學生不會做機械,現在又多一條電工系的學生不會焊電路,這世界到底怎麼了啊。
看到這段的時候深有同感,為何大學上完四年,那麼多學生還會對職場感到這麼焦慮?老師也曾說過,若大學教育足夠完備,那企業 HR 應該會排在學校門口等學生下課、搶人才對,但這件事沒有發生,有什麼是需要改變的?
…這些因素產生的問題有沒有嚴重到需要更改設計,就只有做實驗才知道。因此大部分的時間我都在做實驗。把機器接上管子並打氣加壓,控制電磁閥通電的秒數,用超大的量筒測量體積,重複數十次取平均。接下來更改閥件接法,重複同樣的流程再做一遍。透過不斷的實驗,才能知道機器是不是如同預想中運作。
之前開發過不少應用層專案(前後端、App 等等),通常只要寫出來符合預期、好維護、測試會過就好。因為程式的行為不會改變,自然也不需要做什麼實驗測試可靠性。後來發現是因為我做的東西都太小了,修了這門課之後,作業都會不斷強調實驗的重要性,透過實際的數據來解釋現象、而非感覺。例如討論 memory barrier 的時候就把 compile 完的 assembly 拿出來討論、探討 kernel module 效能瓶頸的時候就用 ftrace 追蹤;這種追根究底的方法,讓我在開發的時候心中踏實許多。
我不能再無腦地相信這個傢伙了。每改一次設計,就得把設計圖面送到加工廠,然後等待一週的時間,再從工廠取加件回來。雖然工件本身材料不貴,但是時間實在是拖太久。
托數位孿生技術的福,這種機械都可以先在物理世界中先進行模擬驗證可行性,再實作出來。現在的我幾乎無法想像那種每次都要重印零件的痛苦。
現實如同真理般,給予和狂妄自負的傢伙相對應的絕望,對於沒有準備好的人毫不留情。
你不能現在就放棄,要是現在就放棄的話,你這輩子日後遇到這種等級的困難,就只會想逃避而已。
你該學習的不是看到事情要完蛋了就去避免失敗,而是應該學習如何處理與承受失敗,你才能變得比以前更強大。
這幾句話完全命中我從之前開始做專案,到這學期在閱讀課程教材時的心態、也把我打醒。難道我每次看到這種等級的困難就要逃嗎?這樣我一輩子遇到這種困難時都解決不了。我發現我似乎一直處在「愚昧之峰」、因為「積極避免失敗」而充滿自信。最近才開始發現資工的世界中,事情遠遠沒有那麼簡單。
我們將秤冰塊的機構固定好後,將其傾斜,希望落入的冰塊會從尾端開始堆積。另外擋板可以避免冰塊超出支點,接下來,由我負責檢驗該設計下冰塊和荷重元產生的訊號是否有正比關係,誤差是否在可接受的範圍內。於是我便重複「加冰塊、倒冰塊、測量訊號、紀錄」,做了超過480次。
統計學真的在這裡用上了,完全沒想過這些知識竟然會被用在量冰塊上…
但我經手了這台機器的每一個細節、我知道每一個零件存在的理由、每一個設計背後做出的取捨,我比任何人都清楚這台機器還有多少問題,茶垢可能會卡在接頭的縫隙、冰塊的定量機構絕對還能再改進、管線過脆容易折斷……我可以列出上百個問題,機器現在能做到的每一件事,都是用一次次試誤換來的取捨。
好像能稍微理解「自幹」的浪漫。我們在開發應用層軟體時,常常使用別人開發好的框架,我所做的也只是利用這個框架去客製化自己的需求。特別是在 ChatGPT 這麼強的世代,解決簡單的問題常常已經不需要了解造成的原因、不需要實驗;只需要詢問、然後照他說的做。開發過很多應用,我到現在仍無法自信的說,我理解過程所使用到的那些工具、我理解 de 過的每個 bug 的解決關鍵。像是我長了很多虛肌肉,結果的成品看起來令人滿意,但走到終點的過程很是心虛。
這學期的期末專題,我被分配到了「從無到有打造 container」。收到這個題目時,雖然沒辦法在短時間內達成想要貢獻的期許,但心中莫名的踏實。我相信只有從最底部了解每個細節、每種機制存在的理由與取捨,才能把所學變成自己真正擁有的。
我覺得我到目前為止的作業完成度不好。
在第一、第二周時,都稍微還能跟得上,每天上課完就讀教材、寫作業,一天可以花 13 小時在寫作業,因為想要把這些事情快點做完,才能放下心中的重負。
作業的要求看起來很多,而學期初的我很討厭有一大坨事情 pending 還沒被處理的感覺;我想可能是因為責任感的驅使,我會因而覺得很煩躁。所以到後來作業的要求越積越多,我嘗試做的事情是把所有題目稍微看過一遍、每樣題目要求做一點點,然後開始在 hackmd 寫一堆字、貼程式碼;看著滿滿整頁的 hackmd,有時候還會產生一些透過偽努力產生的成就感。
過了五、六周,我心裡面的罪惡感開始萌芽,甚至有些想退選、放棄的念頭。因為我發現,隨著新的作業不斷發出來、事情做不完,我想「早點完事」的心態沒有盡頭;就算真的按下了繳交鍵,心中也不踏實:因為回頭看自己寫的東西,我沒辦法自信地說出我學會了些什麼。但最近稍微想開了一點,因為以前的自己沒遇過這種等級的困難,所以才不習慣掙扎。現在遇到了、開始感覺到痛苦了,我想這是大腦有在發育的證明,是一種成長痛。
在看了幾位同學的作業還有課堂討論後,我發現有些人會選擇針對一個議題作深入的研究:例如 lab0-c
中針對 queue.c
的函式實作,還會加上計時、繪圖等量化分析,透過科學的方法來驗證想法是正確的。
看了這些別人的成果,總覺得這樣的產出才是自己想要的,為了交差而交差實際上對我一點幫助也沒有。我打算從這之後開始,選擇慢慢的把每個題目做深、詳細理解。放慢腳步,慢慢走一定會走到終點。
vax-r
同學使用 ML 分析 CPU 排程策略的報告覺得很有趣、數據分析也很清楚,讓我也想做一些使用 ML 協助 kernel 分析效能的題目,包含但不限於 CPU scheduling。ItisCaleb
同學去年做的「透過 Netfilter 自動過濾廣告」我覺得很酷,也很貼近我們的日常生活需求(不想看廣告)dev/
讀取輸入,而是讀取 HID 層,所以光寫 device driver 模擬輸出可能無效。(更膚淺、現實一點,這在履歷上是一大亮點,為了賺錢)