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