计算机领域的范式,编程领域的范式转移
范式轉(zhuǎn)移(Paradigm shift),這個(gè)名詞最早出現(xiàn)于美國(guó)科學(xué)哲學(xué)家托馬斯·庫(kù)恩的代表作之一《科學(xué)革命的結(jié)構(gòu)》。庫(kù)恩認(rèn)為范式是指特定的科學(xué)共同體從事某一類(lèi)科學(xué)活動(dòng)所必須遵循的公認(rèn)的模式,它包括共有的世界觀、基本理論、范例、方法、標(biāo)準(zhǔn)等等與科學(xué)研究有關(guān)的所有東西。每一項(xiàng)科學(xué)研究的重大突破,幾乎都是先打破道統(tǒng),打破舊思惟,而后才成功的,也就是所謂的范式轉(zhuǎn)移。
范式轉(zhuǎn)移后來(lái)也被引申為打破舊的思維框架。@硅谷王川老師在《范式轉(zhuǎn)移的隨想》中提到,
范式轉(zhuǎn)移, 往往意味著完全不同的商業(yè)模式, 因?yàn)檎麄€(gè)時(shí)間空間內(nèi)的玩家,和他們彼此之間的關(guān)系全都徹底變了。但大部分人思考的慣性,是拿以前的模式去套用,因而始終不得要領(lǐng)。
商界有太多經(jīng)典的案例,柯達(dá)和諾基亞因舊范式而死,蘋(píng)果和亞馬遜因新范式而生。
編程范式
計(jì)算機(jī)領(lǐng)域有編程范式( Programming paradigm)的概念,它代表著計(jì)算機(jī)領(lǐng)域的世界觀和方法論,決定了程序員如何去分析和解決問(wèn)題,如何認(rèn)識(shí)程序的結(jié)構(gòu)、交互和執(zhí)行。除了我們熟悉的結(jié)構(gòu)化編程、面向?qū)ο缶幊毯秃瘮?shù)式編程,常見(jiàn)的編程范式還有聲明式編程、事件驅(qū)動(dòng)編程、面向切面編程等。在維基百科的詞條上,可以找到海量編程范型分類(lèi)。
編程范式往往和編程語(yǔ)言本身強(qiáng)相關(guān),需要用具體的編程語(yǔ)言來(lái)體現(xiàn),編程語(yǔ)言在設(shè)計(jì)時(shí)都會(huì)傾向于承載一種或多種編程范式。
設(shè)計(jì)原則
另一個(gè)大家更為熟悉的概念——設(shè)計(jì)原則,同樣也能夠決定分析和解決問(wèn)題的思路。
設(shè)計(jì)原則關(guān)注代碼與代碼之間的交互設(shè)計(jì),強(qiáng)調(diào)解決“職責(zé)”、“依賴(lài)”和“變化”的問(wèn)題。設(shè)計(jì)原則這個(gè)概念本身并沒(méi)有一個(gè)統(tǒng)一的定義,可以理解為代碼設(shè)計(jì)方法論的統(tǒng)稱(chēng)。GRASP原則、SOLID原則和23種設(shè)計(jì)模式等大約都屬于該范疇。
編程范式是一種客觀上的強(qiáng)約束條件,如果用一種語(yǔ)言去開(kāi)發(fā),就必然要遵循這種語(yǔ)言所屬的編程范式。用C語(yǔ)言進(jìn)行函數(shù)式編程、用Java進(jìn)行邏輯式編程,必然處處受到掣肘,甚至無(wú)法執(zhí)行。而設(shè)計(jì)原則是主觀上的弱約束條件,每個(gè)人都在依照自己對(duì)原則的理解去實(shí)現(xiàn)代碼,而且即使不采用任何原則,仍然可以寫(xiě)出運(yùn)行無(wú)誤的代碼。
很明顯,范式是“道”,原則是“法”。相比之下,開(kāi)發(fā)規(guī)約這玩意只能算“術(shù)”。
編程范式影響設(shè)計(jì)原則
許多設(shè)計(jì)模式都是為了克服面向?qū)ο缶幊谭妒降囊恍┤毕莼蚓窒薅O(shè)計(jì)的,但是當(dāng)范式發(fā)生轉(zhuǎn)移,這些缺陷或局限不復(fù)存在,所以設(shè)計(jì)模式也就無(wú)用武之地了。
比如觀察者模式、中介者模式為了克服對(duì)象通信上信息發(fā)送者和信息接收者的耦合,但事件驅(qū)動(dòng)式編程范式是天生支持的;如命令模式是為了克服命令請(qǐng)求者和執(zhí)行者之間的耦合,但在函數(shù)式編程中函數(shù)是頭等公民,可以將命令或請(qǐng)求封裝為一個(gè)函數(shù)來(lái)輕松解決這個(gè)問(wèn)題。
編程范式影響算法實(shí)現(xiàn)
有時(shí)候同樣的算法,用不同的編程范式去實(shí)現(xiàn),思維模式有很大差別,開(kāi)發(fā)成本和可維護(hù)性根本不在一個(gè)量級(jí)。
以徒手寫(xiě)快排為例,如果用過(guò)程式雙指針?lè)椒▉?lái)實(shí)現(xiàn),至少花費(fèi)了我20分鐘(手有點(diǎn)生),還不保證完全可用,因?yàn)橐恍┻吔鐥l件還沒(méi)有測(cè)試到:
而用函數(shù)式實(shí)現(xiàn)一個(gè)基本可用的版本,大概只用了5分鐘。函數(shù)式編程的“無(wú)副作用”,帶來(lái)了極強(qiáng)的可讀性:
現(xiàn)代編程語(yǔ)言一直在進(jìn)化,會(huì)不斷有原生特性或者第三方框架來(lái)支持多種范式。范式轉(zhuǎn)移有時(shí)候比固有思維的復(fù)雜解決方案更值得研究。故程序之法,上者謀范式,其次取原則,最次學(xué)規(guī)約。
總結(jié)
以上是生活随笔為你收集整理的计算机领域的范式,编程领域的范式转移的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机声音处理说课稿,《声音的产生与传播
- 下一篇: 测试音质好坏的软件,音响音质的好坏简单的