從零開始學 JavaScript 設計模式:學習藍圖

· ·7 min

學習動機

離開上一份工程經理的工作後,我開始回頭檢視自己一路以來的經驗。

我發現自己常在技術溝通中碰到一堵牆:當討論深入到某個層次,我就會因為理解不足而無法順暢接話,感覺自己被隔絕在對話的核心之外。

  • 資深工程師來說,他們習慣用「設計模式」當共通語言。但我對設計模式的認識一直停留在「名字聽過」的程度,從來沒有真正理解過,自然很難跟上他們的討論。
  • 新手工程師來說,我雖然能用白話說明一些概念,但卻給不出關鍵字,讓他們沒辦法自己延伸查找或深入理解。

久而久之,我覺得自己被困在一個不上不下的狀態:懂得不夠深,講得也不夠準

所以趁著這段職涯休息期,我想把這個缺口補起來。我的目標是,把模糊的「一個紅色圓圓的東西」講成「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),並搭配「沉浸式翻譯」工具來閱讀的原因。

學習策略:五步卡片法

我的做法是「學了就要輸出」。每學到一個模式,就整理成一張卡片,裡面會有這五個面向:

  1. 問題來源:它要解決什麼痛點?
  2. 白話描述 (給新手):怎麼用最簡單的比喻講給新手聽?
  3. 專業術語(給資深):標準定義是什麼?怎麼用這個關鍵字和專業人士對齊?
  4. 視覺化(UML 類圖):畫 UML,把抽象結構轉成圖像。
  5. 程式碼與適用情境:實際寫一小段範例,並思考它適合/不適合用在哪些情境。

學習藍圖

我會照著書裡的章節規劃一條路線,但不會逼自己照進度跑。比較像是一張地圖,需要時可以回頭檢查,或直接跳到想補強的部分。

  1. 基礎概念(第 1-6 章)

    設計模式簡介、反模式、現代 JS 語法 (ES6+)、設計模式分類。

  2. 核心模式(第 7 章精選)

    Constructor、Prototype、Module、Singleton、Factory、Decorator、Observer。

  3. 進階模式(第 7 章其他模式)

    Facade、Mixin、Command、Mediator、Flyweight。

  4. 前端架構模式(第 8、10-11 章)

    MVC / MVP / MVVM、模組化 JS、命名空間。

  5. 非同步模式(第 9 章)

    Promise、async/await、Observable。

  6. React 設計模式與渲染(第 12-14 章)

    Hooks、HOC、CSR / SSR / Islands。

  7. 總結與回顧(第 15 章 + 自我回顧)

    把所有學到的模式整理成自己的知識地圖。

結語

這份藍圖對我來說,不只是學點新東西,也是一次重新整理自己的機會。以前我總覺得自己像個翻譯機,但有時候翻得不夠順;現在想試著把專業術語和白話之間的落差慢慢補起來。

也許學完之後,我能在團隊裡找到更舒服的位置 —— 跟資深工程師聊天時不會那麼緊張,帶新人時也能給出更有用的方向。

感謝你讀到這裡!如果我的分享讓你有所共鳴或啟發,歡迎請我喝杯珍奶 🧋,給我一點繼續分享的能量: https://anna.bobaboba.me