函數式又是函數式

事情的發生往往就那麼巧, 這頭 LambdaConf 發表了個 Standardized ladder of functional programming (有點類似程序員練級指南那種), 那頭 @題葉 老師寫了篇 為什麼說 JavaScript 不擅長函數式編程

這兩篇東西某種程度上都試圖去定義 FP 是什麼或者說描述 FP 應該有什麼特性. 很多時候用 FP 這個詞是個很模糊的分類, 一般介紹/宣傳/安利語言的時候就會出現"函數式", "混合範式"這種字眼, 大家聽得多用這些詞來做分類方便交流也沒有什麼問題.

問題出在嘗試以範式的角度討論具體的問題, 如果題葉老師那篇 "為什麼說 JavaScript 不擅長函數式編程" 改成 "為什麼說 JavaScript 不能像 Haskell 那樣寫代碼" bla bla 的說 Javascript 缺哪些特性不適合做什麼事, 因為有哪個特性做什麼事情做得更對能降低問題的複雜度, 這樣討論下來就是往解決問題方向靠, 而不是討論是什麼是 FP, FP 應該有什麼特性這種對解決問題沒有貢獻的事情. 拿裡面React的例子: om 搞了 mori -> 用不變性數據性能好了 -> Why -> 因為 bla bla -> immutable.js, 這樣關注點和討論就在不變性數據上, 而不是哎呀 Haskell 默認都 immutable 很 FP, "immutable 是 FP 的精粹/思想" bla bla. 這裡沒有批評題葉老師的意思, 一直在關注題葉老師的寫的東西和分享, 他有很多很有意思的想法我很佩服, 換種表達方式的話可能會讓這些想法讓更多人理解.

OOP 其實也有這種尿性, Java 的 OO, Ruby 的 OO, MOP 的 OO 不怎麼能好討論到一堆去, 後來看到有人說要針對某個語言的對象模型(不是在內存那種)來討論, 例如說, "多重繼承"不好啊會有鑽石問題, Ruby 的 mixin 爽在多重繼承上退一步, 但是又可以做到多重繼承那種復用.

FP 某種程度上成為了新時代的 OOP, 不是說地位或者市場份額的替代, 而是buzzword generator 的替代, 尤其搭上前端這個潮流, 看下 Standardized ladder of functional programming 里各種詞, 是不是有種 23 種 design pattern的感覺.

最後推薦下這篇 There Is No Functional Programming, Only Culture

以前鏈接下關於以前關於方面的一些吐槽:

WTF is Funcitonal Programming系列

編程範式入門

還有貼下 Wadlers Law, 獻給討論語法的人

In any language design, the total time spent discussing

a feature in this list is proportional to two raised to

the power of its position.

0. Semantics

1. Syntax

2. Lexical syntax

3. Lexical syntax of comments

推薦閱讀:

Python 為什麼不能序列化函數閉包?
Speak my true name, summon my constructor
為什麼lists在functional programming里很重要?
Erlang入門教程 - 6. Maps

TAG:函数式编程 | Haskell |