[这是一个关于最新技术的经验问题:我不是在问Java是否比在JVM中运行的动态语言更酷或更酷。]
除了性能是主要决策因素的情况之外,公司/开发人员是否仍然愿意选择Java而不是Groovy,JRuby或Jython?
编辑:如果答案是“是”,为什么?
个人注意事项我之所以要问的原因是,虽然我在Ruby中做了一些专业工作(现在不是JRuby),但在我的个人项目中,我使用的是Java。虽然我在Groovy中编写了非平凡的应用程序,但我更喜欢Java,但我想知道我是否应该克服它并在Groovy中做所有事情。我喜欢Java因为我觉得静态类型可以节省我的时间并帮助重构。 (不,我对Scala不熟悉。)但是,我觉得这个非常经验的,关于主题的编程问题可能会告诉我的决定。
答案 0 :(得分:7)
静态打字仍然是一件大事。
虽然一再争论,但动态方法的支持者表示动态打字带来的问题可以通过充分的单元测试来减少(甚至消除)。
我不想争论这个论点是否正确,所以对于这个答案我会假设它是。
在这种情况下,仍然存在一个问题,即许多商店没有程序/技术诀窍/规则/管理来产生足够数量的高质量单元测试。
如果我必须选择没有单元测试的动态类型代码和没有单元测试的静态类型代码,我会每天选择静态类型代码。
double dispatch存在类似问题:
在Groovy方法中,调度是根据运行时的实际参数类型调度的(这几乎是必需的,因为静态类型在大多数情况下是未知的和/或Object
。这意味着当面对可扩展的类层次结构时,没有可靠的方法来知道在代码的任何给定点调用哪个方法。
在大多数情况下调用带有签名foo(String)
的方法的任何代码都可能会突然调用foo(Integer)
或foo(SomethingElseEntirely)
,这取决于运行时参数的实际类型< / em>的。在Java语言中永远不会发生,因为要调用的方法的确切签名是在编译时决定的。
与其他“动态”语言特性非常相似,双重调度偶尔也是一种非常有用的工具,缺少它可以在Java中产生一些丑陋的结构,但它的成本因为它使得它更难以阅读,理解和代码的原因。
答案 1 :(得分:7)
非静态类型语言在维护意义上不能“扩展”。最多可以维护几万行代码。过去他们只需要花费更多精力来维护,重新考虑或更新。任何非静态类型语言,Perl,Python,Groovy,Ruby等都是如此。用于处理50万行Python代码的工具与使用C / C ++ / Java中相同数量的代码行的工具不同在那里。现在,Python作为等效的Java程序的代码行数约为1/3到1/5。所以这永远不会是苹果和橘子,但是有一个截止点,非静态语言中的代码行数会减少维护的回报。众所周知,维护是软件项目的真正成本所在。
答案 2 :(得分:4)
除了表现的情况 一个主要的决定因素,做 公司/开发商仍然心甘情愿 选择Java over Groovy,JRuby或 JPython的?
是的,我认为主要原因是开发商或公司的惯性:
缺乏可用的资源可能是另一个原因,尽管这是一个鸡与蛋的问题(或墨西哥的对峙,或自我实现的预言,或其他)。我想有很多公司正在观看Groovy,Jython等等,但等待它们在采取暴跌前更广泛地采用。显然,通过推迟采用自己,他们正在加剧这种资源缺乏问题。
个人旁白
我在去年担任Groovy / Grails开发人员。我最近改变了工作,现在正在担任Java 1.4开发人员(与Groovy编程相比),这就像用生锈的勺子抠出你的眼睛一样令人愉快。
静态类型很有用,因为它有助于编译时检查和FindBugs等代码分析工具,但它无法弥补在编写Java时完成最简单任务所需的大量(样板)代码(特别是如果您使用的是早于1.5的版本。
答案 3 :(得分:4)
是的,很明显。
为什么公司仍“自愿”使用Java?
因为公司本质上是保守的。它们不会改变技术,因为它们很酷,甚至很时髦。当有谨慎的理由时,他们会不情愿地改变。早期采用者为早期采用者付出了沉重的代价。
编辑:这在贬义意义上不是“惯性”,如“除了抵制变革之外没有理由避免变化”,而是在审慎意义上。对于公司来说,不要放弃正在发挥作用的东西是正确的,直到有些东西可以证明更好。
而不是“让开发人员感到高兴,因为它很酷”的感觉更好,但是更快更可靠地满足任何业务需求推动组织发展。
Java提供:
大量训练有素,经验丰富的开发人员。很难找到能够很好地进行软件开发的人,而不会选择一种没有那么久的语言。用新语言培训人员既费时又省钱。
品牌知名度和成功完成项目的成功记录。这并不值得嘲笑:如果我告诉高层管理人员我开始用一些他们从未听说过的新语言开始项目,我必须对它进行教育,他们会认为这是一种风险。使用任何“已建立”的语言,我可以跳过这一步。
成熟,成熟的支持工具和第三方支持。
这些优势在长期建立的语言和新语言之间的任何比较中都有所体现,而不仅仅是Java和您的列表。我希望有一天,Groovy等人将成为既定的语言,并且会有人对一些更新,更狡猾的语言提出同样的问题。这是循环。这比我在公司工作的时间更长。
答案 4 :(得分:2)
我可以告诉你我公司发生了什么事。我们当前的应用程序是在java中完成的,但我们已经开始转换为grails / groovy,这很可能是下一代产品的平台。
答案 5 :(得分:1)
既然你在问一个经验问题,我会假设寻找经验答案:
除了性能是主要决策因素的情况之外,公司/开发人员是否仍然愿意选择Java而不是Groovy,JRuby或JPython?
是
我认为还有什么可说的。