`
isiqi
  • 浏览: 16178075 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

编程语言的宗教狂热和十字军东征

阅读更多

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

分享到:
评论

相关推荐

    狂热和热爱是两个概念

    狂热和热爱是两个概念

    Python语言完整版教学课件全书电子讲义(最新).pptx

    Python语言是当前最流行的编程语言之一,具有跨平台、开源、免费、解释型、高级动态编程语言等特点。 Python语言的应用领域非常广泛,包括计算机安全、网络安全、软件漏洞挖掘、软件逆向工程、软件测试与分析、电子...

    C++新特性详细解析语言核心特性解析

    于是,贾尼想到了做一种新的编程语言,它既有C的高效性,又有Simula的自然和优雅。经过近5年的工作,1984年,C++语言的参考手册在贝尔实验室内部发布了。1985年,C++的商业版本对外发布,C++开始了走向世界的步伐。 ...

    基于C语言自制编程语言项目源码+运行说明(课程大作业).zip

    基于C语言自制编程语言项目源码+运行说明(课程大作业).zip Feature - [面向对象](./tests/inheritance.sp) - [协程](./tests/multithreaded_test.sp) - [标准库](./tests/map_hashobj.sp) - [闭包](./tests/map_...

    大数据技术之Scala.docx

    Scala是一门多范式的编程语言,支持面向对象和函数式编程,运行于Java虚拟机(JVM)之上,可以调用现有的Java类库,实现两种语言的无缝对接。 Scala的发展历史可以追溯到2001年,马丁·奥德斯基(Martin Odersky)...

    c语言c++语言编程软件Dev C++

    它集合了GCC、MinGW等众多自由软件,并且可以从工具支持网站上取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作,并且你拥有对这一切工具自由使用的权利,包括取得源代码等,前提是你也必 ...

    Swift语言快速入门教程

    由于Swift出现得晚,所以她拥有了目前世界几乎所有编程语言的优点,而没有目前世界所有编程语言的缺点,Swift她真的太漂亮了。下面我们开始一步一步认识她。 运行速度 从苹果官方所给出的数据来看,Objective-C比...

    第章-Java概述ppt课件.ppt

    即计算机的类型和操作系统是不一样的,例如SUN工作站的硬件是SPARC体系,软件是UNIX中的Solaris操作系统,而PC机的硬件是INTEL体系,操作系统是windows或者是Linux,因此相应的编程语言基本上只是适用于单机系统,...

    Python程序开发教程.pptx

    Python语言已经成为一门流行的编程语言,尤其是在互联网环境下。它是TIOBE语言排行第八,Google的第三大开发语言,Dropbox的基础语言,豆瓣的服务器语言。 四、Python语言的交互式命令行: Python可以单步直译运行...

    马太效应下的短视频狂热原因——以抖音APP为例.pdf

    马太效应下的短视频狂热原因——以抖音APP为例.pdf

    狂热论坛企业版C#.NET网站访问统计系统

    狂热论坛企业版C#.NET网站访问统计系统.rar

    Dev-Cpp 5.4.2 MinGW 4.7.2 32位版本 32bit IDE C++编程工具 ORWELL c++ 2013年6月更新

    Dev-C++是一个Windows环境下C/C++的集成开发环境(IDE),它是一...多国语言版中包含简繁体中文语言界面及技巧提示,还有英语、俄语、法语、德语、意大 利语等二十多个国家和地区语言提供选择。该软件采用 Delphi 开发。

    你会教自己的孩子学习编程吗【育儿知识】.doc

    由于从小就对电脑和程序设计充满狂热的兴趣,卡马克依靠自学和钻研,达到了今天的成就,他甚至相信可以用编程完成一切。 Markus Persson,不ch,这个网络用户名显得更有知名度,技术圈许多人将他视为独立游戏开发...

    德国和日本对工业4.0并不狂热.docx

    德国和日本对工业4.0并不狂热docx,提供“德国和日本对工业4.0并不狂热”免费资料下载,本文阐述了德国和日本为什么对工业4.0并不狂热,可供学习使用。

    DEVCPP编程软件

    它集合了GCC、MinGW等众多自由软件,并且可以从工具支持网站上取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作,并且你拥有对这一切工具自由使用的权利,包括取得源代码等,前提是你也必 ...

    语言学家:语言狂热。 如果错误地报告了存储库的语言,请向我们发送请求请求!

    提出问题或创建请求请求之前,请参阅和 。语言学家的工作方式Linguist列出了从知道的列表,并使用多种方法尝试确定每个文件使用的语言以及整个存储库分类。 语言学家首先浏览存储库中的所有文件,然后排除所有确定...

    Deep Sea Fishing Mania 深海钓鱼狂热Unity企鹅钓鱼游戏项目源码C#

    在现实主义和刺激的十字路口,“深海钓鱼狂热”邀请玩家踏上超越传统钓鱼游戏的海洋冒险之旅。 该游戏以深海为背景,让玩家沉浸在视觉上令人惊叹的动态环境中,追求最大和最奇异的渔获成为最终目标。 特征 AdMob 和 ...

    狂热论坛企业版C#.

    狂热论坛企业版C#. 狂热论坛企业版C#. 狂热论坛企业版C#.

    基于C语言编程实现的小车系统驱动程序+应用程序接口源代码.zip

    基于C语言编程实现的小车系统驱动程序+应用程序接口源代码.zip个人大三学期的课程设计、经导师指导并认可通过的高分大作业设计项目,评审分97分。主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的...

Global site tag (gtag.js) - Google Analytics