程序員的抽象能力是在了解計(jì)算機(jī)工作原理的基礎(chǔ)上,借助于一種或多種編程語(yǔ)言將問(wèn)題的解決方案抽象為計(jì)算機(jī)程序的能力璧瞬。在前文《關(guān)于編程能力的思考》中提到了編程能力包括理論基礎(chǔ)和系統(tǒng)設(shè)計(jì)能力,抽象思維能力恰恰就是決定編程能力的關(guān)鍵渡讼。
程序的本質(zhì)是人的意志延伸到計(jì)算機(jī)的可識(shí)別的指令城菊。計(jì)算機(jī)思維簡(jiǎn)單僅能識(shí)別 0 1 代碼传于,本身不能解決任何問(wèn)題,只能由人編寫(xiě)程序控制計(jì)算機(jī)解決問(wèn)題菩彬,因此編程的本質(zhì)就是人“教會(huì)”計(jì)算機(jī)解決問(wèn)題缠劝。
編寫(xiě)程序總是離不開(kāi)各種各樣的數(shù)據(jù)結(jié)構(gòu)與算法,其中又蘊(yùn)含著深刻的數(shù)學(xué)思想骗灶。理解一種數(shù)據(jù)結(jié)構(gòu)或算法惨恭,就是在理解解決方案的一種抽象。
隨著業(yè)務(wù)越來(lái)越復(fù)雜耙旦、需求越來(lái)越多脱羡,程序總是在擴(kuò)展和重構(gòu)之間徘徊,在這個(gè)過(guò)程中免都,需要程序員深入理解業(yè)務(wù)并逐漸優(yōu)化系統(tǒng)設(shè)計(jì)锉罐。正是在這樣逐漸抽象的過(guò)程中,誕生了開(kāi)發(fā)框架绕娘、中間件和業(yè)務(wù)框架脓规。有著良好抽象能力的程序員能夠根據(jù)業(yè)務(wù)的特點(diǎn)抽象出軟件最合理的設(shè)計(jì),使得程序具有良好的可讀性险领、性能抖拦、擴(kuò)展性、伸縮性舷暮、可用性和可靠性态罪,而抽象能力差的程序員面對(duì)復(fù)雜的業(yè)務(wù)邏輯很可能束手無(wú)策導(dǎo)致代碼臃腫難以維護(hù)。
如何提高編程的抽象思維能力下面,或者抽象能力又具體體現(xiàn)在哪些方面呢复颈?作者認(rèn)為有三個(gè)方面可以參考:善用自頂向下逐層分解的程序設(shè)計(jì)思想、熟練使用設(shè)計(jì)模式和對(duì)代碼進(jìn)行必要的重構(gòu)。這三個(gè)方面能夠體現(xiàn)出優(yōu)秀程序員的抽象思維能力耗啦。
1凿菩、善用自頂向下、逐層分解的程序設(shè)計(jì)思想:
無(wú)論閱讀或編寫(xiě)什么樣的程序帜讲,都要始終堅(jiān)持自頂向下衅谷、逐層分解。無(wú)論配置多少個(gè)顯示器似将,打開(kāi)多少個(gè)編輯器获黔,都不可能一次展示出所有的代碼,在閱讀或編程時(shí)在验,始終把思維控制在一個(gè)屏幕范圍內(nèi),看不到的代碼都當(dāng)做是黑盒腋舌,用抽象的思維去理解代碼盏触。小系統(tǒng)總是容易理解块饺,大系統(tǒng)則很難一次把解決方案裝入大腦,越大的系統(tǒng)越需要在設(shè)計(jì)和理解時(shí)進(jìn)行抽象授艰。
2、熟練使用設(shè)計(jì)模式:
設(shè)計(jì)模式是程序抽象到一定層次后自然而然產(chǎn)生的多種模式想诅≌倥樱基于這些模式来破,可以更好地理解和交流程序的架構(gòu)和設(shè)計(jì),是軟件開(kāi)發(fā)的成熟套路徘禁。設(shè)計(jì)模式是面向?qū)ο筌浖軌驈?fù)用的基礎(chǔ),用好設(shè)計(jì)模式能培養(yǎng)程序員的抽象思維能力送朱。
3娘荡、對(duì)代碼進(jìn)行必要的重構(gòu):
重構(gòu)可以改善既有代碼的設(shè)計(jì)驶沼,消除代碼中的壞味道炮沐。任何一段代碼都應(yīng)該經(jīng)歷三個(gè)階段,最初的設(shè)計(jì)階段追求多快好省地解決問(wèn)題回怜,后來(lái)的設(shè)計(jì)優(yōu)化用于擴(kuò)展程序的新需求和解決 bug大年,最后的重構(gòu)則把重點(diǎn)放在系統(tǒng)設(shè)計(jì)的優(yōu)化上。重構(gòu)是培養(yǎng)抽象能力的好方法,如何用更好的抽象模型描述解決方案以實(shí)現(xiàn)更好的擴(kuò)展性翔试、伸縮性轻要、可用性、可靠性值得每個(gè)人深思垦缅。
每周 3 篇學(xué)習(xí)筆記或技術(shù)總結(jié)冲泥,面向有一定基礎(chǔ)的 Java 程序員,內(nèi)容涉及 Java 進(jìn)階壁涎、虛擬機(jī)凡恍、MySQL、NoSQL粹庞、分布式計(jì)算咳焚、開(kāi)源框架等多個(gè)領(lǐng)域洽损。關(guān)注作者或微信公眾號(hào) backend-develop 第一時(shí)間獲取最新內(nèi)容庞溜。