天天看點

程式設計範式 – 煉氣篇

個人部落格傳送門

五一家裡蹲,翻翻《Programming Paradigms for Dummies: What Every Programmer Should Know》,學習學習,讀後筆記準備寫三篇:煉氣、築基、飛升,下面是煉氣篇 ^ ^。

我們都知道程式設計語言是怎麼一步步過來的,從最開始的穿孔機到彙編再到各種進階語言,現在常見于眼前的都是些進階語言,老牌強者如 C、Java、SQL、JavaScript、C++,新秀如 Python、Go、Kotlin、Rust、Julia。TIBOE 2021 5月的程式設計語言排行榜前十是這樣的:

程式設計範式 – 煉氣篇

程式員經常說的一個梗是——PHP是世界上最好的語言,大緻反映出大家普遍認同一個觀點——沒有最好的語言,隻有最适配需求場景的語言,好比瑞士軍刀和斬馬刀,各有适用場景。

平時大家都是用設計好的語言,如同生活在各個語言創造好的世界裡,如果擡頭想想語言也是由人創造的,那麼語言的水面下必然有一些數量相對少的指導原則,這些指導原則指導建設了這門語言,另一些指導原則則指導建設了另一門語言,甚至從前兩者的指導原則中抽取出部分再指導建設第3門語言。具體語言的文法細節各異,而指導原則則可能存在共通之處。如果把注意力聚焦到程式設計語言這個層面,這些指導原則就是要了解的核心所在。這些指導原則可以稱為 programming concept,解決某類問題最佳的一組概念(concept)組成了一個 範式(programming paradigm,CTM:paradigm 這個說法太暧昧了,我用 computation model)。規範一些可以說一個程式設計範式是指基于一種數學理論或者一套相關的準則進行程式設計的方法。

一個程式設計語言(language)由多個(一般1到2個)範式(paradigm)組成,一個範式由多個概念(concept)組成。

程式設計範式 – 煉氣篇

常用的範式有:面向對象(Java)、面向過程(C)、函數式(haskell)、邏輯式等。而面向對象、面向過程又可以歸類到指令式程式設計(imperative programming)範式下,指令式程式設計會告訴計算機怎麼執行,與指令式相對的是聲明式程式設計(declarative programming)範式,聲明式程式設計隻告訴計算機我需要這個結果,具體怎麼執行由計算機推導。程式設計範式非常多,放到築基篇裡再說,說說最重要最通用的程式設計概念:

  • records,一個資料結構,包含一組資料項的引用,可以索引到每一個包含的資料項。可以引申出 arrays、lists、strings、trees、hash tables 等。
  • (lexically scoped) closures,(詞法範圍的)閉包,一個執行過程+外部引用,在程式員視角就是一個工作塊,過程、方法、對象、類,都屬于閉包。
  • independence (concurrency),并發,兩個部分有各自獨立的執行時間線,在執行時序上沒有既定的先後順序,如 同一個網絡系統中不同的主機、同一個作業系統中不同的程序、同一個程序中不同的線程、同一個時空下的個體。
  • named state,随着時間變化的一個命名值序列,直覺上就對應程式設計語言裡的變量,抽象含義就是實體記住了随着時間推移在自身留下的影響,使得實體的行為會随着時間發展而發生變化,舉例就是現實世界中所有的生物個體都會随時間發生變化。

References:

Programming Paradigms for Dummies: What Every Programmer Should Know

https://en.wikipedia.org/wiki/Programming_paradigm

Concepts, Techniques, and Models of Computer Programming

繼續閱讀