這是哪個蠢蛋寫的爛代碼?
大家都在抱怨同事的代碼寫的爛,前同事遺留下來的代碼bug多...... 那問題來了,寫這些爛代碼的人都去哪了?好奇怪哎!
不過幾次 code review 之后,這位朋友就釋然了,聲稱新同事的代碼堪稱教科書級別:
他的代碼結(jié)構(gòu)都很清晰易讀,不用注釋也能看明白 足夠簡潔,運行效率高 靈活可擴展,就算以后業(yè)務(wù)有變化也很容易加?xùn)|西
這種評價幾乎是跪服。幸好他心態(tài)夠好,迅速認清了現(xiàn)實,抓緊彌補以后才有機會去倒掛別人。
正好在跳槽季,我就順便總結(jié)了些經(jīng)驗,無論是面試還是以后工作,這些都是技術(shù)圈顛撲不破的規(guī)律,對你肯定有用。
即使做 CRUD ,代碼也要更漂亮
做業(yè)務(wù)開發(fā)大多數(shù)時候需求都很簡單,但是每個人有不同的實現(xiàn)方式。但凡對自己有要求,就不能只滿足于實現(xiàn)功能,更要想怎樣才能讓你的代碼簡潔、高效、可擴展,這是你和同行拉開差距的分水嶺。代碼體現(xiàn)出你的基本功和思維,也能看出你做系統(tǒng)架構(gòu)設(shè)計的潛力。
寫出教科書級的代碼,就得跟著經(jīng)典學(xué)
總有些人問,我該怎么提高代碼水平?一方面是多練手,熟能生巧,另外就是多學(xué)優(yōu)秀的代碼,學(xué)設(shè)計模式就是最佳的捷徑。
設(shè)計模式是多年開發(fā)從業(yè)者們經(jīng)驗的總結(jié),算我們行業(yè)的紅寶書,尤其是工作一到三年左右,最好都要掌握。
它涉及的很多知識點,比如多線程編程、異步和同步編程模型、內(nèi)存池等等知識點,工作之后你會有更清楚的認知。設(shè)計模式是否好用,什么時候該選擇哪種設(shè)計模式,這些都在你有一定工作經(jīng)驗后更好校驗結(jié)果。如果你工作時意識到了自己基本功薄弱,現(xiàn)在開始學(xué)是最好的。
設(shè)計模式的海量知識,如何學(xué)才高效?
經(jīng)典設(shè)計模式的書籍很多,但很多人卻因為枯燥、體量大,難以堅持; 設(shè)計模式列舉的各種場景太抽象,就算吃透了知識點,也難以落地; 設(shè)計模式不是萬能藥,照搬設(shè)計模式,卻無法解決實際問題。
經(jīng)典之所以稱為經(jīng)典,是因為它的實際作用,能讓你切實提高編程技巧,而不是空學(xué)一堆理論。
最近看到一個課程,「趣學(xué)設(shè)計模式」,非常適合上班族來學(xué),體量很精簡濃縮,只留下了最核心最重要的知識點,比起一些經(jīng)典大部頭書籍,這個課程不會讓你望而生畏,浪費時間。
講師黃靖鋒,是前京東資深系統(tǒng)架構(gòu)師,深入研究算法與編程近十年,對程序設(shè)計和架構(gòu)設(shè)計都很有經(jīng)驗,他的多年工作經(jīng)驗從設(shè)計模式中獲益良多,現(xiàn)在把他的學(xué)習(xí)思路和實踐方法都傾囊相授。
真正高效編程,是從思維開始的
課程第一模塊先給你程序設(shè)計的方法論,掌握這些可以避免很多彎路。比如 Unix 哲學(xué)傳遞出的組合思維,可以讓你真正做到隨意組合以應(yīng)對多變的需求;經(jīng)典的分層思維,更能幫助你看透現(xiàn)代架構(gòu)設(shè)計對編程影響的本質(zhì);工程思維帶你有目的、有計劃、有步驟地解決開發(fā)問題,高效率交付可靠的軟件產(chǎn)品;對象思維讓你的代碼更加可讀,提高代碼質(zhì)量,敏捷開發(fā)。
10個核心編程原則,如何開箱即用
編程原則可以說是程序設(shè)計的規(guī)范,這里只選用最重要最基礎(chǔ)的,了解這些之后,你再拆解設(shè)計模式,就很容易理解他們?yōu)槭裁茨敲丛O(shè)計了,也對你自己以后靈活套用設(shè)計模式更有幫助。
比如,面向?qū)ο笤O(shè)計原則(SOLID)本身增加了設(shè)計與實現(xiàn)的復(fù)雜性,但我們卻希望通過保持最終簡單性來提升產(chǎn)品的體驗,這如何做權(quán)衡和取舍呢?再比如,慣例原則(CoC),編程時遵循的很多約定習(xí)俗其實很重要,那如何真正發(fā)揮它的作用?等等。
結(jié)合案例,拆解23種設(shè)計模式
這一模塊是你學(xué)習(xí)的重點。按照基本分類順序:創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式,詳細分析這 23 種設(shè)計模式如何在實踐中去應(yīng)用,和你閱讀書籍與資料不同的是,這里會重點講解一些和實際場景相關(guān)的案例問題,剖析選用某種設(shè)計模式的原因,以及具體問題的解決思路。

設(shè)計模式不是銀彈,活學(xué)活用才是王道
很多人即使吃透了23種設(shè)計模式,卻只能死板套用,或者非設(shè)計模式不用,就是缺乏靈活應(yīng)用的技能。設(shè)計模式作為不同項目中總結(jié)出來的通用經(jīng)驗,卻不是全能方案,它需要考慮適用范圍。好的程序設(shè)計從來不是看用的模式有多少,而是看如何合理利用模式的設(shè)計思想,以及如何利用模式解決真實的問題。
黃靖鋒在課程里舉了一個他自己的例子,我深有體會,尤其設(shè)計模式初學(xué)者很容易進入這種誤區(qū)。
比如,我曾經(jīng)在負責(zé)一個網(wǎng)關(guān)系統(tǒng)時,就陷入過“模式綜合癥”,那時的我無時無刻不在想該如何使用各種模式,即便是一個小的過濾規(guī)則模塊,我也想著能不能使用責(zé)任鏈模式,而實際上那個需求只需要簡單的白名單就能解決。最后的結(jié)果當(dāng)然就是代碼變得更復(fù)雜、更難以維護,并導(dǎo)致大量重構(gòu)和溝通工作涌現(xiàn)。
所以說,學(xué)習(xí)設(shè)計模式是為了啟發(fā)我們的思考,而不是“手里握著錘子,滿世界找釘子”。
——「趣學(xué)設(shè)計模式」
看了這個課程的目錄,“錘子”和“釘子”都給你了。就像你不能一次建造一棟樓,學(xué)習(xí)設(shè)計模式的“錘子”也不是一蹴而就的,這 39 講的內(nèi)容你得主動開始,持續(xù)堅持,才有源源不斷的新收獲。
