使用Python进行编程是否比使用C,C ++或Java更快?[关闭]


27

之间普遍认为,越动态和松散地键入,它将使程序员的工作效率越高。Guido van Rossum于1998年撰写了有关使用python进行编程提高生产力的文章,并在网上搜索时,我仍然看到人们引用了这个确切的说法:

从语法上讲,Python代码看起来像可执行的伪代码。使用Python进行程序开发比使用C / C ++快5-10倍,比使用Java快3-5倍。在许多情况下,可以使用Python编写应用程序的原型,而无需编写任何C / C ++ / Java代码。通常,原型具有足够的功能,并且性能足以作为最终产品交付,从而节省了可观的开发时间。在其他时候,原型可以部分或全部转换为C ++或Java-Python的面向对象特性使转换成为一个简单的过程。

这个问题是否经过科学评估?如果不适合那么也许适合同级脚本语言(如

我不是在寻找合理化,类比或解释的理由,否则可能很难回答,除非研究人员或专家的意见花了一些时间来研究这个问题。

我最初是在skeptics.SE上提出这个问题的,有人建议我也在这里提出这个问题。


25
好吧,由于您限制了可能的答案,因此,我敢于提出一个问题,首先要提出一个问题,首先要回答这个问题(恕我直言):是否存在可靠且已确定的度量标准来衡量“程序员的生产率”?
Paul Michalik

1
@Paul Michalik-我认为任何研究生产力的研究论文都会包含一个定义(否则很难衡量)。因此,如果有人引用研究,将答案包含在定义中会很有帮助。(我猜)可能有几种不同的完全可接受的方法来衡量生产率,也许“通过多个单元测试所花费的时间”就是其中一种。
Kit Sunde

1
@Paul Michalik-当然,您在程序员的书,博客,演讲和文章中阅读的语句中有多少实际上是根据经验进行测试的?我敢肯定,衡量生产率的方法有好有坏。例如。“咖啡消耗/时间”可能比经典的“代码/时间行”更糟糕。我将对我们已经看到的关于特定生产率的主张保持判断力,并可以据此论证其优点。生产力的主张也不只是简单的错误,当人们不试图破坏该指标时,我敢肯定“代码/时间”会衡量某些东西
Kit Sunde

1
:你可能有兴趣在这篇文章中citeseerx.ist.psu.edu/viewdoc/...
DistantEcho

1
@ChrisF-您是说这个问题不适用于Programmers.SE吗?对怀疑论者来说肯定是这样,它似乎也适用于此。我的印象是,直到我阅读了Robert Cartaino最近对这个问题的评论时,您才应该这样做:skeptics.stackexchange.com/q/1963/631,该评论本质上说,如果这两个社区都感兴趣,那是完全可以的,并且我只是在另一个用户提示下才这样做。考虑到这个问题越来越令人不安,这个社区似乎也很感兴趣。
Kit Sunde

Answers:


17

Ousterhout 关于脚本语言的文章1指出,编程进行的级别越高,程序员的生产率就越高。如果我们按照Boehm所说的2,程序员在给定时间内可以写的行数是恒定的,并且不依赖于语言或其类型(低级,系统编程,脚本编写),那么人们可以轻易相信这种说法。与脚本语言相比,与系统编程语言相比,所得到的每源代码行指令的比率可以好一个数量级(或几个)。

由于脚本语言严重依赖现成的实用程序来执行常见任务(例如,数据结构,字符串处理),因此它们的主要用途通常是通过提供易于学习且可高效维护程序的语法,以降低运行速度为代价来提高生产率。用。当需要最高执行速度时,人们不会求助于脚本语言。

[1]:JK Ousterhout,脚本:21世纪的高级编程,计算机(IEEE),1998
[2]:B. Boehm,软件工程经济学,Prentice Hall,1981年


9
尽管这是一个很好的答案,但是不要忘记,现代非脚本语言也往往会包含现成的实用程序,这些实用程序可以加快开发速度。想到了C#。任何觉得Python比C#具有更多固定功能的人都只是比Python更了解Python。实际上,它们都具有广泛且可比的“内置”实用程序。
罗曼·斯塔科夫

@romkyns,对于任何不重要的项目,您需要编写很多代码。即使您有很多乐高积木,仿生生物也不会神奇地聚在一起。

2
@Thor,但将Lego积木预先放置确实有很大帮助,而不必先建造油钻,塑料工厂和乐高积木挤出机。
罗曼·斯塔科夫

2
c ++和Java都具有通用容器,而c ++ 11则具有用于排序算法和迭代器等的完整标准库。此外,我花了大部分的编程时间来确定我需要做的事情,而不是打字。因此,我认为仅计算完成某件事所需的行数并不能清楚地表明您使用该语言的程序员的速度。
山姆·雷德韦

7

如果以“编写特定简单程序的时间”来衡量生产率,那么它很大程度上取决于程序员的经验和敏捷的头脑,而不是您真正评估程序员的语言而不是语言。

我相信定时代码竞赛表明该语言对于这类任务并不重要。没有一种语言比其他语言更容易赢得挑战(至少在允许相对流行的语言的情况下也是如此)。

如果将性能衡量为以给定语言编写的“最佳程序的有效性”,则它与语言的依赖程度甚至更低。例如,参见Galcon AI竞赛结果。获胜者用Lisp编写。但是,下一个Lisp条目排名#280。这说明了该语言对于有效编写出色的AI的适用性?我认为没有。它只是告诉我们,“ bocsimacko”提出并实现了最有效的算法。记录下来,时间并不是这场比赛的主要因素-人们有两个多月的时间来开发自己的代码。

最后,如果您将绩效衡量为“维护项目的长期成本”,那么我认为您会有所作为。特别是如果您只雇用最优秀的人才来工作,并且以工时而非美元来计算成本。对于哪种语言最适合这个问题,我有很强的见解,但是没有确凿的证据可以将您链接到我,我将忽略此观点。也许其他人具有此类表演的链接。


7
“您实际上是在评估程序员,而不是在评估语言”-如果这实际上是科学地完成的,则不是。以100名程序员为例。选择一个常规项目,例如“编写具有这些特定要求的日历应用程序”。要求与自动单元测试有关。50个程序员用C ++编写应用程序,50个用Python编写,是随机选择的,因此,对质量开发人员的投入是平均的。结果将是将平均完成时间与通过的单元测试数量相结合的得分。将Python结果的平均值与C ++结果的平均值和... SCIENCE进行比较!
Morgan Herlocker 2011年

2
@Prof也许如果每个人都有一千个……但是,您如何控制只有具有一定心态和能力的人才能了解C ++?
罗曼·斯塔科夫

您可以只从能够通过C ++和Python能力测试的人员那里获取样本。我的许多老教授都在做非常相似的研究。此外,您还做出了一些其他人在这里讨论过的假设:programmers.stackexchange.com/q/73715/3792
Morgan Herlocker 2011年

6

http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdf是为数不多的研究之一,据我所知,它们对各种语言的生产率进行了实际的直接比较。它很旧,但是如果您发现有趣的主题,则值得阅读。比较有许多主要缺点,本文对此很诚实。

总体结果是,低级语言(例如C,C ++)需要花费更长的时间编写,可以占用更少的内存并可以更快地运行。但是具有很高的可变性。高级脚本语言往往需要花费一半的时间来编写,并且方法的可变性较小。最初令人惊讶的是,确实存在一种明显的方式来使用脚本语言进行操作。

请注意,Java的所有性能指标都应该花很多精力-该论文是在90年代人们对Java有了丰富经验之前以及JVM得到很好优化之前编写的。这两个因素都应产生重大影响。


1

概括地说,用Python编写程序通常比用C,C ++,Java编写相同程序要快。

它也可能运行得更慢。

当然,在某些特定的应用程序中,使用其他语言可能会更快,因为所涉及的某些任务“更加本地化”。

尽管我还没有任何研究证实这种速度/生产率的提高(正如一位评论者所述,要精确地衡量这可能很难),但已经对语言的表现力进行了直接研究。

我认为语言表达能力和编程速度之间存在一定的联系。只需描绘一个简单的迭代模式,以及Pythonic的for循环或列表理解如何更加简洁。它不仅可以立即被更快地键入,而且还消除了一对一错误,索引越界以及其他可能显着降低编码过程速度的问题。

该表显示了语言表达率的估计值。虽然应该加一点盐,但它所提到的脚注还是很值得的。

http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness


-5

上一次我使用Java(承认是前一段时间)时,它花了一个充满代码的屏幕来打开和写入文件。将其与Python或Perl中的几行进行比较,您可以猜测哪一条更快。

显然,所有语言都有其优点和缺点,但是对于大多数任务而言,Python的编写速度会更快。


6
“花了整整代码屏幕打开和写入文件”:将这个变成一个工具类有两个方法write(),并read()在你的Java项目文件访问其余的将是尽量精简Python编写的。我认为您的示例过于局限,无法比较Python和Java(即使我同意Java往往更冗长)。
Giorgio

可以,但是Python,Perl和更高版本的语言通常已经事先考虑了这些内容,因此您无需编写实用程序类(或不需要编写太多类)。使用实用程序类仍然需要花费时间,并且是可重用代码的原理,根据您的实际工作,该代码在Java和Python上均适用。
wobbily_col

假设Java仅需要50至60行代码即可打开和写入文件。这根本是不正确的。
h22
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.