《設計模式之美》 <01>為什么需要學習掌握設計模式?


1. 應對面試中的設計模式相關問

題學習設計模式和算法一樣,最功利、最直接的目的,可能就是應對面試了。不管你是前端工程師、后端工程師,還是全棧工程師,在求職面試中,設計模式問題是被問得頻率比較高的一類問題。特別是一些像 BAT、TMD 這樣的大公司,比較重視候選人的基本功,經常會拿算法、設計模式之類的問題來考察候選人。

 

2. 告別寫被人吐槽的爛代碼

我們經常說,“Talk is cheap,show me the code。”實際上,代碼能力是一個程序員最基礎的能力,是基本功,是展示一個程序員基礎素養的最直接的衡量標准。你寫的代碼,實際上就是你名片。

 

3. 提高復雜代碼的設計和開發能力

大部分工程師比較熟悉的都是編程語言、工具、框架這些東西,因為每天的工作就是在框架里根據業務需求,填充代碼。面對稍微復雜的代碼設計和開發,不知從何下手了。只是完成功能、代碼能用,可能並不復雜,但是要想寫出易擴展、易用、易維護的代碼,並不容易。如何分層、分模塊?應該怎么划分類?每個類應該具有哪些屬性、方法?怎么設計類之間的交互?該用繼承還是組合?該使用接口還是抽象類?怎樣做到解耦、高內聚低耦合?該用單例模式還是靜態方法?用工廠模式創建對象還是直接 new 出來?如何避免引入設計模式提高擴展性的同時帶來的降低可讀性問題?……各種問題都需要考慮到

 

4. 讓讀源碼、學框架事半功倍

對於一個有追求的程序員來說,對技術的積累,既要有廣度,也要有深度。很多技術人早早就意識到了這一點,所以在學習框架、中間件的時候,都會抽空去研究研究原理,讀一讀源碼,希望能在深度上有所積累,而不只是略知皮毛,會用而已。

從我的經驗和同事的反饋來看,有些人看源碼的時候,經常會遇到看不懂、看不下去的問題。不知道你有沒有遇到過這種情況?實際上,這個問題的原因很簡單,那就是你積累的基本功還不夠,你的能力還不足以看懂這些代碼。為什么我會這么說呢?

優秀的開源項目、框架、中間件,代碼量、類的個數都會比較多,類結構、類之間的關系極其復雜,常常調用來調用去。所以,為了保證代碼的擴展性、靈活性、可維護性等,代碼中會使用到很多設計模式、設計原則或者設計思想。如果你不懂這些設計模式、原則、思想,在看代碼的時候,你可能就會琢磨不透作者的設計思路,對於一些很明顯的設計思路,你可能要花費很多時間才能參悟。相反,如果你對設計模式、原則、思想非常了解,一眼就能參透作者的設計思路、設計初衷,很快就可以把腦容量釋放出來,重點思考其他問題,代碼讀起來就會變得輕松了。

實際上,除了看不懂、看不下去的問題,還有一個隱藏的問題,你可能自己都發現不了,那就是你自己覺得看懂了,實際上,里面的精髓你並沒有 get 到多少!因為優秀的開源項目、框架、中間件,就像一個集各種高精尖技術在一起的戰斗機。如果你想剖析它的原理、學習它的技術,而你沒有積累深厚的基本功,就算把這台戰斗機擺在你面前,你也不能完全參透它的精髓,只是了解個皮毛,看個熱鬧而已。

因此,學好設計模式相關的知識,不僅能讓你更輕松地讀懂開源項目,還能更深入地參透里面的技術精髓,做到事半功倍。

 

5. 為你的職場發展做鋪墊

普通的、低級別的開發工程師,只需要把框架、開發工具、編程語言用熟練,再做幾個項目練練手,基本上就能應付平時的開發工作了。但是,如果你不想一輩子做一個低級的碼農,想成長為技術專家、大牛、技術 leader,希望在職場有更高的成就、更好的發展,那就要重視基本功的訓練、基礎知識的積累。

你去看大牛寫的代碼,或者優秀的開源項目,代碼寫得都非常的優美,質量都很高。如果你只是框架用得很溜,架構聊得頭頭是道,但寫出來的代碼很爛,讓人一眼就能看出很多不合理的、可以改進的地方,那你永遠都成不了別人心目中的“技術大牛”。再者,在技術這條職場道路上,當成長到一定階段之后,你勢必要承擔一些指導培養初級員工、新人,以及 code review 的工作。這個時候,如果你自己都對“什么是好的代碼?如何寫出好的代碼?”不了解,那又該如何指導別人,如何讓人家信服呢?

還有,如果你是一個技術 leader,負責一個項目整體的開發工作,你就需要為開發進度、開發效率和項目質量負責。你也不希望團隊堆砌垃圾代碼,讓整個項目無法維護,添加、修改一個功能都要費老大勁,最終拉低整個團隊的開發效率吧?

除此之外,代碼質量低還會導致線上 bug 頻發,排查困難。整個團隊都陷在成天修改無意義的低級 bug、在爛代碼中添補丁的事情中。而一個設計良好、易維護的系統,可以解放我們的時間,讓我們做些更加有意義、更能提高自己和團隊能力的事情。

最后,當你成為 leader、或者團隊中的資深工程師、技術專家之后,你勢必要負責一部分團隊的招聘工作。這個時候,如果你要考察候選人的設計能力、代碼能力,那設計模式相關的問題便是一個很好的考察點。

 

 

 

注: 本文出自極客時間(設計模式之美),請大家多多支持王爭老師。如有侵權,請及時告知。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM