不同编程语言开发的相对成本研究

60

有人看到最近一份(相对平衡的)关于使用不同编程语言进行软件开发相对成本的研究吗?我特别想看看Java与C#和Delphi的相对成本。

8个回答

37

不是的。但我并不偏爱其中任何一种,作为顾问,我会根据每个需求推荐其中之一。以下是一些事实,以便更轻松地选择用于应对您可能具有的系统开发要求。

共通点:

它们都是各自领域最好的选项:

  • Java 是最佳的 Java 开发选项。
  • C# 是最佳的 .NET 开发选项。
  • Delphi 是最佳的本地开发选项。

它们都有以下特点:

  • 全球范围内提供高质量组件和库的第三方供应商。
  • 使用它们创建的全球知名应用程序(例如 Delphi 应用程序可能更为知名:Yahoo Go for TV!、Macromedia Captivate、TotalCommander、MediaMonkey、FinalBuilder、InstallAware、WinLicense、MySQL Administrator 等)。

它们都是:

  • 带有 RAD 功能的高度可靠技术。
  • 受到最佳开发辅助工具(UML 等)的支持。
  • 发布其技术的重大升级(Java 7、.NET 4.0 和 Delphi 多平台)。

区别:

C# 更好的 3 个方面:

  • 拥有可编写它的开发人员数量更多(与 Java 相比)(*)。
  • 由 Microsoft 支持。
  • 在薪资方面具有更低的开发成本(通常如此)。

Java 更好的 3 个方面:

  • 拥有可编写它的开发人员数量更多(与 Delphi 相比)(*)。
  • 可移植性。
  • 由 Sun 支持。

Delphi 更好的 3 个方面:

  • 速度更快(用于时间关键系统的性能更好)。
  • 占用空间更小(Delphi 编译器生成的二进制文件非常小)。
  • 没有显式依赖项(更容易分发)。

(*) 有一个非常可靠的事实是,能用C#编程的其他语言开发人员比能用Java编程的其他语言开发人员更多,这意味着更容易找到C#程序员。也许这就解释了为什么在许多允许多语言问题、重构等的网站(如此网站)和论坛中,通常会有更多的C#问题和答案 (84k vs 50k)。此外,由于Java职位在世界上许多地区获得了最好的薪水,因此常识表明Java开发人员在他们的工作岗位上留下的时间比C#开发人员更长,这就使得寻找可用的Java开发人员比C#开发人员更加困难。当然也有其他一些因素可以讨论,但我相信通常更容易找到C#程序员而不是Java程序员。


4
你有提供这方面证据的链接吗?据我所知,Java开发人员比.NET开发人员多。 - SteveD
5
研究结果因问法不同而差异很大。例如,如果你问“我是一个<空白>开发者”,让对方填空,你只会得到一个答案,然后你会发现Java的开发者比C#多一点。如果你说“填空,你可以尽可能多地回答”,那么结果就非常不同了。如果你说“我可以在工作中使用<空白>语言”,又是完全不同的答案。哪一个问题实际上能够衡量你感兴趣的东西呢? - Eric Lippert
5
@someone:这有很多解释。也许微软的文档很差。也许C#开发人员很愚蠢,需要问很多问题。也许C#开发人员很聪明,喜欢讨论有趣的问题。也许C#不好用。也许C#比Java拥有更多功能。也许Java开发人员有其他论坛可以问问题。也许Java开发人员在公司工作时不允许上网。或者,StackOverflow是由两个.NET社区领袖创立的,他们有两个极其受欢迎的.NET博客,并将他们的所有读者都带到了这个网站上。 - Jörg W Mittag
2
@Jörg W Mittag:嗯... 公平地说,也许你是对的,也许你是错的。 - someone
3
当然可以(非常容易)用Delphi写糟糕的代码。 - mmmm
显示剩余4条评论

33

我不知道有没有正式的研究,但我听过很多公司的轶事,他们会因为某种原因拿着 Delphi 中现有的应用程序并将其重写成 C#。这些重写都以相似的方式结束。

在重新编写程序期间,即使所有业务逻辑和领域知识已经在现有的 Delphi 代码库中出现,用 C# 重写程序所需的时间是初始编写 Delphi 程序所需时间的两倍。在此期间,他们没有发布更新,因为所有资源都忙于重写,这使得他们的竞争对手获得了市场份额。而当重写完成时,它只是一个1.0级别的产品。常常出现故障、运行缓慢且难以使用,还经常出现严重的向后兼容性问题。

造成这一切的原因存在不同的解释,但我认为 Delphi 比 C#(或 Java)更具生产力的主要因素之一是这门语言的外观和感觉。

众所周知,与最初编写程序相比,维护和调试现代程序需要更多的工作、时间和精力,但这个原则很少被推到其逻辑结论。如果需要最多工作的是维护程序,那么基于编写代码易于快速的语言来选择是预期优化。如果使用一种易于阅读和维护的语言,则可以获得更好的投资回报率。在代码可读性方面,Pascal(Delphi)远胜过 C 家族。

这不是正式的研究,但值得思考。


7
非常恰当的表述。我会稍微修改一下——在Pascal中仍然有可能编写“不好”的代码,但通常需要费些功夫才能做到…同样,在花括号语言中编写“好”的代码也是可能的,但同样需要费些功夫。即Pascal——总的来说——将以相同的努力产生更好的结果。 - Deltics
3
我认为Delphi属于C系列编程语言。与其他语言相比,Delphi唯一的主要语法区别是它使用beginend来表示代码块作用域,而不是用花括号。 - Dónal
3
@唐:“那完全错误。首先,Pascal是在C之前创建的,并影响了它的设计,而不是相反。所有的控制结构都有不同的语法,特别是forcase。声明变量的规则也非常不同。在C族中,任何东西都可以成为布尔值,这导致各种丑陋的语法(Yoda条件,逻辑和位运算符的分离版本等),而在Pascal中,布尔值是一个被编译器理解的明确定义类型。我还可以继续说下去,但我已经用完了字符数。它们是非常不同的。” - Mason Wheeler
4
@Mason - 但是Delphi不是Pascal语言,它是基于C语言之后创建的Oobject Pascal。说一种语言属于C家族意味着它在很多方面类似于C#、Java、C++等语言,但并不意味着它完全像C语言。总体而言,我认为Delphi和这些语言在许多方面看起来很相似,与Lisp、Ruby、SQL等语言相比较而言。 - Dónal
3
我认为你想要知道的是C语言和Pascal语言(以及它们所有的后代)都属于Algol家族。 - Mason Wheeler
显示剩余3条评论

13
由于存在许多复杂的变量,例如开发人员对语言的经验、语言适用于目标领域的程度、开发人员的整体素质(有人认为非主流语言会吸引更高素质的开发人员)、与结果产品的权衡(Ruby 或 Python 应用程序是否与精心编写的 Delphi 或 C++ 应用程序一样快速?)等,因此这种定量比较非常难以确定。

Code Complete, 2nd Ed.中,Steve McConnell列出了几种语言的表达能力(每种语言的单个语句可以表达多少行等效于C代码)。有人建议,无论使用哪种语言,程序员的代码行生产率都相对稳定;如果这是真的,那么每种语言的表达能力应该给出每种语言开发成本的粗略估计。从第62页的表4.1中:

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
他在这张表中列出了几个来源:估算软件成本Cocomo II 软件成本估算,以及“七种编程语言的实证比较”(Prechelt 著,来自 2000 年 10 月的 IEEE 计算机)。
McConnell 引用的数字都是几年前的,但据我所知,Cocomo II 模型非常详细,因此当前的 Cocomo II 材料可能会提供 Delphi 和 C# 的最新数据。

4
麦康奈尔提供的数据已经非常过时了;自那时以来,.NET语言(包括VB和C#)在泛型和LINQ方面取得了巨大进步。LINQ为.NET添加了函数式编程能力,这可能会使生产力数据出现很大偏差。 - Cylon Cat
8
我认为这个论点有缺陷,因为它假设开发人员百分百的时间都在编码,并且没有提到所产生代码的质量。对于许多项目来说,这个百分比更接近30%(我认为出自《神话般的月份》)。 - mdma
1
+1 是指出编码并不是花费大部分时间的地方。我从未见过因为使用某种语言(当然是合理选择的情况下)而取消或延迟的项目。 - Christian Garbin
我听说Java和C++并不完全相等...Java 2.5和C++ 2.6或类似的版本号...这在几千行代码的大型项目中非常重要。 - poeschlorn

6
我从未寻找过这样的研究,但如果存在这样的研究我会感到惊讶。任何旨在以适当的科学方式“衡量”和比较多种语言的实际开发成本的实验都将非常昂贵。为了正确进行这项工作:
您需要指定一些跨越应用程序域的非平凡项目。
您需要组建若干个项目团队,每个团队由具有开发大规模应用程序方面的丰富经验的开发人员组成。
然后您需要针对每种语言为每个项目实施N次…以获得具有统计意义的结果。
因此,您需要与项目规模 * 语言数 * 项目数 * 重复次数 相当的开发人员工作量。假设一个非平凡的项目需要1年的人力,有5个项目,它们在每种语言中各被开发了5次(为了给我们足够大的样本量以具有统计意义),那就是25个有经验的开发人员年……约为 200万美元至500万美元……用于检查每种语言。
这些数字(显然)是随意取出的,但我的观点是,不同语言的开发成本的适当科学比较将具有高额费用。
即使如此,该研究结果也无法解决以下问题:
- 持续的可维护性/维护成本, - 数字如何扩展到大型项目, - 团队规模的语言特定影响, - 各种语言的开发工具的可用性、成本和收益 - 形成每种语言的有经验团队的容易/难度等等。
而且这些结果在3到5年内就会过时。

4

《人件》(Tom DeMarco和Timothy Lister著) 第八章包含了关于“编码战争游戏”的部分。从1984年到1986年,有超过600名开发人员参加了这个游戏。

在他们对游戏结果的分析中,他们发现编程语言与绩效几乎没有相关性。(只有汇编语言参与者被其他所有语言组甩在身后)


4

美国空军对Delphi产生了兴趣,发现用它编码速度显著更快。每年的C++比赛吸引着速度编码团队参与竞争。Delphi编码人员跟随此比赛,几乎总是以所需代码的显着速度优势获胜。

在担任空军开发主管之后,我的前老板比尔·罗茨海姆写了一本关于估算软件开发成本的书。他的选择是Delphi,是最好的选择。那时的版本是3/4。Rational采用了他的估算模式。我仍在使用它,并且多年来没有出现更好的选择。

设计的清晰度和代码表达的能力在版本间并没有太大变化。大部分时间你都在看视觉上的变化和递增的增强。20年前的核心最佳实践仍然适用。这就是使架构成为可能的原因。我们知道最佳实践看起来是什么样子的,因为在特定规模下,代码必须符合一定的标准要求,这些标准要求变化不大。你几乎总是可以使其更易于使用,或者减少愚蠢的笨拙界面,但是用于使商业系统工作的数据、安全/过滤和工作流系统仍然使用GoF设计模式书中相同的设计模式。而如果小型设备教给我们任何东西,那就是应该称赞强烈的清晰度和简单性。对于代码库易于使用的目的,它有很大的作用。所有主要环境都可以很好地进行领域设计。系统的速度和开发的便捷性使Delphi和Node.js成为我两个首选的后端。但是在能力方面,C#和Java都很好。如果我担心环境对开发人员的安全问题,在某些情况下,我会选择C#,因为它更难让编码者违反规则。但是当我不需要这些规则时,即大多数情况下,我更喜欢一个更开放的环境,以实现可扩展性。当我不太关心安全性时,我可能更喜欢Node.js,因为它可以快速完成任务。但是大多数情况下,我发现在Node中犯错误太容易了,并且最终需要完整的测试代码覆盖率。总之,Delphi是我首选。


2
“开发人员的质量”很难衡量。Java和(在较小程度上)C#在学校和大学中被广泛用于训练编程初学者。 其中许多人会因作业问题而在支持论坛上寻求帮助,但从某种程度上来说,他们使用这种语言成为程序员(而且是糟糕的程序员)。 实际上,其中绝大多数人完成必修的入门课程后都不会写一行代码,其余大多数人也不会写那种语言。
- rant about "comparative studies" about programmer competence complete ---
正如所说的,很难、甚至是不可能为不同语言的实现提供成本比较估计,至少不能作为所有项目的通用情况。有些事情更适合使用.NET,有些更适合使用Java,另一些则最好使用Excel宏来完成。
而且,开发成本通常只是系统总体成本的一小部分,尤其是如果它是一个多层应用程序,运行在应用服务器与数据库上等等。如果客户已经运行了IIS服务器并使用MS SQL Server数据库作为后端,那么向他们推销一个使用Oracle后端的Java EE应用程序将对他们不利,即使它在其他方面是最合理的选择。开发成本可能会更低,但是客户的运营成本会大大增加。
另一方面,如果您的角落杂货店想要开始通过互联网接受订单以便在附近进行配送,则不应将.NET或Java EE用于实现该网站。解决方案的成本(尤其是托管成本)会远远超过收益。使用php或rails来创建一个简单的网站将为该客户提供更好的服务。托管成本降低,无需支付昂贵的数据库和应用服务器许可费用,他甚至可能会通过使用结果网站赚点钱。

0

就像其他人所说的,没有研究……因为没有人感兴趣。没有可衡量的差异。几乎任何一本项目管理书籍都不会提到语言,除了例子,也不会依赖于特定的语言特性。在项目生命周期中,大多数耗费时间和金钱的问题并不是编码问题,而是架构和组织问题。

为了让事情更清晰,如果你遇到了语言的严重缺陷,并且必须实现一些解决方法-你会浪费几个小时。维护人员可能需要花费更多的时间来理解你做了什么以及为什么要这样做。可能会浪费一两天的工作时间。好吧,如果你心情不好来上班,你也会浪费同样的一天。如果你有理解需求或与同事和管理层沟通的问题,你很容易浪费几周甚至几个月的时间。


2
如果没有研究,我们怎么知道“没有可测量的差异”呢?或者这只是一种教条主义? ;) - mjn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接