业余程序员最喜欢做的一件事就是对不同的语言进行比较。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不需要那么多书的原因。”

编程语言的宗教狂热和十字军东征相关推荐

  1. VS.NET 学习方法论

    --我的VS.NET学习之旅 屠恩海(SunHai) 开发工具:Microsoft Visual Studio .NET 2003 操作系统:Windows XP 题记:即使你没有一点编程经验,只要你 ...

  2. VS.NET 学习方法论——我的VS.NET学习之旅

    开发工具:Microsoft Visual Studio .NET 2003 操作系统:Windows XP 作者:屠恩海   来源:http://sunhai.tianyablog.com      ...

  3. 我的VS.NET学习之旅

    [精选转载]VS.NET 学习方法论 --我的VS.NET学习之旅 屠恩海(SunHai) 开发工具:Microsoft Visual Studio .NET 2003 操作系统:Windows XP ...

  4. VS.NET 学习方法论 ——我的VS.NET学习之旅

    VS.NET 学习方法论 --我的VS.NET学习之旅 屠恩海(SunHai) 开发工具:Microsoft Visual Studio .NET 2003 操作系统:Windows XP 题记:即使 ...

  5. 敲响OO时代的丧钟!

    一.基本概念 1.软件与硬件的区分 "拜托!"肯定有朋友会说:"我们都是X年的老程序员了,就算水平不是出类拔萃,至少软件硬件总是分得清的!"那么什么是& ...

  6. VS.NET 学习方法论——tuenhai的 VS.NET 学习之旅

    <script language='javascript' src='http://www.shiqiaotou.com/donetk/Header.js'></script> ...

  7. 谈谈科学与宗教的关系

    有人说物理的极致是宗教,数学的极致是哲学,今天我们讨论一下前半段的内容,后面那半段交给更懂数学的朋友来讲吧.青润敢讲这个话题,其中一个原因就是曾经全心投入到物理学领域很多年,也曾经差点进入冬令营,原因 ...

  8. 在不确定的时代,用理性的思考去对抗群体的疯狂

    来源:混沌巡洋舰 本文整理摘编自<群体的疯狂> 威廉·伯恩斯坦著 王兴华译 中信出版集团 2022.11 近两个世纪之前,一位年轻的名叫查尔斯•麦基的苏格兰人,以令人难忘的方式同时攻击上帝 ...

  9. 寻访罗宾汉(转自清韵论坛冯·迪特里施的专栏)

    原文见:http://www.qingyun.net.cn/cgi-bin/personal/pview.cgi?op=art&pn=feng&ord=10 本来,国王无非就是打下了江 ...

  10. 读《禅与摩托车维修艺术》

      看到这本书的书名,千万不要认为这是一本讲解摩托车维修的书.实际上,把书名转换为"禅与代码编写的艺术"也是毫无违和感的.   实际上这是一本哲学书籍.作者不断的叩问自己,在人迹罕 ...

最新文章

  1. pgpool-II中间件
  2. 神经网络 | 网络优化-线性神经网络-delta学习规则-梯度下降法(单层感知器-异或问题Python源代码)
  3. Java学习笔记之equals和Objects.equals
  4. linux怎么同时查看两个文件,MultiTail - 在单个Linux终端中同时监视多个文件
  5. python实现录音小程序 界面_小程序如何实现录音 播放功能
  6. 信息学奥赛一本通 2070:【例2.13】数字对调
  7. ACCESS使用VBA编辑器,ACCESS崩溃后的处理
  8. vs2013 命名空间“Microsoft.Office”中不存在类型或命名空间名称“Interop”。是否缺少程序集引用?...
  9. MonkeyEye电影售票系统--系统顺序图
  10. 燕无锡计算机学校,第二十七届中国儿童青少年计算机表演赛无锡赛区决赛成绩-无锡少年宫.doc...
  11. 软路由WIFI的方案,pcie网卡和硬件无线AP那种最稳定靠谱?
  12. 浅谈公安大数据的建设
  13. 写在NPL小书出版之时
  14. Regulator子系统
  15. mysql 计算农历_MySQL 获取农历年函数
  16. Azure App Service Plan
  17. 北京大学研究员董艳:数据功能开放管道——助力政府数据资源共享交换和融合应用...
  18. linux查看网卡驱动信息,linux 查看网卡驱动信息
  19. java计算机毕业设计线上投保的设计源码+系统+数据库+lw文档+mybatis+运行部署
  20. 分享一段wave降噪处理代码

热门文章

  1. C语言复习——投票问题——动态数组(2021.11.20)
  2. 按压式按摩靠背的设计
  3. 椭圆部分面积计算公式及微积分推导过程
  4. 唐诗欣赏静夜思用html设计,古诗鉴赏:静夜思
  5. 凑微分公式_不定积分的计算凑微分法.ppt
  6. LoadRunner牛刀小试
  7. redhat红帽官方软件仓库同步方案
  8. 基于Arduino的吉他调音器
  9. 王家林人工智能AI第13课:使用Logistic Regression在Social Network上销售汽车并进行可视化性能评估老师微信13928463918
  10. 慎用 Xmarks 多平台同步书签