---
# System prepended metadata

title: 我能學 design pattern 嗎？
tags: [' Design Pattern', mentorship]

---

---
title: 我能學 design pattern 嗎？
tags: mentorship, Design Pattern
description: 2019/10/06
---


# 我還很菜，能學 design pattern 嗎？

看完上一篇《為什麼要學 design pattern?》，你可能會磨拳擦掌打算把設計模式學起來，當你開始學之後你也許會覺得哇為什麼這麼難？這時你去請教別人，一定會有人跟你說「**你應該先把基本的學好再來學設計模式**」。

的確，設計模式不是給新手學的，因為它需要有一定的知識基礎才能看得懂。

### 可是，問題來了

其他人口中的「先把基本的學好」中的「基本」是什麼呢？又要學到多好呢？這個好像有點難定義。

我認為**會物件導向和五項基本原則 SOLID，加上寫出一個專案就可以開始學設計模式了**。

可能你會覺得就這樣？對，就是這樣。

因為設計模式基本上只是五項原則的延伸，不用非常精通 SOLID 才能學設計模式，稍微理解 SOLID 原則就可以開始，重點是要一邊學設計模式，一邊從設計模式中印證和加深自己對 SOLID 的理解。

我自己學設計模式之前完全不知道有 SOLID 的存在，開始學了以後才發現 oh no 原來有這五個原則，自己馬上惡補一下就開始學設計模式，那時候沒有很了解 SOLID，所以筆記也沒有寫得很好，真正學習設計模式時才更理解 SOLID ，因為 SOLID 離我們的生活經驗太遠了，不太好理解，當看到程式碼反而比較好理解，會有種「原來 xx 是這樣的一個原則啊」的感悟。

**實作永遠是最好的學習模式。**

當你有一個完整專案就可以嘗試用設計模式去重構你的程式碼。但重構的時候要知道為什麼要用、思考用了模式跟不用模式的差別是什麼，檢示是否合適，這樣才能把學習效果最大化。

我認為最難的是要檢視自己所套用的模式是不是適合。剛剛開始時，你會覺得我這邊好像可以用xx模式，但你自己根本不知道對不對，我自己的處理方式是先用看看，看一下適不適合，或是跟別人一起討論，別人通常都會看到自己的盲點，也能糾正一些錯誤的觀念，真理永遠都是越辯越明，所以也不用怕跟人表達你還沒有很了解的觀念。

小總結，個人認為學習順序應該是：
> 物件導向 > SOLID > design pattern

### 可是，我真的很菜真的能學會嗎...

我認為世界上沒有學不會的東西，只有想不想學的東西。我很明白那種自己好像什麼都不會的感覺，學習設計模式的時候會有一種五大原則其實沒有很懂，每一個名詞對自己來說都是一個全新的概念的感覺，但這很正常，只要**你夠想學，堅持下去總有一天會學懂**。

而且啊，我覺得「很菜」有兩種：「自己覺得自己很菜」，「別人覺得你很菜」。但不論那一種，你應該都應該要誠實面對自己、檢視自己的程度，如果物件導向和五大原則你都會了，第一種「菜」可能只是你一個不想跳出舒適圈的藉口，學了才會開始「會」，如果因為「不會」而不學永遠也不可能學會。

學一個新技術從來都不容易，尤其是當覺沒有設計模式也是可以完成功能的時候，就看你自己想要走多遠。第二種「菜」就不用管了，只有你自己才最了解自己，重點是你自己想不想學。

「想學永遠都能找到方法，不想學永遠都找到藉口」

我自己是蠻支持學習設計模式的，一來可以檢視自己所學，二來可以學習前人 coding 的技巧。但切記，設計模式不是仙丹，不是用了設計模式就一定是好的，還是要看需求而用，我認為**沒有最好的設計模式，只有最適合的設計模式，這也是學習設計模式最困難的地方**，他需要累積大量的經驗才能學好，所以不用急於一時，慢慢按着自己的步伐學習就好。

以上只是個人經驗分享，什麼時候開始學設計模式還是要看你自己，別人說的話隨便聽一聽，自己做決定。

>「如果這世界上真有奇蹟，那只是努力的另一個名字。生命中最難的階段不是沒有人懂你，而是你不懂你自己。」-尼采
