- Published on
簡單紀錄 2024 iThome 鐵人賽完賽心得
- Authors
- Name
- CK Chuang
- @codefarmer.tw
![yufy mountain](/_next/image?url=%2Fblog%2Fironman-2024%2Fyufu.jpg&w=1200&q=75)
攝於由布岳旁的田園小路,2024.10.09
最後還是想不開參加了今年的 IT 鐵人賽,這是一個需要連續三十天發表技術文章的比賽。 以下也分別記錄下 Day1 開賽時的選題動機、Day30 完賽心得,以及現在整理後的一些後記。
選題動機 (2024-09-15)
關於主題其實在開賽前幾個月前有各種想法:
- 網頁前端系統設計
- 你就是那條龍:做一個全端健身紀錄 App
- 那些我曾想搞懂的網頁開發知識大補帖
這三個主題寫起來應該都蠻有趣的,其實前兩個對我來說是更能掌握的主題,但最後卻是在開賽前一天洗澡時突然有個靈感,不如就來研究第三個主題中的 bundler 好了,如果研究有成可能有機會完成「向某個 Rust-based bundler 發 PR」這樣遠大的目標。
會想寫這個主題是因為近幾年看到許多前端工具都從 Javascript/TypeScript 被 Rust 化,而今年初時其實曾寫過一個關於 Tree shaking 的系列文,其中有個缺憾是草稿與筆記中一直有一塊想來寫寫近代 bundler 的研究,但沒想到這個 WIP 就像是程式碼中的 TODO
一樣,大多如果你 git blame
下去可能都是好幾年前的 commit,空有想法不執行最後終究只是觀眾,不如就趁今年鐵人賽的機會來推進一下。
另外上個月剛好也看到 Rspack 1.0 正式發佈的消息,一直知道這是個由 ByteDance Infra team 開發的 Rust-based bundler,仔細一看才發現原來它其中一個特性是能做到兼容 Webpack,好像也蠻值得來實際研究看看的,如果有機會幫到目前團隊或正打算做大型專案中的 Webpack 遷移的開發者們實是好事一件。
理想很遠大,但現實是骨感的,沒存稿的狀況下之後忙起來不知道能不能持之以恆,但或許這就是參加鐵人賽之所以有挑戰的一個原因。另外還有個預防針是其實我完全沒寫過任何一行 Rust 程式,說不定中途還會出現一些必須弄懂才能繼續前進的 Rust 學習筆記,但就先且戰且走了,寫一篇是一篇。
完賽心得 (2024-10-14)
其實我幾年前也參加過 3 屆的鐵人賽,但不得不說這次是最硬也最曲折的一次。
先說說整個系列文最難的部份是前面幾天的前情提要,發現有許多我大概理解,但真的要講的淺顯易懂不知為何總是刪刪改改,也看了不少 JS 模組化、webpack 的經典文章,總覺得「這些東西是不是其實不需要再寫了」因而寫起來不夠順暢,總覺得寫了的話可能也沒辦法超越,看起來也像是模仿。但後來想想其實我也不需要超越,就只是用我理解的話去整理脈絡,可能總有人看了十幾篇文章後與我這篇對頻就有一些幫助,更甚至沒人看也罷,秉持著「為你自己學」的這個概念,學習筆記有輸出就是有學會一些東西,筆記終究是寫給自己看,就不用想太多了。
而這次因為是臨時一股衝動壓線參賽,在無存稿的狀況下每天趕稿,就連後面幾天剛好人在日本獨旅中,原本樂觀地認為可以趕在出國前把 30 篇完成,但果然還是太高估自己的能耐,或說其實也是自己不想以能應付了事的內容勉強達標就好的緣故吧。所以旅遊的前幾天都是吃完午餐就得找咖啡廳寫一些內容、甚至中間轉車時利用一些空檔做收尾等,也算是微體驗所謂的數位遊牧是怎麼一回事,親身體驗到了那種「雖然想繼續在這個景點逛下去,但得先完成工作」、「現在沒有工作的心情,那不如先去看看風景晚上再來用咖啡因趕工吧」這些經驗。
![publish post on the train](/_next/image?url=%2Fblog%2Fironman-2024%2Ftrain.jpg&w=1200&q=75)
有時候甚至會利用搭長途火車的時間發個文
而原以為照著這樣的節奏可以順利完賽,但人生就是這個 BUT。
一直到 Day27 當天出了些小意外,一早去海邊看日出時不慎滑倒右手就這樣去急診縫了十幾針,救護車上還在想「鐵人賽什麼的應該也不重要了吧,健康要緊」。但好在後來當天狀況比較穩定後,還是勉強用左手完成了當天的文章 (誰說左手只是輔助)。
隨著恢復越來越好現在寫第 30 篇時已經能用上九隻手指頭了,所以才能寫這麼長一篇 😅,對我自己來說可以說是最鐵人的一次了吧,而今天寫完這篇後也終於可以把筆電放在飯店安心旅遊了。順帶一提真心建議獨旅時不管怎樣都要保個保險,關於這次獨旅的心得可能之後沒有冨樫再來另外寫篇文章記錄下吧。
最後最首要感謝的就是我的女友,包容我這樣任性地壓線參賽每天趕稿,希望在這三十天無存稿的試煉後,除了深刻體驗到事前規劃的重要性之外,我們也終於可以一起無憂無慮地一次把黑白大廚給追完了。
另外也感謝在 IG、Threads 上打卡時,偶爾會收到來自大家的不論是回饋、討論、溫暖的支持、同為水深火熱的戰友的互相打氣;也感謝過去寫過關於這系列中文文章的前人們,讓我能搭配著做為參考資料交叉理解。
在研究 Vite 的原始碼的過程中,首推去年鐵人賽由菜市場阿龍錄製的這一系列《Vite 原始碼解讀》教學影片,在兩三天內用 1.5 倍速一口氣看完全系列,也讓我回憶起以前大學在期末考前用 2 倍速惡補預錄課程的美好過去。另外他的《為你自己學 Rust》也是比起官方的 The book 用更有脈絡的初學角度敘述非常好讀,在看的過程中都懷疑他去年是不是其實原本打算實作一套 Rust 版的 bundler 所以才會有雙開這樣的主題。
![some joke to compare netflix and teaching series by Kao](/_next/image?url=%2Fblog%2Fironman-2024%2Fmeme.png&w=1200&q=75)
幕後花絮之在寫 Day12 時突發奇想的梗圖
總結
說實在的在寫這個系列的過程中,有時候會懷疑我學這個做什麼?為什麼要鑽那麼深?因為其實每過幾年新技術、工具就會推陳出新,但當原本當紅的技術相對過時,身為開發者的我來說能留下的是什麼?我目前想到最好的答案應該是在「Learning How to Learn」吧。
面對不斷更替的新工具、新語言,如果都能有這樣的 flow 對我而言是個不錯的學習系統:
- 實際弄髒手去寫一個 hello world
- 照著官方文件去實作一些簡單專案
- 實驗一些有疑問的問題去 debug
- 過程中善用 AI 工具幫忙釐清觀念並回頭查文件驗證
- 最後再去參考文件把專有名詞與觀念補上
- 心有餘力能深入追原始碼理解原理
- 甚至能在遇到 tricky issue 時對開源專案發 PR
久而久之就能建立一個適合自己的學習系統,之後學類似的工具或語言也會快上不少。
![learn memory architecture at hotel](/_next/image?url=%2Fblog%2Fironman-2024%2Flearn_memory.jpg&w=1200&q=75)
在寫 Rust 所有權文章時利用晚餐時間學習
就像這系列中間有花了些時間去追 Vite 原始碼,過程中也透過一些實驗應證工具的效能與瓶頸,後來再去看另一套類似的 Rsbuild 的原始碼時,看起來也是相當親切,因為概念上大同小異只是底層用上了 Rust 而已。
或像最後的 Rust 初學,在寫完前面 20 多篇時,我其實一行 Rust 都還沒寫過。但最後循著許多入門教材、官方教學手冊、穿插著影片教學,最後竟然還能學到把記憶體架構跟所有權系統整理出一個初步的樣子,雖然尚稱不上完美,但至少是一個開始。
廢話不小心太多了,該去門司港吃燒咖哩不然等等又要準備吃 7-11 了,這個系列文就在這劃下一個完美的句點,希望這個系列有讓看到這邊的你多少有一些收穫。有想要做更多討論與交流的讀者們歡迎到 IG 上可以更即時聯絡到我,也感謝你的閱讀!
2024-11-27 後記
最近抽空也把鐵人賽系列文章重新編排後整理到個人部落格上了,有興趣的讀者也歡迎參考以下兩個主題系列更容易閱讀:
另外開賽時提到的 向某個 Rust-based bundler 發 PR 這個目標,雖然在 30 天後沒達成,但在追 Vite 原始碼的過程中剛好看到一個蠻 minor 的 typo,所以有試著參考貢獻文件發了一個 PR,算是開發這麼久以來的一個參與開源的初體驗。
雖然微不足道,但不知為何看到被 merge 時心情還是蠻激動的,希望未來幾年後某一天可以繼續秉持著研究的熱忱把有興趣的工具原始碼讀懂後,能發出改善邏輯甚至新增功能的 PR。
新東西玩夠了,之後短期的目標想回頭加強一下自己不足的基本知識,像是後端與容器相關的知識,以及多研究一些系統設計相關的主題,還有很長一段路要走呀!