总是有同学争论哪种编程语言强势,C,C++抑或Java。
今天刚看《Java语言精粹》这本书,对“精粹“做了一个很好的解释,我摘录下来和大家一起分享。
“良好”的编程语言
“良好”一个承载了诸多价值的词汇。因此,当我们说一门编程语言(或者它的一部分)“良好”的时候,我们最好想想自己究竟想表达什么?
什么能使一门编程语言“良好”?它的良好又归功于语言中的哪些部分?这样的问题常会引发夹杂着火药味的争论。而这样的争论——它们总是在争论,永远不会单纯的探讨——有一种“无止无休”的天性,与诸如“最好的编辑器是什么”、“最恰当的代码格式化方式是什么”,或者“最合适的开源许可是哪种”这样的争论如出一辙。
关于这种争论,最声名卓著(抑或最臭名昭著)的开端是Richard Gabriel的一篇随笔“论‘更劣即更优’的崛起”(The Rise of “Worse is Better”)。在这篇文章中,Gabriel做了很有说服力的论证:Lisp过去曾经是(现在依然是)比C语言更好的语言,但是由于各种与语言“优良”完全无关的原因,C语言还是赢了。事实上,根据文中的观点,正是因为C语言和UNIX比其他的竞争者(Lisp和Multix)更糟糕,才使得C语言能在程序设计领域成为主导。
这种争论的最主要的问题在于它错误的认为“更糟糕”和“更良好”这样的谓词都可以描述直接依附于实体的属性。说的在简单点,这类争论的都假设你可以在真空中,或者以某种绝对的方式来评判一种语言的优劣。
对于这些概念来说,这样理解是不对的,尤其不能将这样的理解运用于编程语言上,因为它们只是达成其他目的的途径。人们不应该去争辩x语言由于y语言,更不应该做这样的断定,因为要说“优于”,我们需要第三个条件。当你谈论一种编程语言比另一种编程语言更好之前,我们需要知道你正在用它做什么。同样,如果你想讨论一种编程语言比另一种编程语言更糟糕,你也必须说说正在用它做什么。某种语言做某事可能是更良好或更糟糕的,而用于不同的事情孰优孰劣呢?完全可能得到不同的答案。
这很重要,要理解为什么重要,让我们再回到Gabriel关于“更劣即更优”的论点。Gabriel告诉大家:Lisp更简单,是因为他它给予程序员更大的灵活度,被一套更优良的编程工具环绕着,而且更适于代码的快速开发。但是他没有支出的是:在当时C语言可以用在更低廉的硬件上,用C语言编写的代码运行起来比用Lisp编写的代码更快(在廉价的硬件上)。C语言赢得了语言较量这一事实并不能说明人们高估了更差的东西,轻视了更好的东西,只能说明作出决定的人们更多的评估了C语言所擅长的领域,而较少的评估了Lisp所擅长的领域。
Gabriel在其主张中假定:使一门编程语言“良好”的因素是程序员个体使用这种语言时的生产率。即使我们相信他的所有主张,所能做出的推断也不过是Lisp对某位程序员个体来说是更好的编程语言。但语言在这方面的特性必须与其运行环境的成本综合考虑,对于后者,C语言做得更好。事实并不是C语言更差,而是它在处理某些问题上更差,而在处理其他问题上更好。C语言之所以能赢得这场语言战争的胜利,原因在于:对于做决定的人们来说,在低廉硬件上运行更快要比提高单个程序员的生产效率更重要。
分享到:
相关推荐
在探讨单片机编程语言的选择时,我们首先需要了解单片机编程语言的分类,以及它们各自的特点和适用场景。单片机编程语言主要可以分为三大类:机器语言、汇编语言和高级语言。 机器语言是最底层的编程语言,它由一...
### 编程语言排行榜:2013年4月Tiobe编程语言排行榜解析 #### Tiobe编程语言排行榜简介 Tiobe编程语言排行榜是一项反映全球范围内编程语言流行度的重要指标,该榜单每月更新一次,旨在为开发者提供编程语言趋势的...
### 单片机编程语言概览 #### 一、引言 随着电子技术的发展,单片机已经成为现代工业控制和消费电子产品中不可或缺的一部分。选择合适的编程语言对于开发高质量的单片机应用程序至关重要。本文旨在对比单片机领域的...
在IT领域,自制编程语言是一种有趣的挑战,也是深入理解计算机科学和编程原理的重要途径。创建一个编程语言涉及多个层面的知识,包括语法分析、语义分析、编译原理、解释器设计以及错误处理等。让我们详细探讨一下这...
编程语言是计算机世界中的基础工具,它使得人们能够与机器沟通,实现各种复杂的功能。创建自己的编程语言,虽然是一项艰巨的任务,但也充满了挑战与乐趣。本文将深入探讨如何创造编程语言,带你走进这个奇妙的世界。...
### 软件开发与编程语言 在当今数字化时代,软件开发与编程语言的重要性日益凸显。无论是企业级应用还是个人项目,都需要通过编程语言来构建软件解决方案。因此,理解和掌握编程语言及其应用变得至关重要。 #### ...
这些特点为JAVA编程语言在各种操作平台中的运行提供了良好的兼容性。JAVA语言编译时首先生成中间代码,之后转换成机器码,因此能适用于任何平台,具有很好的平台独立性。JAVA语言的可移植性允许程序员编写一次代码,...
### 编程语言发展历史概览 编程语言作为计算机科学的核心组成部分之一,其发展历程见证了信息技术的巨大变革。本文将从20世纪50年代之前的机器语言和汇编语言说起,逐步展开对主流编程语言的起源、演变及其相互之间...
### 编程语言发展历程及其重要知识点 #### 一、引言 编程语言是计算机科学的基础之一,它的发展历程不仅见证了技术的进步,也是程序员们不断追求高效、简洁编码方式的缩影。本文将从20世纪50年代至今,对编程语言的...
- **错误处理**:良好的错误处理机制对于任何编程语言都至关重要,它可以帮助用户理解和修复问题。 - **优化**:编译器可以对生成的代码进行优化,提高程序的运行效率。 - **标准库**:一个编程语言通常需要一套标准...
### 微软架构师谈编程语言发展 #### 关键知识点概览 1. **编程语言发展的多维度考量** - **历史背景**:每种语言都有其独特的历史发展轨迹,如VB从弱类型语言逐渐过渡到强类型语言,而C#自诞生以来即定位为强类型...
根据提供的文件信息,本文将对JavaScript编程语言及与之相关的操作系统——JX进行详细解析,同时探讨其在现代软件开发中的应用。 ### JavaScript编程语言概述 JavaScript是一种广泛使用的、基于原型的、多范式...
阿里云大学提供的编程语言学习内容集锦涉及了众多编程语言的学习资源,这些语言广泛应用于软件开发、数据分析、人工智能和网络服务等领域。以下是对标题、描述和部分内容中所提及知识点的详细阐述: 1. 编程语言的...
### 编程语言简介 在计算机科学领域,编程语言是实现软件开发、系统构建和算法设计的基础工具之一。本文将对几种主流编程语言——C、Java、C++、汇编语言等进行概述,并探讨它们各自的用途、适用场景、优点与不足。...
### Pascal编程语言:深入解析与理解 #### 引言 Pascal是一种历史悠久的编程语言,由瑞士计算机科学家尼克劳斯·维尔特在1968年设计,首次发布于1970年。该语言的设计初衷是作为一种教学工具,旨在促进结构化编程...
单片机编程语言是单片机开发中的核心要素,它们为单片机提供指令,以实现特定的功能。本文主要探讨了两种主要的单片机编程语言——汇编语言和C语言,同时也提到了其他如Basic和PL/M语言。 汇编语言是单片机编程的...
在计算机科学领域,编程语言是实现计算和软件开发的基础工具。不同的编程语言有着各自的特性和用途,虽然它们之间有许多共通之处,但也存在显著的区别。本文将以Foxpro、Basic、C语言和Pascal语言为例,深入探讨这四...
CG(C for Graphics)是一种专门用于GPU编程的高级编程语言,由NVIDIA公司推出。CG语言的设计目的是为了简化GPU编程的复杂度,使开发者能够更加专注于算法本身而不是底层细节。CG语言具有以下几个特点: 1. **易学...