有人看到最近一份(相对平衡的)关于使用不同编程语言进行软件开发相对成本的研究吗?我特别想看看Java与C#和Delphi的相对成本。
不是的。但我并不偏爱其中任何一种,作为顾问,我会根据每个需求推荐其中之一。以下是一些事实,以便更轻松地选择用于应对您可能具有的系统开发要求。
它们都是各自领域最好的选项:
它们都有以下特点:
它们都是:
C# 更好的 3 个方面:
Java 更好的 3 个方面:
Delphi 更好的 3 个方面:
(*) 有一个非常可靠的事实是,能用C#编程的其他语言开发人员比能用Java编程的其他语言开发人员更多,这意味着更容易找到C#程序员。也许这就解释了为什么在许多允许多语言问题、重构等的网站(如此网站)和论坛中,通常会有更多的C#问题和答案 (84k vs 50k)。此外,由于Java职位在世界上许多地区获得了最好的薪水,因此常识表明Java开发人员在他们的工作岗位上留下的时间比C#开发人员更长,这就使得寻找可用的Java开发人员比C#开发人员更加困难。当然也有其他一些因素可以讨论,但我相信通常更容易找到C#程序员而不是Java程序员。
我不知道有没有正式的研究,但我听过很多公司的轶事,他们会因为某种原因拿着 Delphi 中现有的应用程序并将其重写成 C#。这些重写都以相似的方式结束。
在重新编写程序期间,即使所有业务逻辑和领域知识已经在现有的 Delphi 代码库中出现,用 C# 重写程序所需的时间是初始编写 Delphi 程序所需时间的两倍。在此期间,他们没有发布更新,因为所有资源都忙于重写,这使得他们的竞争对手获得了市场份额。而当重写完成时,它只是一个1.0级别的产品。常常出现故障、运行缓慢且难以使用,还经常出现严重的向后兼容性问题。
造成这一切的原因存在不同的解释,但我认为 Delphi 比 C#(或 Java)更具生产力的主要因素之一是这门语言的外观和感觉。
众所周知,与最初编写程序相比,维护和调试现代程序需要更多的工作、时间和精力,但这个原则很少被推到其逻辑结论。如果需要最多工作的是维护程序,那么基于编写代码易于快速的语言来选择是预期优化。如果使用一种易于阅读和维护的语言,则可以获得更好的投资回报率。在代码可读性方面,Pascal(Delphi)远胜过 C 家族。
这不是正式的研究,但值得思考。
begin
和end
来表示代码块作用域,而不是用花括号。 - Dónal在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 计算机)。
项目规模 * 语言数 * 项目数 * 重复次数
相当的开发人员工作量。假设一个非平凡的项目需要1年的人力,有5个项目,它们在每种语言中各被开发了5次(为了给我们足够大的样本量以具有统计意义),那就是25个有经验的开发人员年……约为 200万美元至500万美元……用于检查每种语言。《人件》(Tom DeMarco和Timothy Lister著) 第八章包含了关于“编码战争游戏”的部分。从1984年到1986年,有超过600名开发人员参加了这个游戏。
在他们对游戏结果的分析中,他们发现编程语言与绩效几乎没有相关性。(只有汇编语言参与者被其他所有语言组甩在身后)
美国空军对Delphi产生了兴趣,发现用它编码速度显著更快。每年的C++比赛吸引着速度编码团队参与竞争。Delphi编码人员跟随此比赛,几乎总是以所需代码的显着速度优势获胜。
在担任空军开发主管之后,我的前老板比尔·罗茨海姆写了一本关于估算软件开发成本的书。他的选择是Delphi,是最好的选择。那时的版本是3/4。Rational采用了他的估算模式。我仍在使用它,并且多年来没有出现更好的选择。
设计的清晰度和代码表达的能力在版本间并没有太大变化。大部分时间你都在看视觉上的变化和递增的增强。20年前的核心最佳实践仍然适用。这就是使架构成为可能的原因。我们知道最佳实践看起来是什么样子的,因为在特定规模下,代码必须符合一定的标准要求,这些标准要求变化不大。你几乎总是可以使其更易于使用,或者减少愚蠢的笨拙界面,但是用于使商业系统工作的数据、安全/过滤和工作流系统仍然使用GoF设计模式书中相同的设计模式。而如果小型设备教给我们任何东西,那就是应该称赞强烈的清晰度和简单性。对于代码库易于使用的目的,它有很大的作用。所有主要环境都可以很好地进行领域设计。系统的速度和开发的便捷性使Delphi和Node.js成为我两个首选的后端。但是在能力方面,C#和Java都很好。如果我担心环境对开发人员的安全问题,在某些情况下,我会选择C#,因为它更难让编码者违反规则。但是当我不需要这些规则时,即大多数情况下,我更喜欢一个更开放的环境,以实现可扩展性。当我不太关心安全性时,我可能更喜欢Node.js,因为它可以快速完成任务。但是大多数情况下,我发现在Node中犯错误太容易了,并且最终需要完整的测试代码覆盖率。总之,Delphi是我首选。
就像其他人所说的,没有研究……因为没有人感兴趣。没有可衡量的差异。几乎任何一本项目管理书籍都不会提到语言,除了例子,也不会依赖于特定的语言特性。在项目生命周期中,大多数耗费时间和金钱的问题并不是编码问题,而是架构和组织问题。
为了让事情更清晰,如果你遇到了语言的严重缺陷,并且必须实现一些解决方法-你会浪费几个小时。维护人员可能需要花费更多的时间来理解你做了什么以及为什么要这样做。可能会浪费一两天的工作时间。好吧,如果你心情不好来上班,你也会浪费同样的一天。如果你有理解需求或与同事和管理层沟通的问题,你很容易浪费几周甚至几个月的时间。