有没有人看到最近(并且相当平衡)的研究使用不同语言进行软件开发的相对成本?我特别想看看Java V的相对成本。 C#Vs. Delphi的。
答案 0 :(得分:37)
没有。但我不是任何人的狂热者,而是作为顾问工作,并根据我的每一个要求推荐其中一个。因此,这里有一些事实可以让您更轻松地选择使用什么来满足您可以拥有的系统开发要求。
所有这些都是各自领域中最好的:
所有人都有:
所有这些都是:
C#更好的3件事:
3更好的Java:
Delphi更好的3件事
(*)有一个非常可靠的事实是,有更多的其他语言开发人员可以使用C#编写代码而不是其他语言开发人员可以用Java编写代码,这意味着它更容易找到C#程序员。也许这解释了为什么在许多网站(例如这个)和允许多语言问题,重构等的论坛中,通常会有更多的C#问题和答案(84k vs 50k)。此外,自从Java jobs are best paid在世界许多地方以来,常识指出Java开发人员的工作时间比C#更长,这使得Java开发人员比C#更难找到。当然还有一些其他因素可以讨论,但我很确定找到一个C#程序员而不是Java程序员通常会更容易。
答案 1 :(得分:33)
我不知道正式的研究,但我听到很多关于公司在Delphi中使用现有应用程序并用C#重写它的轶事说法有这样或那样的原因。他们都以同样的方式结束。
在C#中重写程序需要两倍的时间,因为它最初是用Delphi编写的,即使所有的业务逻辑和领域知识已经解决并以现有Delphi代码库的形式呈现。在此期间,他们没有发布更新,因为他们所有的资源都忙于重写,允许他们的竞争获得市场份额。当它完成后,它是1.0级产品。毛病,缓慢且难以使用,通常会出现严重的向后兼容性问题。
之所以可以解释,但我认为使Delphi比C#(或Java)更具生产力的主要因素之一就是语言的外观和感觉。
众所周知,维护和调试现代程序要花费更多的工作,时间和精力,而不是最初使用它们,但这个原则并不经常遵循它的逻辑结论。如果需要最多的工作就是维护程序,那么在编写代码的基础上选择一种语言就是过早优化。如果您使用易于读取和维护的语言,您将获得更好的投资回报。当涉及到代码可读性时,Pascal(Delphi)击败C家族。“ p>
这不是一项正式的研究,但值得思考。
答案 2 :(得分:13)
由于复杂变量的数量,开发人员对语言的熟悉程度,语言对目标领域的适用性,开发人员的整体质量(有人认为非 - 主流语言吸引更高质量的开发人员),与最终产品进行权衡(Ruby或Python应用程序与编写良好的Delphi或C ++应用程序一样快)?等等。
在Code Complete, 2nd Ed.中,Steve McConnell根据其表达能力列出了几种语言(在每种语言的单个语句中可以表示多少行等效C代码)。有人建议,无论语言如何,程序员在代码行中的生产率都是相对恒定的;如果这是真的,那么每种语言的表达能力应该粗略估计每种语言的相对发展成本。从表4.1,第62页开始:
LANGUAGE LEVEL RELATIVE TO C C 1 C++ 2.5 Fortran 95 2 Java 2.5 Perl 6 Python 6 Smalltalk 6 Visual Basic 4.5
他列出了此表的几个来源:Estimating Software Costs,Software Cost Estimation with Cocomo II和“七种编程语言的实证比较”(Prechelt,来自 IEEE计算机,2000年10月)。
McConnell引用的数字已有几年历史了,但根据我的理解,Cocomo II模型非常详细,因此目前的Cocomo II材料可能会在Delphi和C#上提供当前数字。
答案 3 :(得分:6)
我从来没有寻找过这样的研究,但如果存在的话,我会感到惊讶。任何旨在衡量并以适当的科学方式比较多种语言的实际开发成本的实验都将非常昂贵。
要正确地做到这一点:
您需要在一系列应用程序域中指定许多非平凡的项目。
您需要组建一个项目团队,每个团队都由在使用其中一种语言开发大型应用程序方面具有丰富经验的开发人员组成。
然后,您需要为每种语言实施N次项目...以获得统计上显着的结果。
因此,您需要与project-size * nos-languages * nos-projects * nos-repetitions
等效的开发人员工作。假设一个非平凡的项目需要1个人年,那么有5个项目,每种语言开发5次(为了给我们足够大的样本量,具有统计意义),即25个经验丰富的开发人员年。 ...说200万美元到500万美元......每种语言都被检查过。
这些数字(显然)被拉出了空气,但我的观点是,对不同语言的开发成本进行适当的科学比较将会非常昂贵。
即便如此,研究结果也无法解决:
结果将在3到5年内过时。
答案 4 :(得分:4)
Peopleware (by Tom DeMarco and Timothy Lister)在第八章中有一节关于“编码战争游戏”。从1984年到1986年,已有600多名开发人员参加。
在对游戏结果的分析中,他们发现编程语言与性能几乎没有关系。 (只有汇编语言参与者被所有其他语言组严重遗弃)
答案 5 :(得分:4)
美国空军很感兴趣,发现德尔福的编码速度要快得多。每年的C ++比赛都会让速度编码团队参与竞争。德尔福编程人员对此竞争产生了影响,并且几乎总是能够以所需的代码快速进入。
在担任空军发展负责人之后,我的前任老板Bill Roetzheim撰写了关于估算软件开发成本的书。他的选择,头脑和肩膀高于其他所有人都是德尔福。那是版本3/4。 Rational使用了他的估算模式。我仍然使用它,在我这么多年里,没有什么比这更好的了。
设计的清晰度和代码中表达的力量在版本上没有太大变化。大多数情况下,您正在研究视觉变化和增量扩充。 20年前的核心最佳实践仍然适用。这就是使架构成为可能的原因。我们知道什么是最佳实践,因为在一定规模上,代码必须符合一组不变的标准要求。您几乎总是能够更好地使用它,或者使用更少的笨拙的界面,但是使业务系统工作的数据,安全性/过滤和工作流系统仍然使用GoF设计模式书中的相同设计模式。如果小型设备教会了我们任何东西,那么强烈的清晰度和简洁性就值得赞扬。重要的是你的代码库用于此目的是多么容易。所有主要环境都可以很好地进行域设计。系统的速度和开发的简易性使Delphi和Node.js成为我的两个后端首选项。但是能力明智的C#和Java都很好。如果我担心开发人员对环境的安全性,我会在某些情况下使用C#,因为编码人员更难违反规则。但是,当我不需要这些规则时,即大部分时间,我更喜欢更开放的环境。当我不太关心安全性时,我可能更喜欢Node.js,因为它很快就完成了。大多数时候我发现在Node中犯错很容易,我最终需要完整的测试代码覆盖率。德尔福是我的第一选择。
答案 6 :(得分:2)
如上所述,如果不是不可能给出用于实现不同语言的东西的成本比较估计,这是非常困难的,至少作为用于所有项目的一般情况。 有些东西更适合.NET,有些东西更适合Java,其他东西也可能最好用Excel宏来完成。
开发成本通常只是系统总体拥有成本的一小部分,特别是如果它类似于在带有数据库的应用服务器上运行的多层应用程序等。 如果客户已经有一个运行IIS且MS SQL Server数据库作为后端的服务器农场,那么使用Oracle后端向他们销售Java EE应用程序会对他们造成伤害,即使这对于应用程序来说是最合理的选择。 开发成本可能较低,但客户的运营成本会高很多。
在规模的另一端,您的角落杂货店的网站不想在.NET或Java EE中实现,该网站希望通过网络开始接受在附近交付的订单。解决方案的成本(特别是托管)远远超过了收益。 基于例如php或rails的简单事情将为该客户提供更好的服务。托管成本降低,不需要支付数据库和应用程序服务器的昂贵许可费用,他实际上可能会使用生成的网站赚取一些钱。
答案 7 :(得分:0)
像其他人说的那样,没有研究......因为没有人感兴趣。没有可测量的差异。几乎所有关于项目管理的书籍都没有提及除了示例之外的语言,也没有依赖于特定的语言功能。大多数时候,任何在项目生命周期中消耗问题的资金都不是编码问题,而是建筑和组织。
为了正确看待问题,如果您遇到语言的严重缺陷并且必须实施一些解决方法 - 您将失去几个小时。维持一个人可能会花费更多的时间来了解你在那里做了什么以及为什么会在一两天内工作一两天。好吧,如果你的工作心情不对,那么你就失去了同一天。如果您在理解需求或与同事和管理层沟通时遇到问题,您很容易就会损失数周和数月。