如果哲學(xué)家是程序員
盡管沒那么明顯,但至少對我而言,哲學(xué)與編程有很深刻的關(guān)系。你想想看,軟件代碼無非是反應(yīng)了開發(fā)者看問題的視角和解決方案。在開始編碼之前,開發(fā) 人員會(huì)花時(shí)間反復(fù)思考待解決的問題,明確該問題的要點(diǎn)以及它們之間關(guān)系,這種過程正好反應(yīng)了他們看待這個(gè)世界的哲學(xué)。同樣地,哲學(xué)家們都在不停地琢磨他們 所關(guān)心問題的重要特征,比如生命、意識(shí)或者上帝。
那么依此來看,我們可以將程序語言背后的思維與哲學(xué)家們多年的思想很好地關(guān)聯(lián)起來。我們完全有足夠的理由將程序語言視為一個(gè)虛擬世界中的各種不同流派的哲學(xué),在這個(gè)虛擬世界中存在交互的實(shí)體。即使是最基本的哲學(xué)命題都有有趣的轉(zhuǎn)換:比如,“什么是自我意識(shí)?”轉(zhuǎn)換為“什么是反射?(reflection)”
接下來是更有趣的問題:“如果哲學(xué)家們是程序員?那么他們會(huì)使用那種程序語言呢?”好吧,下面是我的答案!
蘇格拉底:硬派匯編程序員
蘇格拉底是哲學(xué)的奠基者之一,但這并不是唯一相同之處(匯編是一切程序語言之祖)。蘇格拉底自創(chuàng)了一種明智的方法論,可以贏得每次辯論。他依靠不斷地提問,直到(回答者)自相矛盾。比如,當(dāng)有人聲稱“道德是重要的”,蘇格拉底則問道“那么,你如何來定義道德呢?”
同樣地,匯編程序中的任何(符號(hào))都意味著問題。沒有什么是預(yù)先設(shè)定好的(至少對純匯編而言,而不是那些混雜了庫和其 他東西的匯編),并且所有的東西一定有非常清晰的含義。如果你和程序員蘇格拉底在一塊工作,并且給他看了類似這行的代碼“var x = null;”,你的這位搭檔一定會(huì)開始問到“什么是var”!
亞里斯多德:大牛 C 程序員
亞里斯多德對西方哲學(xué)有巨大的影響,創(chuàng)建了很多科學(xué)領(lǐng)域,從物理學(xué)到生物學(xué)。他第一個(gè)仔細(xì)研究實(shí)體是萬物之本質(zhì)命題;與柏拉圖的抽象形成了對比。他的哲學(xué)采用了中庸的方法去獲得道德或者是理解生活(物質(zhì)與形式)
C語言對其他程序語言有著同等規(guī)模的重要影響,在語法層面尤其如此。而且,在70年代早期的時(shí)候,C語言被視為所謂的高級(jí)語言和匯編語言的中庸之道:既可以編寫機(jī)器獨(dú)立的程序,也具備訪問底層的能力。
柏拉圖:理想的 C++ 傳教士
柏拉圖是哲學(xué)中一個(gè)大人物,他是蘇格拉底的學(xué)生,也是亞里斯多德的老師。那么,我要向你解釋一個(gè)明顯的疑問:C++(柏拉圖)怎么會(huì)在C(亞里斯多德)之后?讓我來解釋。柏拉圖以他的形式或理念而聞名,引出了我們周遭萬物所存在的理念世界。因此,你桌子上的茶杯不過是理念世界中具有橢圓形狀的對象的一個(gè)影子。用編程的行話來講就是,它是茶杯類的一個(gè)實(shí)例。
同樣地,C++作為C的擴(kuò)展,是第一門嘗試在任何實(shí)現(xiàn)之前,就提供給程序員抽象問題的能力的語言。這本身是巨大的進(jìn)步,即使解決問題的代碼未寫一 行,對問題的分類和建模顯得易懂且有用。你也許奇怪為什么柏拉圖不用Java,他當(dāng)然可以,不過這個(gè)故事另有隱情:柏拉圖對用符號(hào)去表達(dá)他的形式理念不是 那么有信心,而且他偏愛對話體(參見斐多)。同樣地,C++不是很自信它的發(fā)展方向,所以仍然保留C作為其子集,并完全地向后兼容不那么理想的C語法。
斯多葛學(xué)派:快樂的 Perl 學(xué)派
斯多葛和他們的哲學(xué)(斯多葛學(xué)派)對西方哲學(xué),乃至世界哲學(xué)和文化都有著潛移默化而且深遠(yuǎn)的影響。有意思的是,他們不是一個(gè)人,而是相互協(xié)作的群 體。斯多葛拒絕任何非物質(zhì)的東西,并且試圖使用命題邏輯解釋這個(gè)世界。因此,斯多葛學(xué)派拒絕任何理念,而專注于道德:他們讓我們遠(yuǎn)離任何無法控制的事物, 而不是通過自我審思獲得真智慧。斯多葛學(xué)派拒絕政治體制和形式主義,并提倡蘇格拉底的公民社會(huì)。人們要成為兄弟,消除差別,為友愛的社會(huì)貢獻(xiàn)自己(世界各 國之共同法律)。你應(yīng)當(dāng)注意到他們對大宗教,比如基督教和佛教的影響。
最有意思的是,Perl是在80年代發(fā)明的,在這個(gè)年代里面邏輯/函數(shù)式編程最終找到了它們在程序語言世界中的位置。然而,Perl社區(qū)(和語言) 和斯多葛學(xué)派有著驚人的相似。Perl作為一門語言,易擴(kuò)展又靈活。事實(shí)上Perl世界中最流行的話是“不止一種方式”,簡稱為 TIMTOADY(there is more than on way to do it)。Perl背后的哲學(xué)拒絕語法上的約束,給程序員們編碼時(shí)足夠自由的風(fēng)格,但同時(shí)鼓勵(lì)他們共享和參與社區(qū)。Perl的強(qiáng)大源于CPAN社區(qū)的存在, 里面的模塊和軟件被全球的Perl程序員快樂地分享著。這門語言一直在默默影響編程世界,其深遠(yuǎn)非立見??梢砸惶岬氖荘erl對腳本編程、動(dòng)態(tài)類型編程和 函數(shù)式編程的強(qiáng)烈影響,但總之可以簡單地歸結(jié)為一句在Perl粉中廣為流傳的笑話:下一輪市場崩盤將由某個(gè)Perl腳本中的bug所引發(fā)。
勒奈·笛卡爾:真正的 Java 大師
笛卡爾是反對經(jīng)典古希臘哲學(xué)的第一位西方哲學(xué)家。他的核心思想在他的《哲學(xué)原理》中著名的第七章有所提及,該書基于我思(理性自我)這一概念。笛卡 爾相信懷疑是存在的證明,我思是懷疑的起因,因此得出了著名的“我思故我在”。我思并不是我們進(jìn)行的一項(xiàng)活動(dòng),而是我們的所有活動(dòng)。所以,我們所要、所想 和所感,通過我思都可以直接獲得,笛卡爾幾乎“證明”了上帝的存在,理由是人們能夠思考上帝存在之必要這一問題。事實(shí)上,任何理念或者形式都可以通過我思 來獲得。笛卡爾在哲學(xué)中的另一重要貢獻(xiàn)是:從他開始,哲學(xué)盡量避免模糊的抽象之論,去追求簡練而近于幾何理論的形式。笛卡爾以近乎定理的形式闡述了他的思 想。
笛卡爾絕對是完美的Java大師。Java是第一門強(qiáng)類型語言,它的每一樣?xùn)|西在使用之前必須有一個(gè)類型(或哲學(xué)地說,它們共享一種形式),這非常 符合笛卡爾關(guān)于他精確言談的努力。笛卡爾的我思是柏拉圖形式的再現(xiàn),區(qū)別在于,笛卡爾認(rèn)為理念存在,是因?yàn)槲覀兯伎迹宜⒉淮嬖谟诹硪粋€(gè)宇宙。他的哲 學(xué)可以說是純面向?qū)ο蟮模俏覀兊玫降慕鉀Q方案,也是我們智慧的直接產(chǎn)物。
伊曼努爾·康德:首位 Python 程序員
康德找了通往哲學(xué)殿堂的“簡易”方法:放棄采用笛卡爾的我思和經(jīng)驗(yàn)主義這兩種對立、相反的學(xué)說中的任何一種,而大喊“都要”??档聦徱暳巳祟惖睦?性,聲稱被先驗(yàn)理性過濾的經(jīng)驗(yàn)?zāi)芡ㄏ蛘胬怼.?dāng)他的哲學(xué)成熟后,開始研究美學(xué),試圖理論化解釋人的審美??档聵O端精準(zhǔn)的性格,癡迷于整潔和精確,在每天固定 的時(shí)刻做固定的事情,以至于他的熟人竟然將他“用于”計(jì)時(shí)。
同樣地,Python是一門嘗試將各種解決方案組合在一起的新程序語言。它是多范式的程序語言,從面向?qū)ο缶幊痰交谄跫s的編程。Python程序 員拒絕像Perl一樣自由表達(dá)的形式,同時(shí)又從它借鑒了不少特性。Python強(qiáng)調(diào)簡潔和清晰的代碼。Python太“癡迷”于此,以致將空白縮進(jìn)作為代 碼塊的分隔符。在“Python之禪”的19條教義中首條便是“美勝于丑”??档聦γ篮退囆g(shù)的追求,讓他成為名副其實(shí)的首位Python程序員。
路德維希·維特根斯坦:天才 Haskell 程序員
維特根斯坦猶如蘇格拉底的辯經(jīng),深刻地革命了西方哲學(xué)。他的札記般的哲學(xué)著作《邏輯哲學(xué)論》堪比邏輯學(xué)艱深的研究生數(shù)學(xué)讀本。維特根斯坦指出語義和 符號(hào)形式是一切這些問題的根源,剩下的都可明確地歸為科學(xué)的范疇。依靠純邏輯,他推導(dǎo)出語言內(nèi)在的歧義性決定了哲學(xué)不過是在重復(fù)它自己,并且以這句“但凡不可言所,務(wù)必保持沉默”的曠世名言結(jié)束了本書,同時(shí)聲稱解決了所有的哲學(xué)問題。
維特根斯坦是天生的 Haskell 程序員。Haskell 不是第一門函數(shù)式編程語言,而是在80年代后期出現(xiàn)的,并被視為最為重要的函數(shù)式語言。Haskell 并不是適合所有人,就像《邏輯哲學(xué)論》一樣。如維基百科中所寫,它有嚴(yán)格的數(shù)學(xué)和邏輯形式。Haskell 是純函數(shù)式程序語言,它重新定義了程序員使用抽象數(shù)據(jù)類型的方式,正如維特根斯坦像蘇格拉底的辯論法一樣,革新了現(xiàn)代西方哲學(xué)。
上面這些聽起來也許有點(diǎn)奇怪,但是對程序員來說,很容易意識(shí)到它們之間深層次的聯(lián)系,但我不確定哲學(xué)家們是否持有相同的觀點(diǎn)。無論如何,至少是現(xiàn)在可以理解,為什么在維基百科中每一篇關(guān)于程序語言的文章中,都有“語言哲學(xué)”這特別的一節(jié)。
原文鏈接:http://developeronline.blogspot.kr/2009/04/if-philosophers-were-programmers.html