是否有人知道在各种语言中开发相同应用程序需要多长时间的研究或基准?我真的在寻找Java与C ++,但任何比较都会很有用。我觉得Code Complete中有一节关于此,但我的副本正在运行。
修改
这个问题有很多有趣的答案,但似乎缺乏真正好的研究。关于这个问题,我在meta上做了proposal。
答案 0 :(得分:38)
他们在20世纪90年代继续其他所有人继续采用的指标。他们收集了大量关于喷气发动机控制器项目的数据,包括时间卡数据。他们嘎吱作响。那些不得不扼杀数据的闷棍注意到了结果:军队项目统一的程序员生产率是民用项目的两倍,缺陷密度是民用项目的四分之一。
这本身就很重要。这意味着你只需要一半的程序员,而且你不会花太多时间来修复bug。更重要的是,这是一个苹果对苹果的比较。喷气发动机控制器是喷气发动机控制器。
然后他去寻找候选人的解释。所有常见的候选人:个人经验,团队规模,工具集,软件流程,需求稳定性,一切都被淘汰出局,当人们看到这些项目的故事在两侧统一相同时,它们被排除在外。走道。在一天结束时,只出现了一个统计上显着的差异。民用项目是用你能想到的每种语言写成的。军事项目都是用阿达写的。
在每一个案例中,对于其他所有人,普拉特和普拉特的喷气发动机控制器都是如此。 Whitney使用Ada使生产率提高了一倍,缺陷密度提高了一半。
我知道飞猴代码会说些什么。 “你可以用任何语言做好工作。”从理论上讲,这是事实。然而,在实践中,似乎至少在Pratt&惠特尼,语言有所作为。
最后我听说过这个,Pratt&惠特尼高层管理人员下令所有喷气发动机控制器项目都将在阿达完成。
不,我没有引用。没有写过纸。我在这个故事中的消息来源是那些喋喋不休的闷棍。
顺便提一下,这是在波音公司完成777之前,以及在777刹车分包商故事发生之前。但这是另一个故事。答案 1 :(得分:22)
我从90年代早期就由ARPA和ONR资助的跨语言生产力的少数资助科学研究之一,
我们描述了一个结果 实验中有几个 传统的编程语言, 与功能语言一起 Haskell,习惯了原型 海军水面作战中心(NSWC) 几何区域的要求 服务器。由此产生的计划和 发展指标由a审查 海军选择的委员会。该 结果表明Haskell 原型花费的时间明显缩短 发展和更多 简洁易懂 该..
答案 2 :(得分: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
答案 3 :(得分:10)
意见:更重要的是给定开发人员更快,例如你自己。你习惯了,通常会更快。如果你已经习惯了20年的C ++陷阱并且永远不会跳过未初始化的变量,那么对于任何人来说,这都会比Java快。
如果你记得CreateWindowEx()的所有参数,它将比MFC或winforms更快。
答案 4 :(得分:6)
一些轶事数据指出:
On Project Euler,它邀请数学问题的编程解决方案,
问题是“最快的发展”,而不是“最短的代码”。但可以想象,更短的解决方案可以更快地提出 - 当然对于慢打字员来说!
每年都有机器人专家的竞争。参赛者会获得一些硬件规格,软件需要解决的实际问题以及时间有限。当然,这也是非常具体的领域。程序员可以选择工具,包括语言。每年,获奖团队(通常是一个人)都使用Forth。
这个公认的有限样本表明“发展速度”和“语言对速度的影响”通常非常依赖于问题领域。
答案 5 :(得分:5)
答案 6 :(得分:3)
对程序员进行基准测试更有意义,而不是语言。用任何主流语言编写程序的时间更多地取决于程序员使用该语言的能力而不是特定语言的质量。
答案 7 :(得分:3)
我认为关于这个主题的大多数基准和陈述意味着很少。
基准可以随时进行游戏;看看“宠物店”的历史。
擅长解决某种问题的语言可能不适用于另一种问题。
最重要的是您的团队的技能,对特定技术的了解,以及您对您尝试解决的领域的了解程度。
更新:喷气发动机和直升机的控制软件是计算问题的一个非常专业的子集。它的特点是非常严格,完整,详细的规格和质量保证,这意味着价值数百万美元的飞机不会崩溃。
我可以通过Pratt&amp ;;的John Strohm引用(非常好的)引文。用Ada编写的Whitney控制软件。出售给澳大利亚的卡曼直升机控制软件也是用Ada编写的。
但是,这并不能得出这样的结论:如果您决定在Ada中编写下一个网站,那么与使用C#或Java或Python或Ruby相比,您可以获得更高的生产率和更少的缺陷。所有语言在所有问题领域都不一样好。
答案 8 :(得分:1)
大多数程序必须与其他框架接口。选择具有专门针对您要执行的操作的库的语言往往是个好主意。例如,您是否正在尝试构建分布式冗余消息传递系统?如果是这样我会使用Erlang。您是否正在尝试创建一个快速而肮脏的数据驱动网站,使用Ruby和Rails。你明白了。实时DirectX,性能是关键,C ++ / C / Asm。
如果你正在编写一些基于算法的东西,我会寻找像Haskell这样的函数式语言,尽管它有很高的学习曲线。
答案 9 :(得分:1)
这个问题有点过时了。仅仅基于语言选择来关注开发时间的价值有限。还有许多其他因素与语言本身具有相同或更大的影响:
作为一个例子,许多人会说Java是构建企业(业务线)应用程序而不是C ++的更好选择。这通常不是因为语言本身,而是认为Java具有更好(或更成熟)的Web服务器和数据库框架。这可能是也可能不是,但这不是重点。
您甚至可能会发现在不同的操作系统或平台上使用相同的语言构建应用程序会产生大大不同的开发时间。例如,在Linux上使用C ++构建GUI应用程序可能需要比使用C ++的基于Windows的GUI应用程序更长的时间,因为在Linux上可以使用不那么广泛和成熟的GUI库(这也是有争议的)。
答案 10 :(得分:1)
Plat_Forms 项目为Web应用程序提供了此类型的一些信息。
有三项研究具有不同的任务(2007年,2011年,2012年完成),所有以下格式:三个专业开发人员的几个团队在两天内在受控条件下实施相同的应用程序。 它涵盖了Java,Perl,PHP和Ruby,并且每种语言都有多个团队。 评估报告的内容不仅仅是开发时间。
例如,迭代的结果包括
包含迭代2的结果
在http://www.plat-forms.org下查找或在网上搜索“Plat_Forms”。 报告中有更多细节,特别是迭代1中的厚技术报告。
答案 11 :(得分:0)
根据Norvig,Lutz Prechelt在1999年10月的CACM中发表了这样一篇文章:“将Java与C / C ++效率问题与人际问题进行比较”。
Norvig包含该文章的链接。不幸的是,ACM虽然有一个位图图形宣称他们的目标是“推动计算作为科学和专业”,但却无法弄清楚如何在他们的网页上保持稳定的链接,所以它现在只是404。也许你当地的图书馆可以帮助你。
答案 12 :(得分:0)
Ada故事可能是这个的装饰版本:http://www.adaic.com/whyada/ada-vs-c/cada_art.html
答案 13 :(得分:0)
Erlang vs C ++ / Corba
“......由于Erlang DCC的大小不到类似C ++ / CORBA实现的四分之一,因此Erlang中的产品开发应该很快,并且代码可以维护。我们得出结论,Erlang和相关的库是合适的为可维护和高度可靠的分布式产品的快速发展。“
论文here
答案 14 :(得分:0)
除了轶事证据(几乎可以支持几乎所有语言)之外,还有一个原因就是在这方面没有真正的比较。
实际上编写代码占开发人员时间的一小部分。即使语言允许您将编码时间缩短一半,项目结束时也几乎不会注意到。设计,程序结构,开发过程都非常重要,然后有图书馆,工具和经验。
某些语言比其他语言更适合某些开发过程,因此如果您已经确定了设计和流程,那么您可以决定哪种语言更有效 - 但不是之前。
(没有注意到已经有类似的答案,所以可以随意忽略这一点)