Try   HackMD

我還很菜,能學 design pattern 嗎?

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

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

可是,問題來了

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

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

可能你會覺得就這樣?對,就是這樣。

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

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

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

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

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

小總結,個人認為學習順序應該是:

物件導向 > SOLID > design pattern

可是,我真的很菜真的能學會嗎

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

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

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

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

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

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

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