很多程序員都已經(jīng)意識到基礎(chǔ)知識的重要性,覺得要夯實基礎(chǔ)每币,才能走得更遠(yuǎn)携丁,但同時對于如何將基礎(chǔ)知識轉(zhuǎn)化成開發(fā)“生產(chǎn)力”仍然有些疑惑
- 所以,你可能看了很多基礎(chǔ)的書籍兰怠,比如操作系統(tǒng)梦鉴、組成原理、編譯原理等揭保,但還是覺得很迷茫肥橙,覺得在開發(fā)中用不上,起碼在平時的 CRUD 業(yè)務(wù)開發(fā)中用不上
- 實際上秸侣,這些基礎(chǔ)的知識確實很難直接轉(zhuǎn)化成開發(fā)“生產(chǎn)力”存筏。但是,它能潛移默化地味榛、間接地提高你對技術(shù)的理解
不過椭坚,設(shè)計模式和操作系統(tǒng)、組成原理搏色、編譯原理等這些基礎(chǔ)學(xué)科是不一樣的善茎。
- 它雖然也算是一門基礎(chǔ)知識,但是它和數(shù)據(jù)結(jié)構(gòu)频轿、算法更像是一道兒的垂涯,相比那些更加基礎(chǔ)的學(xué)科,設(shè)計模式能更直接地提高你的開發(fā)能力航邢。
- 如果說數(shù)據(jù)結(jié)構(gòu)和算法是教你如何寫出高效代碼耕赘,那設(shè)計模式講的是如何寫出可擴(kuò)展、可讀膳殷、可維護(hù)的高質(zhì)量代碼操骡,所以,它們跟平時的編碼會有直接的關(guān)系,也會直接影響到你的開發(fā)能力当娱。
不過吃既,你可能還是會覺得設(shè)計模式是把屠龍刀,看起來很厲害跨细,但平時的開發(fā)根本用不上鹦倚。基于這種觀點冀惭,接下來冰抢,我們就具體地聊一聊可柿,我們?yōu)槭裁匆獙W(xué)習(xí)設(shè)計模式浦徊?
1. 應(yīng)對面試
- 不管你是前端工程師园匹、后端工程師,還是全棧工程師戚丸,在求職面試中划址,設(shè)計模式問題是被問得頻率比較高的一類問題。特別是一些像 BAT限府、TMD 這樣的大公司夺颤,比較重視候選人的基本功,經(jīng)常會拿算法胁勺、設(shè)計模式之類的問題來考察候選人
- 系統(tǒng)學(xué)習(xí)設(shè)計模式之后世澜,后面只需要花很少時間就能溫故設(shè)計模式相關(guān)知識,起到事半功倍的效果署穗,避免面試吃癟
2. 告別寫出爛代碼
- 我們經(jīng)常說寥裂,“Talk is cheap,show me the code案疲》馇。”實際上,代碼能力是一個程序員最基礎(chǔ)的能力褐啡,是基本功俭驮,是展示一個程序員基礎(chǔ)素養(yǎng)的最直接的衡量標(biāo)準(zhǔn)。你寫的代碼春贸,實際上就是你名片
- 工作過程中大家都見過甚至寫過爛代碼,比如命名不規(guī)范遗遵、類設(shè)計不合理萍恕、分層不清晰、沒有模塊化概念车要、代碼結(jié)構(gòu)混亂允粤、高度耦合等等。這樣的代碼維護(hù)起來非常費勁,添加或者修改一個功能类垫,常常會牽一發(fā)而動全身司光,讓你無從下手,恨不得將全部的代碼刪掉重寫悉患!
- 另外残家,如果你看到了高質(zhì)量的代碼,會立刻對作者產(chǎn)生無比的好感和認(rèn)可售躁。且不管這個人處在公司的何種級別坞淮,從代碼就能看出,他是一個基礎(chǔ)扎實的高潛員工陪捷,值得培養(yǎng)回窘,前途無量!因此市袖,代碼寫得好啡直,能讓你在團(tuán)隊中脫穎而出
3. 提高復(fù)雜代碼的設(shè)計和開發(fā)能力
- 大部分工程師比較熟悉的都是編程語言、工具苍碟、框架這些東西酒觅,因為每天的工作就是在框架里根據(jù)業(yè)務(wù)需求,填充代碼驰怎。這樣的工作并不需要你具備很強(qiáng)的代碼設(shè)計能力阐滩,只要單純地能理解業(yè)務(wù),翻譯成代碼就可以了
- 但是县忌,面對編寫業(yè)務(wù)無關(guān)的通用功能模塊掂榔,這樣稍微復(fù)雜的代碼設(shè)計和開發(fā),可能會出現(xiàn)不知從何下手的情況症杏。因為我們知道只是完成功能装获、代碼能用,可能并不復(fù)雜厉颤,但是要想寫出易擴(kuò)展穴豫、易用、易維護(hù)的代碼逼友,并不容易
- 如何分層精肃、分模塊?應(yīng)該怎么劃分類帜乞?每個類應(yīng)該具有哪些屬性司抱、方法?怎么設(shè)計類之間的交互黎烈?該用繼承還是組合习柠?該使用接口還是抽象類匀谣?怎樣做到解耦、高內(nèi)聚低耦合资溃?該用單例模式還是靜態(tài)方法武翎?用工廠模式創(chuàng)建對象還是直接 new 出來?如何避免引入設(shè)計模式提高擴(kuò)展性的同時帶來的降低可讀性問題溶锭?
- 面對復(fù)雜代碼宝恶、功能、系統(tǒng)的設(shè)計和開發(fā)暖途,如果你掌握了設(shè)計模式相關(guān)方法卑惜,相信面對這些功能實現(xiàn)會越來越得心應(yīng)手,游刃有余驻售。寫出高質(zhì)量代碼慢慢會成為一種習(xí)慣
4. 讓讀源碼露久、學(xué)框架事半功倍
- 對于一個有追求的程序員來說,對技術(shù)的積累欺栗,既要有廣度毫痕,也要有深度。很多技術(shù)人早早就意識到了這一點迟几,所以在學(xué)習(xí)框架消请、中間件的時候,都會抽空去研究研究原理类腮,讀一讀源碼臊泰,希望能在深度上有所積累,而不只是略知皮毛蚜枢,會用而已
- 有些人看源碼的時候缸逃,經(jīng)常會遇到看不懂、看不下去的問題厂抽。不知道你有沒有遇到過這種情況需频?實際上,這個問題的原因很簡單筷凤,那就是你積累的基本功還不夠昭殉,你的能力還不足以看懂這些代碼。
- 優(yōu)秀的開源項目藐守、框架挪丢、中間件,代碼量卢厂、類的個數(shù)都會比較多吃靠,類結(jié)構(gòu)、類之間的關(guān)系極其復(fù)雜足淆,常常調(diào)用來調(diào)用去巢块。所以,為了保證代碼的擴(kuò)展性巧号、靈活性族奢、可維護(hù)性等,代碼中會使用到很多設(shè)計模式丹鸿、設(shè)計原則或者設(shè)計思想越走。如果你不懂這些設(shè)計模式、原則靠欢、思想廊敌,在看代碼的時候,你可能就會琢磨不透作者的設(shè)計思路门怪,對于一些很明顯的設(shè)計思路骡澈,你可能要花費很多時間才能參悟。相反掷空,如果你對設(shè)計模式肋殴、原則、思想非常了解坦弟,一眼就能參透作者的設(shè)計思路护锤、設(shè)計初衷,很快就可以把腦容量釋放出來酿傍,重點思考其他問題烙懦,代碼讀起來就會變得輕松了
- 實際上,除了看不懂赤炒、看不下去的問題氯析,還有一個隱藏的問題,你可能自己都發(fā)現(xiàn)不了可霎,那就是你自己覺得看懂了魄鸦,實際上,里面的精髓你并沒有 get 到多少癣朗!因為優(yōu)秀的開源項目拾因、框架、中間件旷余,就像一個集各種高精尖技術(shù)在一起的戰(zhàn)斗機(jī)绢记。如果你想剖析它的原理、學(xué)習(xí)它的技術(shù)正卧,而你沒有積累深厚的基本功蠢熄,就算把這臺戰(zhàn)斗機(jī)擺在你面前,你也不能完全參透它的精髓炉旷,只是了解個皮毛签孔,看個熱鬧而已
- 因此叉讥,學(xué)好設(shè)計模式相關(guān)的知識,不僅能讓你更輕松地讀懂開源項目饥追,還能更深入地參透里面的技術(shù)精髓图仓,做到事半功倍
5. 為你的職場發(fā)展做鋪墊
- 如果你不想一輩子做一個低級的碼農(nóng),想成長為技術(shù)專家但绕、大牛救崔、技術(shù) leader,希望在職場有更高的成就捏顺、更好的發(fā)展六孵,那就要重視基本功的訓(xùn)練、基礎(chǔ)知識的積累
- 在技術(shù)這條職場道路上幅骄,當(dāng)成長到一定階段之后劫窒,你勢必要承擔(dān)一些指導(dǎo)培養(yǎng)初級員工、新人昌执,以及 code review 的工作烛亦。這個時候,如果你自己都對“什么是好的代碼懂拾?如何寫出好的代碼煤禽?”不了解,那又該如何指導(dǎo)別人岖赋,如何讓人家信服呢檬果?
- 如果你是一個技術(shù) leader,負(fù)責(zé)一個項目整體的開發(fā)工作唐断,你就需要為開發(fā)進(jìn)度选脊、開發(fā)效率和項目質(zhì)量負(fù)責(zé)。你也不希望團(tuán)隊堆砌垃圾代碼脸甘,讓整個項目無法維護(hù)恳啥,添加、修改一個功能都要費老大勁丹诀,最終拉低整個團(tuán)隊的開發(fā)效率吧钝的?
- 除此之外,代碼質(zhì)量低還會導(dǎo)致線上 bug 頻發(fā)铆遭,排查困難硝桩。整個團(tuán)隊都陷在成天修改無意義的低級 bug、在爛代碼中添補(bǔ)丁的事情中枚荣。而一個設(shè)計良好碗脊、易維護(hù)的系統(tǒng),可以解放我們的時間橄妆,讓我們做些更加有意義衙伶、更能提高自己和團(tuán)隊能力的事情
小結(jié)
本文講了為什么要學(xué)習(xí)設(shè)計模式相關(guān)的知識祈坠,總結(jié)一下的話,主要有這樣五點:應(yīng)對面試中的設(shè)計模式相關(guān)問題矢劲;告別寫被人吐槽的爛代碼颁虐;提高復(fù)雜代碼的設(shè)計和開發(fā)能力;讓讀源碼卧须、學(xué)框架事半功倍;為你的職場發(fā)展做鋪墊
設(shè)計模式作為一門與編碼儒陨、開發(fā)有著直接關(guān)系的基礎(chǔ)知識花嘶,是你現(xiàn)在就要開始學(xué)習(xí)的。早點去學(xué)習(xí)蹦漠,以后的項目就都可以拿來鍛煉椭员,每寫一行代碼都是對內(nèi)功的利用和加深,是可以受益一整個職業(yè)生涯的事情