各种语言的开发时间

问题描述 投票:34回答:15

有没有人知道在各种语言中开发相同应用程序需要多长时间的研究或基准?我真的在寻找Java与C ++,但任何比较都会很有用。我觉得代码完成中有一节关于此,但我的副本正在运行。

编辑:

这个问题有很多有趣的答案,但似乎缺乏真正好的研究。我在关于这个问题的meta上做了一个proposal

programming-languages performance
15个回答
38
投票

Pratt&Whitney是民用和军用喷气发动机的供应商,多年前对此进行了一项研究,但实际上没有打算进行这项研究。

在20世纪90年代,他们继续执行其他人所做的相同指标。他们收集了大量关于喷气发动机控制器项目的数据,包括时间卡数据。他们嘎吱作响。那些不得不扼杀数据的拙劣的人物注意到了结果:军事项目统一的程序员生产率是民用项目的两倍,缺陷密度是民用项目的四分之一。

这本身就很重要。这意味着你只需要一半的程序员,而且你不会花费相当多的时间来修复bug。更重要的是,这是一个苹果对苹果的比较。喷气发动机控制器是喷气发动机控制器。

然后他去寻找候选人的解释。所有常见的候选人:个人经验,团队规模,工具集,软件流程,需求稳定性,一切都被淘汰出局,当被看到这些项目的故事在两侧统一相同时,它们被排除在外。走道。在一天结束时,只有一个统计上显着的差异出现。

民用项目是用您能想到的每种语言编写的。军事项目都是用阿达写的。

在每一个案例中,与Pratt&Whitney的喷气发动机控制器相比,对于其他所有人来说,使用Ada可以提高生产率和缺陷密度的四分之一。

我知道飞猴代码会说些什么。 “你可以用任何语言做好工作。”从理论上讲,这是事实。然而,在实践中,似乎至少在普惠公司,语言有所不同。

最后我听说过,Pratt&Whitney高层管理人员下令所有喷气发动机控制器项目都将在Ada完成。

不,我没有引用。没有写过纸。我在这个故事中的消息来源是那些喋喋不休的闷棍。

顺便提一下,这是在波音公司完成777之前,以及在777刹车分包商故事发生之前。但这是另一个故事。


1
投票

这个问题有点过时了。仅仅基于语言选择来关注开发时间的价值有限。还有许多其他因素与语言本身具有相同或更大的影响:

  1. 可用/使用的库或框架。
  2. 所需的质量水平(即缺陷数)。
  3. 应用程序的类型(例如GUI,服务器,驱动程序等......)
  4. 所需的可维护性水平。
  5. 开发者使用该语言的经验。
  6. 构建应用程序的平台或操作系统。

作为一个例子,许多人会说Java是构建企业(业务线)应用程序而不是C ++的更好选择。这通常不是因为语言本身,而是认为Java具有更好(或更成熟)的Web服务器和数据库框架。这可能是也可能不是,但这不是重点。

您甚至可能会发现在不同的操作系统或平台上使用相同的语言构建应用程序会产生大大不同的开发时间。例如,在Linux上使用C ++构建GUI应用程序可能需要比使用C ++的基于Windows的GUI应用程序更长的时间,因为在Linux上可以使用不太广泛和成熟的GUI库(这也是值得商榷的)。


1
投票

Language/framework comparison for web applications

Plat_Forms项目为Web应用程序提供了此类型的一些信息。

有三项研究具有不同的任务(2007年,2011年,2012年完成),所有以下格式:三个专业开发人员的几个团队在两天内在受控条件下实施相同的应用程序。它涵盖了Java,Perl,PHP和Ruby,并且每种语言都有多个团队。评估报告的不仅仅是开发时间。

例如,包括迭代的结果

  • 语言和框架的经验似乎比该框架更具相关性。
  • Java倾向于诱导团队进行繁重的构建,而Perl则诱使他们制作出务实(并且非常方便)的构造。

包括迭代二的结果

  • Ruby on Rails在这类项目中的效率更高(由于其持续时间比成熟应用程序的全面开发更快速的原型设计)
  • 并且上述规则的一个例外是使用Symfony的一个团队,这是一个PHP框架,它与Ruby on Rails具有相似的概念(但它下面仍然是非常不同的基本语言)。

查看http://www.plat-forms.org或在网上搜索“Plat_Forms”。报告中有更多细节,特别是迭代1中的厚技术报告。


0
投票

根据Norvig的说法,Lutz Prechelt在1999年10月的CACM中发表了这样一篇文章:“将Java与C / C ++效率问题与人际问题进行比较”。

Norvig包含该文章的链接。不幸的是,ACM虽然有一个位图图形宣称他们的目标是“推动计算作为科学和专业”,但却无法弄清楚如何在他们的网页上保持稳定的链接,所以它现在只是404。也许您当地的图书馆可以帮助您。


0
投票

Ada的故事可能是这个的装饰版本:http://www.adaic.com/whyada/ada-vs-c/cada_art.html


0
投票

Erlang vs C ++ / Corba

“...由于Erlang DCC的大小不到类似C ++ / CORBA实现的四分之一,因此Erlang中的产品开发应该很快,并且代码可以维护。我们得出结论,Erlang和相关的库适合于快速开发可维护且高度可靠的分布式产品。“

here


0
投票

除了轶事证据(几乎可以找到任何语言)之外,在这方面没有真正的比较是有原因的。

实际上编写代码占开发人员时间的一小部分。即使语言允许您将编码时间缩短一半,项目结束时也几乎不会注意到。设计,程序结构,开发过程都非常重要,然后有图书馆,工具和经验。

有些语言比其他语言更适合某些开发过程,因此如果您已经确定了设计和流程,您可以决定哪种语言更有效 - 但不是之前。

(没有注意到已经有类似的答案,所以随意忽略这一点)


22
投票

从ARPA和ONR资助的90年代初,我从少数资助的科学研究之一,我知道跨语言生产力,

我们描述了一个实验的结果,其中几个传统的编程语言与功能语言Haskell一起用于原型海军水面作战中心(NSWC)对几何区域服务器的要求。由海军选择的委员会审查了由此产生的计划和发展指标。结果表明,Haskell原型开发时间明显缩短,并且比...更简洁,更容易理解。


13
投票

This article(pdf)在C,C ++,Perl,Java,Perl,Python,Rexx和Tcl之间有一些基准(注意它是从2000年开始)。

我认为一些常见的观点是正确的(也在文章的某处):

The number of lines written per hour is independent of the language

10
投票

意见:更重要的是对于给定的开发人员来说更快,例如你自己。你习惯了,通常会更快。如果你已经习惯了20年的C ++陷阱并且永远不会跳过未初始化的变量,那么对于任何人来说,这都会比Java快。

如果你记住了CreateWindowEx()的所有参数,它将比MFC或winforms更快。


6
投票

一些轶事数据点:

关于项目Euler,它邀请数学问题的编程解决方案,

  • 最短的解决方案几乎总是用J或K(APL的亲属)写成;偶尔MatLab解决方案在同一范围内。但可以说,这些语言专门研究数学。
  • 亚军是Ruby解决方案。许多算法都可以包含在非常少的代码中,并且比J / K更易读。
  • 在LOC方面,Python和Haskell解决方案也做得非常好。

问题是“最快的开发”,而不是“最短的代码”。但可以想象,更短的解决方案可以更快地提出 - 当然对于慢打字员来说!


每年都有机器人专家的竞争。参赛者会获得一些硬件规格,软件需要解决的实际问题以及时间有限。当然,这也是非常具体的领域。程序员可以选择工具,包括语言。每年,获奖团队(通常是一个人)都使用Forth。


这个公认的有限样本表明“发展速度”和“语言对速度的影响”通常非常依赖于问题领域。


5
投票

也可以看看

Are there statistical studies that indicates that Python is "more productive"?

关于这类问题的一些讨论。


3
投票

对程序员进行基准测试更有意义,而不是语言。用任何主流语言编写程序的时间更多地取决于程序员使用该语言的能力而不是特定语言的质量。


3
投票

我认为关于这个主题的大多数基准和陈述意味着很少。

基准可以随时进行游戏;看看“宠物店”的历史。

擅长解决某种问题的语言可能不适用于另一种问题。

最重要的是您团队的技能,对特定技术的了解,以及您对您尝试解决的领域的了解程度。

更新:喷气发动机和直升机的控制软件是计算问题的一个非常专业的子集。它的特点是非常严格,完整,详细的规格和质量保证,这意味着价值数百万美元的飞机不会崩溃。

我可以通过John Strohm对Ada编写的Pratt&Whitney控制软件的(非常好的)引用。出售给澳大利亚的卡曼直升机控制软件也是用Ada编写的。

但这并不能得出这样的结论:如果您决定在Ada中编写下一个网站,那么与使用C#或Java或Python或Ruby相比,您可以获得更高的生产率和更少的缺陷。所有语言在所有问题域中都不一样好。


1
投票

大多数程序必须与其他框架接口。选择具有专门针对您要执行的操作的库的语言往往是个好主意。例如,您是否正在尝试构建分布式冗余消息传递系统?如果是这样我会使用Erlang。您是否正在尝试创建一个快速而肮脏的数据驱动网站,使用Ruby和Rails。你明白了。实时DirectX,性能是关键,C ++ / C / Asm。

如果你正在写一些基于算法的东西,我会看一下像Haskell这样的函数式语言,尽管它有很高的学习曲线。

© www.soinside.com 2019 - 2024. All rights reserved.