几种计算机语言的评价

今天在网上看到一篇《Eric Raymond对于几大程序开发语言的评价》。

我对编程懂的很少,一直想加强学习,就把它转贴过来了。

我的感受是学习程序语言,一定必须从徒手写每一行代码开始学,这样可能是最容易的方法。我最早学的是微软的Visual Basic,按理说BASIC比较简单,应该最好学,可是微软帮你把所有图形界面都做好了,成了一个完全的黑箱,用户等于在对这个黑箱编程,对程序的实际运行流程一点感觉也没有。我学了半年,依然觉得没学会编程。从那时起,我就开始觉得不能跟着微软走了。

后来,我又去学了C语言。这次就从命令行下开始学,一行一行的写,然后再编译。C是公认比较难学的语言,但是我下了决心从最低的起点开始学,学习环境是将近10多年前推出的Turbo C 3.0。虽然我现在C的水平还是很低,但是感觉对C的认识很清楚,许多原理上的问题都理解了。

C编程比较麻烦,我下一门想学perl或者python。我正好有一些想法想实现,急需自编软件处理数据,希望今年之内可以解决掉。

====================

Eric Raymond对于几大程序开发语言的评价

【译者注】

Eric Raymond是开源运动的领袖人物,对于UNIX开发有很深的造诣,主持开发了fetchmail。他的《大教堂与集市》被奉为开源运动的经典之作。下面对几大开发语言的评价非常中肯,是我近年来看到的比较出色的评论。特别是他评价中抱有的那种"简单就是好"的思想,很值得我们深思。我特别选译出一些段落,供大家阅读思考。原文参见:http://www.catb.org/~esr/writings/taoup/html/ch14s04.html

Raymond此文不是在泛泛地去谈语言的优劣,而是要回答一个问题:在UNIX下开发开源项目,如何选择开发工具?我翻译的很零散,建议大家去看原文。

C

虽说C语言在内存管理方面存在严重的缺陷,不过它还是在某些应用领域里称王称霸。对于那些要求最高的效率,良好的实时性,或者与操作系统内核紧密关联的程序来说,C仍然是很好的选择。

C良好的可移植性也为它加了分。不过现在很多其他的语言可移植性越来越好,C在这方面的优势可能会逐渐丧失。

现有的很多程序可以产生非常棒的C代码,比如语法分析器、GUI Builder等,这时候C语言也是有吸引力的,因为你所需要编写的代码只是整个程序的一小部分。

再有,我们当然应该认识道,C语言对于程序员来说具有无可替代的价值。就我这里讨论的每一种语言而论,只要你发掘的足够深,到最后你会看到它们的内核都是用纯正的、可移植的C写成的。

到了今天这个时候,我们最好把C看成是UNIX虚拟机上的高级汇编语言。

就算是其他的高级语言完全可以满足你的工作需要,抽出时间来学习C语言也仍然有益,它能帮助你在硬件体系的层次上思考问题。

即使到了今天,最好的C语言教程仍然是1988年出版的K&R第二版The C Programming Language.

总结:C最出色的地方在于其高效和贴近机器,最糟糕的地方在它的内存管理地狱。

C++

C++最初发布于1980年代中期,当时面向对象语言被认为是解决软件复杂性问题的银弹。C++的面向对象特性看相去使其全面超越了C,支持者认为C++将迅速把上一代语言挤到陈列馆里去。

但是历史并非如此。究其原因,至少有一部分归咎于C++本身。为了与C兼容,C++被迫作出了很多重大的设计妥协,结果导致语言过分华丽,过分复杂。为了与C兼容,C++并没有采用自动内存管理的策略,从而丧失了修正C最严重问题的机会。

另外一部分原因,恐怕要算到面向对象身上。看起来OO并没有很好的达成人们当年的预期。我就这个问题调研过,我发现使用OO方法导致组件之间出现很厚的粘合层,并且带来了严重的可维护性问题。今天让我们来看看开放源码社区,你会发现C++的应用还是集中在GUI,游戏和多媒体工具包这些方面,在其他地方很少用到。要知道,面向对象也只是在这些领域被证明非常成功,而开放源码社区的选择,很大程度上体现了程序员的自由意志,而不是公司管理层的胡乱指挥。

也许C++实现OO的方法有问题。有证据表明C++程序在整个生命周期的开销高于相应的C, Fortran和Ada程序。不过,究竟这是否应该归咎与C++的OO实现上,还不清楚。

最近几年,C++加入了很多非OO的思想,其异常思想类似Lisp,STL的出现是非常了不起的。

其实C++最根本的问题在于,它基本上只不过是另一种传统的语言。STL中的内存管理比先前的new/delete和C的方案要好的多,但是还是没有解决问题。对于很多应用程序而言,其OO特性并不明显,相比与C,除了增加复杂度之外没有获得很多好处。

总结:C++优点在于作为编译型语言,把效率与泛型和面向对象特性结合起来,其缺点在于过于华丽复杂,倾向于鼓励程过分复杂的设计。

Java

Java的设计很聪明,它采用了自动内存管理,这是最大的改进,支持OO设计带来的好处虽然不那么突出,不过也很值得赞赏,相比C++,其OO设计规模小而且简单 。

相对于Python而言,Java有一些明显的失误。有些地方设计的还是太复杂,甚至有缺陷。Java的类可见性和隐式scoping规则太复杂了。Interface机制是为了避免多继承带来的问题而设计的,但是要理解和使用它还是挺难。内部类和匿名类导致令人困惑的代码。缺乏有效的析构机制,使得除了内存之外的其他资源(比如互斥量和锁)管理起来很困难。Java的线程不可靠,其I/O机制很强大,但是读取一个文本文件却非常繁琐。

Java没有管理库版本的机制,从而形式上重蹈了了Windows DLL地狱的覆辙。在类似应用服务器这样的环境里,这引起了大量的问题。

总体而言,我们可以说除了系统编程和对效率要求极高的程序之外,Java在大部分领域优于C++。经验表明,Java程序员似乎不太容易象C++程序员那样构造过度的OO层,不过在Java中这仍然是个严重问题。

Java是否优于诸如Perl, Python这样的语言?我们还不是很清楚,很大程度上似乎跟程序规模有关。其擅长的领域基本上于Python相似,在效率上无法跟C/C++相提并论,在小规模的、大量使用模式匹配和编辑的项目里也无法匹敌Perl。在小项目里,Java显得过分强大了。我们猜测Python更适合小项目,而Java适合大项目,不过这一点并没有得到有力的证明。

Python

Python是一种脚本语言,可以与C紧密整合。它可以与动态加载的C库模块交换数据,也可以作为内嵌脚本语言而从C中调用。其语法类似C和模块化语言的杂合,不过有一个独一无二的特征,就是以缩进来确定语句块。

Python语言非常干净,设计优雅,具有出色的模块化特性。它提供了面向对象能力,但不强迫用户进行面向对象设计。其类型系统提供了强大的表达能力,类似Perl,具有匿名lambda表达式,这点又让Lisp黑客们感到亲切。Python依靠Tk提供方便的GUI界面开发能力。

在所有的解释型语言里,Python和Java最适合多名程序员以渐进方式协同开发大型项目。在很多方面,Python比Java要简单,它非常适合与构造快速原型,这一点使得它对于Java有独特优势:对于那些既不很复杂,又不要求高效率的程序,Python十分合适。

Python的速度没法跟C/C++相比,不过在今天的高速CPU上,合理地使用混合语言编程策略使得Python的上述弱点被有效地弥补。事实上,Python几乎被认为是主流脚本语言中最慢的一个,因为它提供了动态多态性。在大量使用正则表达式的小型项目,它逊于Perl。对于微型项目而言,shell和Tcl可能更好,Python显得太过强大了。

总结:Python最出色的地方在于,它鼓励清晰易读的代码,特别适合以渐进开发的方式构造大项目。其缺陷在于效率不高,太慢,不但跟编译语言相比慢,就是跟其他脚本语言相比也显得慢。

时间: 2024-09-23 15:07:08

几种计算机语言的评价的相关文章

评价网络广告效果的三种方法

广告|评价|网络  网络广告最为得意之处,就在于其可测量性,因而可以制订准确的收费标准,如基于广告显示次数的CPM计价法,或者基于广告所产生效果的CPC(每点击成本)或CPA(每行动成本)计价法,但是,随着BANNER广告的平均点击率从最初辉煌时期的30%降低到0.5%以下,如果仍然按照可测量的反馈信息来评价网络广告,显然不能充分反映真实的效果.     网络广告的效果评价关系到网络媒体和广告主的直接利益,也影响到整个行业的正常发展,广告主总希望了解自己投放广告后能取得什么回报,于是就产生了这样

写原创文章的五种方法

网上很多介绍如何原创和伪原创的文章,其中确实有一些方法很好,值得我们学习和借鉴,举几个例子比如:改标题,改内容,改段落,改结尾等等.还有文章开始的第一段自己写,文章结尾加上版权说明欢迎转载请保留本站链接之类的文字.稍微聪明一点的利用程序或者软件进行关键词批量替换,加入随即干扰码,或者进行文章前后语句颠倒,段落错位等等都是非常好的办法. 这些方法都是一些常规方法,下面本人就介绍一下我自己想的一个办法,就是不按套路制造出伪原创文章. 1 这个办法就是我们可以去国外的网站找文章,然后用GOOGLE等翻

一文学会最常见的10种NLP处理技术(附资源&代码)

自然语言处理(NLP)是一种艺术与科学的结合,旨在从文本数据中提取信息.在它的帮助下,我们从文本中提炼出适用于计算机算法的信息.从自动翻译.文本分类到情绪分析,自然语言处理成为所有数据科学家的必备技能之一. 在这篇文章中,你将学习到最常见的10个NLP任务,以及相关资源和代码. 为什么要写这篇文章? 对于处理NLP问题,我也研究了一段时日.这期间我翻阅了大量资料,通过研究报告,博客和同类NLP问题的赛事内容学习该领域的最新发展成果,并应对NLP处理时遇到的各类状况. 因此,我决定将这些资源集中起

NLP入门+实战必读:一文教会你最常见的10种自然语言处理技术(附代码)

自然语言处理(NLP)是一种艺术与科学的结合,旨在从文本数据中提取信息.在它的帮助下,我们从文本中提炼出适用于计算机算法的信息.从自动翻译.文本分类到情绪分析,自然语言处理成为所有数据科学家的必备技能之一. 在这篇文章中,你将学习到最常见的10个NLP任务,以及相关资源和代码. 为什么要写这篇文章? 对于处理NLP问题,我也研究了一段时日.这期间我需要翻阅大量资料,通过研究报告,博客和同类NLP问题的赛事内容学习该领域的最新发展成果,并应对NLP处理时遇到的各类状况. 因此,我决定将这些资源集中

爱恨交织!我们经常抱怨却离不开的7种语言

[编者按]本文作者 Peter Wayner 是 InforWorld 特约编辑,也是超过16本书的作者,其著作涉及开源软件.全自动汽车.保密加强型计算.数字交易等广泛题材.其最新著作为<未来的驾座(Future Ride)>第二版,主要描绘全自动汽车在未来将如何改变世界.本文系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文. 但凡是以编程为生的人,肯定不会给出不要心怀怨怼的好意规劝.只要经历过复杂到万劫不复的逻辑,你就会了解那些最糟糕的程序错误有多恐怖. 当然,每个人都会爱上他

斯坦福深度学习课程第二弹:词向量内部和外部任务评价

像追美剧一样追课程! 大数据文摘已获斯坦福大学深度学习课程CS224d翻译授权, 重磅启动"斯坦福深度学习课程CS224d"的翻译工程, 所有译文将会免费发布,计划每周发布1篇. 期待你的加入,加入要求见文末 报名请点击文末"阅读原文". 大数据文摘作品,转载需授权 翻译:熊杰 王昱森   调整校对:寒小阳 龙心尘 特别鸣谢:曾宪超 大数据文摘"机器学习"专栏介绍 本文为大数据文摘机器专栏推出的[数据科学/机器学习]学习分享项目启动篇,我们将以S

Java线程模型缺陷研究

Java 编程语言的线程模型可能是此语言中最薄弱的部分.它完全不适合实际复杂程序的要求,而且也完全不是面向对象的.本文建议对 Java 语言进行重大修改和补充,以解决这些问题. Java 语言的线程模型是此语言的一个最难另人满意的部分.尽管 Java 语言本身就支持线程编程是件好事,但是它对线程的语法和类包的支持太少,只能适用于极小型的应用环境. 关于 Java 线程编程的大多数书籍都长篇累牍地指出了 Java 线程模型的缺陷,并提供了解决这些问题的急救包(Band-Aid/邦迪创可贴)类库.我

谷歌大牛说:为什么 Kotlin 比你们用的那些垃圾语言都好

为什么说 Kotlin 比你们用的那些垃圾语言都好 说真的,其实我不想去攻击你们的语言信仰--至少不会"大大地"想.毕竟你喜欢的语言大放异彩的时期,可能要追溯到冰川时代了,对不?如果你喜欢的语言到今天还没有死,那只能说明这门语言在逐渐地改进和更新,保持与时俱进. 但改进的速度呢?好吧--假设你现在用的语言碰巧是 Java,并且你也沉溺于 Java 曾经是一门非常优秀的语言的想法,那么你就完蛋了.而且是早就完蛋了.尽管人类都不太喜欢思考终极命运问题,但是相比于在 20 多年前刚刚问世,J

Java线程模型缺陷_JSP编程

Java 编程语言的线程模型可能是此语言中最薄弱的部分.它完全不适合实际复杂程序的要求,而且也完全不是面向对象的.本文建议对 Java 语言进行重大修改和补充,以解决这些问题. Java 语言的线程模型是此语言的一个最难另人满意的部分.尽管 Java 语言本身就支持线程编程是件好事,但是它对线程的语法和类包的支持太少,只能适用于极小型的应用环境. 关于 Java 线程编程的大多数书籍都长篇累牍地指出了 Java 线程模型的缺陷,并提供了解决这些问题的急救包(Band-Aid/邦迪创可贴)类库.我