從零開始學 JavaScript 設計模式:學習藍圖
學習動機
離開上一份工程經理的工作後,我開始回頭檢視自己一路以來的經驗。
我發現自己常在技術溝通中碰到一堵牆:當討論深入到某個層次,我就會因為理解不足而無法順暢接話,感覺自己被隔絕在對話的核心之外。
- 對資深工程師來說,他們習慣用「設計模式」當共通語言。但我對設計模式的認識一直停留在「名字聽過」的程度,從來沒有真正理解過,自然很難跟上他們的討論。
- 對新手工程師來說,我雖然能用白話說明一些概念,但卻給不出關鍵字,讓他們沒辦法自己延伸查找或深入理解。
久而久之,我覺得自己被困在一個不上不下的狀態:懂得不夠深,講得也不夠準。
所以趁著這段職涯休息期,我想把這個缺口補起來。我的目標是,把模糊的「一個紅色圓圓的東西」講成「Apple」這麼精準。因為只有講得夠準,大家才會知道我指的是什麼,而不是有人想到番茄、有人想到櫻桃,各自腦補不同東西。未來,不管是和資深同事討論,還是帶新人,我都能成為一座順暢的橋樑。
學習目標
這次的學習,不想只是背模式名稱,我更想抓到整個思考脈絡:
- 這個模式解決什麼問題?
- 如果不用它,程式碼可能出現哪些「壞味道」(指那些預示著潛在問題的警訊)?
- 在前端開發裡,通常會在哪些情境看到它?
對外,我希望能:
- 跟資深同事用專業語言快速對齊,討論起來更有效率。
- 跟新手同事用白話解釋,再帶他們認識專業名詞,幫助他們接上更多資源。
對內,我希望自己能更快抓到問題核心,並挑出適合的解法。
學習材料
主要教材會用 《Learning JavaScript Design Patterns, 2nd Edition》 的英文電子書。
我一開始先買的是中文版《JavaScript 設計模式學習手冊 第二版》,結果沒多久就讀不下去。不是因為內容太難,而是翻譯讀起來很彆扭、不自然,常常打斷我的思緒,看得特別吃力。
後來乾脆改買原文電子書,才發現英文其實很直白,讀起來順很多,也更容易抓到作者的意思。雖然我的英文閱讀速度不快,但搭配翻譯工具就能補上,整體體驗比中文版好太多。
例如這句這是我遇到的一段翻譯,中文讀起來非常拗口:
中譯本
模式鼓勵您自然地編寫更加結構化和有條理的程式碼,避免為了整潔而必須重構它的這種需求。
看到這裡我滿頭問號,因為意思其實很單純。對照原文就清楚了:
原文
The pattern encourages you to write more structured and organized code naturally, avoiding the need to refactor it for cleanliness in the future.
換個更直白的翻法,大概就是:
模式鼓勵你一開始就自然地寫出結構清晰、有條理的程式碼,避免將來還得為了整潔再去重構。
像這樣的翻譯差異,讀久了會讓人分心。這也是為什麼我最後決定改用原文電子書(Google Play Books),並搭配「沉浸式翻譯」工具來閱讀的原因。
學習策略:五步卡片法
我的做法是「學了就要輸出」。每學到一個模式,就整理成一張卡片,裡面會有這五個面向:
- 問題來源:它要解決什麼痛點?
- 白話描述 (給新手):怎麼用最簡單的比喻講給新手聽?
- 專業術語(給資深):標準定義是什麼?怎麼用這個關鍵字和專業人士對齊?
- 視覺化(UML 類圖):畫 UML,把抽象結構轉成圖像。
- 程式碼與適用情境:實際寫一小段範例,並思考它適合/不適合用在哪些情境。
學習藍圖
我會照著書裡的章節規劃一條路線,但不會逼自己照進度跑。比較像是一張地圖,需要時可以回頭檢查,或直接跳到想補強的部分。
基礎概念(第 1-6 章)
設計模式簡介、反模式、現代 JS 語法 (ES6+)、設計模式分類。
核心模式(第 7 章精選)
Constructor、Prototype、Module、Singleton、Factory、Decorator、Observer。
進階模式(第 7 章其他模式)
Facade、Mixin、Command、Mediator、Flyweight。
前端架構模式(第 8、10-11 章)
MVC / MVP / MVVM、模組化 JS、命名空間。
非同步模式(第 9 章)
Promise、async/await、Observable。
React 設計模式與渲染(第 12-14 章)
Hooks、HOC、CSR / SSR / Islands。
總結與回顧(第 15 章 + 自我回顧)
把所有學到的模式整理成自己的知識地圖。
結語
這份藍圖對我來說,不只是學點新東西,也是一次重新整理自己的機會。以前我總覺得自己像個翻譯機,但有時候翻得不夠順;現在想試著把專業術語和白話之間的落差慢慢補起來。
也許學完之後,我能在團隊裡找到更舒服的位置 —— 跟資深工程師聊天時不會那麼緊張,帶新人時也能給出更有用的方向。