编程语言的宗教狂热和十字军东征
業余程序員最喜歡做的一件事就是對不同的語言進行比較。Java是否比C++好?C#是否會成為終極語言?凡此種種。從專業程序員的角度看來,這是最低級無趣的游戲。其一,在項目諸元確定之后,通常并沒有選擇語言的余地;其二,語言的生存本身就是一個達爾文主義的問題:設若兩種語言有明確的可比較性,其中較劣的那一種必定早已被淘汰出局,又何來比較的必要?所以,有“C++之父”美稱的Bjarne Stroustrup博士常常聲明自己不會拿C++與其他語言比較——偏偏每次接受采訪時,必定有外行的記者或聽眾提出這一類最令他反感的問題,這是題外話,按下不表。
丟開實用主義的觀點,從美學(或者說,計算機科學)的角度來看,語言的比較似乎并不像它通常所表現的那么低級。畢竟,既然維特根斯坦反復強調“語言制訂游戲的規則”、“凡不可言說者必保持沉默”,可見語言并非僅僅是可通約的思想的映射,語言本身就決定思想的方式。使這個問題顯得那么低級而業余的,往往是業余程序員討論它的方式:僅僅憑著自己對幾種語言一知半解的認識、僅僅憑著使用一種語言的習慣、甚至僅僅憑著一種宗教狂熱來展開討論,這樣的討論自然是不值一哂的。
我是不是已經提到了“宗教狂熱”這個詞?如果說對語言的喜愛(或者憎惡)可以成為一種宗教狂熱,就有那么一些人可以憑著宗教袢瓤際志畝鰨琁an Joyner無疑屬于這種人。1992年,在Unisys用C++開發UNIXX.500時,Joyner感到C++讓他“不自在”,于是就寫了一篇題為《C++批判》的報告,張貼在Unisys的內部新聞組上。到此為止,一切都沒有什么不同。但Joyner與其他宗教狂熱者的區別在于:他有著遠為深厚的理論基礎,以及鍥而不舍的毅力。于是,《C++批判》有了第二版和在Internet上廣為流傳的第三版。到1998年,這篇典型的論壇文章終于變成了一本書,“批判”也徹底變成了語言之間的比較(參與比較的另外兩種語言是Java和Eiffel),這就是我手上的《對象揭秘:Java、Eiffel和C++》(Object Unencapsulated:Java,Eiffeland C++,人民郵電出版社2003年7月)。
盡管宣稱自己反對“宗教戰爭”,但顯然Ian Joyner是深諳宗教戰爭之道的。從批評的方式來說,他與其他人并無不同:首先立論(“Eiffel是最好的語言”),然后不斷變換角度批評對手——時而是數學理論的完備性、時而是使用的便利和可靠、時而是命名的清晰……論據的選取完全只是為論點服務。也正因為此,這本《對象揭秘》足以讓絕大多數的語言比較者感到羞赧,因為在同樣的批評套路上,Joyner探索的深度和廣度令他們望塵莫及。譬如說,任何一個負責的語言比較者都必然會提到“繼承和類型系統”這一話題,但Joyner卻把這個話題寫成了長達63頁的一章(第5章,“類型擴展:繼承與虛擬”),并在后面的章節(第9章,“類型轉換”)中繼續討論相關的問題。拋開篇幅不談,單是Joyner習以為常的文法解讀、Lamda演算法和簽名變化理論,就足以使不夠水準的批評者自慚形穢了。
因此,在我看來,這本《對象揭秘》完全有理由成為所有語言比較者的必讀書目——也許說“入門書目”會更準確一些?因為你能想到的任何一條批評,Ian Joyner很可能早已做了鞭辟入里的闡述。如果在細讀《對象揭秘》之前妄自作評,結果很可能是貽笑大方。另一方面,在批評的方法上,Joyner為后來者作出了表率:簡單的反對與謾罵毫無意義,用錢鐘書的話來說,“反其道以行也是一種模仿”;只有拿出充足的論據,再拿出合理的解決方案,才稱得上一個高明的批評者。當然,這樣的“入門書目”也許讓門檻顯得太高了一點。但對于“Java和C++誰更好”這樣一個通常只會令人感到莫名煩躁的話題,門檻總是不厭其高的。
像我一樣的Java人常常會抱怨“Java的經典書籍太少了”。C++的經典好書總是層出不窮,實在令人艷羨——當然真正擁有這些書的人也同時擁有不少的煩惱,我就有最深切的體會。在這本《對象揭秘》中,IanJoyner順便也半開玩笑地揭開了這個秘密。也許,這句半開玩笑的話會成為Java人喜愛這本書的另一個理由:
“……學習C++要花那么長時間……,要比Eiffel和Java都長得多。花那么長時間還未必掌握編程或者面向對象設計技術。這也是為什么關于C++的書籍那么多而Eiffel和Java不需要那么多書的原因。”
總結
以上是生活随笔為你收集整理的编程语言的宗教狂热和十字军东征的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计时器、倒计时、打点计时器
- 下一篇: Vue隐藏技能:运行时渲染用户写入的组件