漫談哲學與程式設計

keelii發表於2019-08-26

談到哲學,多數人都會直覺性的認為它是很高深的一門學問。實際上大多數情況並非如此,哲學研究的往往是非常簡單的一些命題,而這些命題在常人看來可能並沒有現實意義。

比如說:到底是先有雞還是先有蛋的問題;比如說:一個號稱只給不能給自己理髮的人理髮的理髮師到底能不能給自己理髮的問題。當然本文的目的並不在於討論這兩個問題,我們來聊聊幾個稍微簡單一些的概念:

哲學中的理性與感性

理性是超越的,本質在於追求無限

++超越++的意思是說理性本身不依賴任何現實或者經驗社會中的任何物件,++無限++實際上就是說理性本身需要達到的某種理想狀態。

比方說:「100%的金」 就是一種無限狀態。我們不使用任何經驗就可以判斷出 100% 的金是必然有的,概念上沒人能否定這一點。

但是運用在經驗社會中的知識來判斷,這個命題就是不正確的,或者說不具有普遍的正確性。因為我們知道無論人類的技術如何高超也無法制造出來 100% 的金。即使到 99.99% 邏輯上也沒到達 100%。

這個時候人們對於類似的事情就會產生了不同的反應。有的人會因為理想狀態達不到而反向地認為原來的命題是錯誤的;有的人內心則有一種說不清道不明的東西指引著他,不會因為到達不到無限狀態而肯定整個命題。

這個問題也一直困擾了我很久,因為在現實生活中在你看來很多明顯正確的事情忽出現了一個反例,結果就會有一堆人來告訴你你錯了。

德國哲學家康德在《純粹理性批判》這本書中給出了一種解釋:

理性的調節性是引導經驗去追求無限,追求絕對,但是永遠也達不到。達不到也有作用 — 它使得經驗科學不斷的前進,並且有了明確的目的和方向…

類似的哲學觀點好就好在一但明白了其中的本質和它闡述的真理以後,它就可以在某種層次上解釋經驗世界的各種現象。這或許就是大家說的哲學是任何其它學科的奠基,是第一學科的原因。

對應的在程式設計領域也有一些無限的概念,對於多數前端工程師來講「實現一個無限級的下拉選單」似乎也在表達著一種無限狀態。當然使用者在使用的時候根本不可能用到無限級的選單,無限級的選單在互動方面也也是極其反人類的,一步可以做到的事情沒人願意多增加一步。但是為什麼程式設計師們熱衷於實現這種類似的無限狀態。實際上這就是理性的力量,總有一種說不清楚的力量在引導著你,你也沒法解釋。

理解了這一點你就會有一個很簡單的評判程式好壞的論點,即:程式或者程式碼是否表現了某種無限狀態?如果你的程式函式裡面只是幾個簡單的 if else,那你有沒有考慮過如果當輸入不斷的增加或者變化時,原來的程式碼是否還可以正常返回。或者說在不考慮硬體等客觀條件的前提下,你的程式是否存在極限狀態。

我們經常在知乎或者其它論壇上爭論一些問題,本質上講大家都沒有區分清楚自己對於一個論點的邏輯認知情感認知。太多人喜歡用自己的感情認知去否定邏輯事實,以至於爭來爭去誰也沒能說服誰,試圖用唯心觀點去解釋唯物的現象或者相反,這是極其不正確的。

一個典型的問題是我不久之前在知乎上回答的一個問題:誰能大致說下vue和react的最大區別之處?我的回答簡單總結就兩句話:Vue 有一種設計層面追求的簡潔感性之美,React 則是一種數學層面的邏輯一致之美。本質上講沒有什麼好壞之分。但是諸如些類的一些前端框架問題正在變成一種幫派化的「站隊」風氣。

程式設計中的低階(low-level)與高階(hight-level)

注意這裡講的 low/hight level 並不是計算機術語中特定的某種形式。

有個笑話是這麼講的:

一個程式設計師去相親,程式設計師自己介紹說「我是做嵌入式C語言底層開發的」,妹子反問「那啥時候做到高層開發呢」?

程式設計師們內心都有一個做底層開發的夢,因為這才是一個真正的程式設計師的追求與理想。

但是現實往往相反,大多數程式設計師每天都在寫業務程式碼(重複的 CRUD)。所以很多程式設計師得出來一個結論就是:越底層的東西越重要,越高層的東西越膚淺。通常這也會行成一條鄙視鏈,他們會不由自主地忽略高層的東西。

注意這裡有兩個問題:

  1. ++業務程式碼有沒有價值++?

當然有了,業務部分的程式碼是系統的最終結果。從結果導向上講底層程式碼如何優雅、實現如何科學我們根本不關心,我們更關心整個系統層面的穩定與健壯。這是一種領導的高層次視角。

  1. ++底層的東西就一定重要++?

並不一定,這裡說的不一定不是要完全否定底層的重要性。恰恰相反,軟體領域一些特別優秀或者說偉大的軟體底層並不是那麼的如人意。比方說微軟開發的 VSCode 程式碼編輯器。要是從底層去討論它的構架合理性那確實挺像一個笑話的。因為本質上講 VSCode 基於 electron,它把編輯器放在了一個 webview 中去執行,但是 webview 是用來瀏覽網頁的,而且 electron 居然把 NodeJS 執行時也整合進去,以至於最小的一個應用解壓完也有上百兆。

這感覺就像是上學的時候你很期待一個數學教授教你數學課,但是實際上你的數學課卻是一個體育老師帶的,這不是可不可以的問題對吧。

然而 VSCode 這樣做的結果是:它還真的成功了,而且編輯器的效能比很多原生軟體做的都要好,以至於周圍所有人都在使用它,VSCode 在 Github 上名列前茅,也改變了很多程式設計師對於微軟的刻板印象。

如果我們再回過頭從哲學的角度去思考這個問題,實際上計算機中的底層高層正好對應著哲學中的理性感性

  • 底層更注重邏輯嚴謹,因為這是構建高層建築的基礎,它面向的是理論
  • 高層更注重表現形式,因為高層的部分呈現出來的是一個完整的系統,它面向的物件是人。是人,那需求就是多樣化的,因為人的想法總是特別的感性

理性的認知是有對錯可以批判的,但是感性的直觀是沒有對錯的,因為即使是同一種聲音、顏色對不同人觀感都是不一樣的。

比如說你在火車上看書,對面的人說話聲音太大吵到了你。你說:你們說話小聲點可以嗎?對方會說:車上這麼多人說話為啥就我們吵到你了?你說:因為就你們聲音最大。對方說:我咋沒覺得?

現實中的主觀與客觀

現實生活中我們經常會遇到一些對於論點的評價:主觀還是客觀。但是很多人沒搞清楚這兩個詞的關係。多數人都覺得客觀的觀點就是好的,主觀的就是臆斷的。

主觀和客觀的關係就像是主人與客人的關係一樣,有的人會認為應該主隨客便,有的人則認為應該是客隨主便。

  • 如果一個人表達的觀點全是主觀的,那我們會認為這些觀點是不可以討論與評判的,不經過討論批判的觀點是站不住腳的。
  • 如果一個人表達的觀點全是客觀的,那似乎也不對,因為這些觀點全是別人的,你可能忽略了自己的意識,最終只能遊走在別人的規則中。

任何語言中都有那麼一些詞語是成對兒出現的,像因果、主客、高低,這些詞在被造出來的時候就是成對出現的,缺一不可。沒有前者,後者將不會單獨存在。它們之間沒有絕對性的對於錯。如果有,那對方就沒有了存在的意義,反過來自己也將不存在。

當有人丟擲一個觀點的時候我的經驗是一定要聽清楚對方說的是「我覺得」還是「我認為」。「我覺得」那必然就是人家的主觀感受,這種觀點我們就沒必要討論了。你應該回復:「嗯,沒錯,確實是這樣的。」。如果對方說「我認為」那你要是有不同的觀點就完全可以和他討論,因為說「我認為」的觀點必然是有一些客觀事實做為依據的,有事實有邏輯,那就可以有對錯。

結語

哲學中的知識並不能完全解釋現實中的事物,因為哲學研究的終點是一些沒有結論的東西:上帝、自由、靈魂不朽。這些東西並非常人能理解的,但是人們對於無限真理的追求驅使著大家去研究它,很多人會覺得既然研究不出來結果那是不是就沒意義了,當然不是。事實恰恰相反,如果我們把所有的事物本質都研究清楚了,那我們的存在也將失去意義。

原文:https://keelii.com/2019/08/25/philosophy-and-programming/

相關文章