Java与C#-生产率透视图


34

如果您有使用Java的多年经验,以及使用C#和.NET的多年经验,那么我对您在这两种环境之间的软件开发生产力差异方面的观点表示赞赏。我们的一位客户正在考虑更换其现有的软件解决方案。由于更换将需要大约。根据Java或.NET之间的生产率差异,选择10到15个工作年的工作可能会显着影响所需的投资和上市时间。

您能否向我们提供Java和C#/。NET之间软件开发生产率差异的指示?我希望收到如下答复:

我的经验是基于X的Java工作经验和X的C#/。NET工作经验。如果考虑以下因素,则Java的生产力比Java#高出X%,而C#.NET或C#/。NET的生产力比Java高出X%。


24
我想这里一件重要的事情就是你在做什么。对于某些类型的项目,.NET可能更好,而对于其他类型的项目,.NET可能更好。
岛之风克诺布洛赫-Bråthen如此阐述

4
这是什么样的项目?在很大程度上取决于您要尝试执行的操作。在语言方面,我强烈喜欢C#,但我并没有声称.net在所有类型的项目中都比Java更好。
CodesInChaos 2011年

7
IMO有一个非常重要的战略决策,不应完全基于程序员的生产力。如果您想要一个完美的最先进的Windows GUI,即使统计数据表明Java的生产率提高了7%,您也无法选择Java。如果您需要一个真正的跨平台产品而不受Mono附带的限制,那么Java是您的宝贝,即使C#具有更好的语法。
user281377 2011年

2
@Edin:“企业应用程序”不是非常说明它是什么类型的应用程序...它是仅桌面,客户端/服务器配置,Web服务,网站,移动设备上可能的卫星应用程序等吗?
敬畏

3
它是“ Java”而不是“ JAVA”
Mahmoud Hossam

Answers:


17

我的经验是基于10年的Java使用经验和3年的C#/。NET使用经验。Java比C#.NET的生产率高0%。这基于编写基于后端服务的应用程序。
在编写用户应用程序方面,C#/。NET的生产率可能比Java高5%。但是后来我在Java中已经有近5年没有这样做了,新的Netbeans UI编辑器可能已经缩小了差距。

您想提高生产力吗?CI(理想情况下为持续交付)和自动化测试。通过在任何主要语言/平台/ IDE上选择语言/平台/ IDE所获得的生产率都非常低。


您是要说Java的0%吗?您是说对于基于后端服务的应用程序或Java整体而言,生产率提高0%?只是检查。
乔恩·昂斯托特

如果您要我编写一个后端应用程序(一些规则,数据库访问以及您拥有的内容),那么C#和Java的估算值是相同的。如果您要求使用Windows最终用户应用程序,那么我对Java的估计会比C#略大(WPF / XAML及其通过绑定对MVVM的支持,我认为比在Java中进行更手动的绑定和UI构建要稍微多一些(如前所述) 5年前))。
mlk

对于“在任何主要语言/平台/ IDE上选择语言/平台/ IDE所获得的生产率都非常小,”则为+1。
亚当·贾斯基维奇

3
-1为最后一句话。对于每个(现实世界)问题类别,您都可以选择两种通用的高级语言,其中生产率从一种提高到另一种超过100%。如果您在C#和Java之间进行选择,您会发现差别不大(尽管我认为C#在适用于函数式编程的领域将被证明具有更高的生产力)。如果在C和OCaml之间进行选择,则差距会很大。
back2dos 2012年

42

我已经使用Java和C#在大学和Real World™中从事项目五年了。

放手,我更喜欢使用C#,因为它简洁明了并使用语法糖。您很少会Factory.GetFactory(OfFactory.GetFactory(Factory));在C#中找到代码。由于语法更小,更简洁,因此更易于阅读和遵循。

您会更高效地选择哪一个?这取决于项目的类型。

您是否正在设计Windows桌面应用程序?然后C#是最佳选择,因为它具有强大的IDE Visual Studio,并且.NET Framework使创建GUI非常简单。

坦白说,我很高兴我不再使用Java(现在已经一年多了),因为我记得代码必须要多么的冗长。一个简单的例子是异常处理。如果您的代码可以引发异常,则必须考虑每个可能的异常。这很快将琐碎的代码变成20行以上的怪物。

C#不那么实用,如果您选择让代码保持打开状态,则由开发人员来决定。

在过去的一年中,C#还增加了很多功能,使它使用起来非常有趣。Lambda,委托,匿名函数(如Ruby)以及许多不错的小东西。


3
我记得在uni的Java中,我很高兴忘记这一点。强制异常处理。是的,它有目的,但是代码文档可以告诉您方法是否抛出异常,并且可以选择做什么。
JonWillis 2011年

5
哈哈,我是一名Java程序员,但我喜欢您的示例代码。
Chuck Stephanski

6
If your code can throw an exception you must account for every single exception possible.我看不出这样做的弊端,至少这提高了人们对问题的意识……尽管也许只是我。
鲍比(Bobby)

4
被检查的异常意味着您将错误处理代码编写为主要实现的一部分,而不是事后才将其附加。这意味着需要大量维护。

我认为这只是对异常含义的分歧-它们可能是预期的情况(文件不存在)或意外的错误(除以0)。Java决定异常应同时表示,因此已检查和未检查的异常也应同时代表。这是一个令人惊讶的有争议的功能。
迪洪

23

我曾与Java(自1996年起)和.Net(自2002年起)进行过广泛的合作,并在2010年决定在我的公司中使用Java,因为这将是总体上生产力最高的环境

请注意,我是根据端到端的单位成本/资源单位所创造的业务价值来定义软件开发生产力的(即,您必须查看整个软件生命周期的生产力,包括部署和维护,而不仅仅是初始编码!!)。

这是我推理的关键要素:

  • 语法是提高生产力的次要因素 -虽然Java当然是冗长的,而且我更喜欢C#的语法,但这根本没关系。无论您的开发人员键入object.getSomeProperty()vs. object.SomeProperty还是使用匿名内部类vs.lambda,都不会对您公司的竞争优势产生任何明显的影响。
  • 图书馆生态系统至关重要-开发现代软件产品,您不想从头开始开发许多通用组件。Java生态系统在开源库(尤其是由Apache,Google,Eclipse Foundation和RedHat / JBoss开发的开源库)的数量和质量方面具有明显的优势。
  • 可移植性/部署灵活性 -我知道我可以在几乎任何平台上部署JVM,包括廉价的大型Linux集群。使用.Net,您只能使用Windows环境。随着云托管选项的发展,我认为这是一个非常重要的优势。
  • 如果需要高级语言功能,Scala和Clojure都是在JVM上进行开发的可行选择。用Java开发是一个现实的选择,但随着时间的推移,请保持打开状态以移至Scala或Clojure。在某种程度上,这些是“下一代”语言,我认为它们领先于Java和C#,因此这使我确信Java平台在语言创新方面拥有美好的未来。(Java 7和8看起来很有前途,但我没有屏住呼吸...。)
  • 实际上,维护成本对于Java来说似乎是相当有利的。Java的语法比C#更简单,这意味着更多的冗长性,但另一方面,人们倾向于编写更多可维护的代码-编写“聪明的代码”更加困难。另外,与.Net世界相比,Java世界更加重视向后兼容性,这在多年的维护成本方面将是一个优势。
  • 供应商独立性 -过去曾看到公司被供应商锁定所烧毁,我觉得与相对开放的Java生态系统相比,而不是由Microsoft主导的.Net世界,这是一个优势。例如,我宁愿选择数据库,也不愿被迫使用SQL Server(并且通过工具支持和.Net开发人员的典型技能,这种推动非常强大)。在我看来,保持核心产品投资供应商的独立性是明智的长期举措。我判断(事实证明是正确的)OpenJDK将成为Java的未来,因此我将有效地建立在开源平台上。
  • 才华横溢 -当然这是主观的,但是与.Net相比,Java领域的开发人员的技术能力给我留下了深刻的印象。平均而言,我的印象是.Net开发人员倾向于做任何Microsoft提供的简单工具或模板的工作,而Java开发人员则更倾向于从软件工程的角度寻找正确的解决方案。这是完全主观的,并且无疑取决于特定的地区/市场,并且显然有很多人不适合这种模式,因此YMMV当然是。
  • 工具差不多。Microsoft有很多很棒的,易于使用的工具,这些工具对于在Windows上进行开发特别有吸引力。但是,我主要从事服务器端开发,我认为Java工具具有优势。特别是,事实证明,Maven在Java生态系统中是一种非常强大的工具,我仍然认为在.Net世界中,Maven还没有一个像样的工具。

因此,尽管有很多复杂的考虑因素,总的来说,我对选择使用Java感到非常满意,并且会在今天(2012年初)做出同样的选择。

也许现在我唯一会使用.Net的情况是,如果我正在开发仅Windows的桌面应用程序(.Net的优势显然是巨大的)。


9
+1:好答案!它总结了在评估整体生产率时应考虑的许多问题。某些语法糖可能会使一种语言看起来更酷,更“现代”,但是还有其他重要因素会影响生产率。
乔治

3
+1比以前的答案更全面。
NlightNFotis 2012年

1
由于您提到了Scala和Clojure,所以您最好也提及F#...
Mauricio Scheffer 2012年

2
大!彻底的分析。正是我想要的。:)
xebo

9

我有:Java 10年,C#8年

我投Java赞成

  1. 没有供应商锁定(您可以将应用程序/ Web服务器从linux更改为Windows到Unix)
  2. 第三方软件包(例如JasperReports JFreeChart,JSF或Spring)的互操作性/可互换性
  3. 大多数创新都来自这里(Log4j,Ant,Spring,Hibernate等)
  4. 在多个应用服务器(类似于A)上工作。例如JBoss,Tomcat,WebSphere,GlassFish,WebLogic

23
没有lambda的语言会出现什么样的“创新”?
SK-logic

6
ASP MVC之前还有其他MVC框架(例如MonoRail)...
EricSchaefer 2011年

2
噢,顺便说一句:Lambdas / Closures是一种语言功能,您在谈论框架。
EricSchaefer 2011年

5
@ SK-logic,您不需要lambda来编写O / R层。

2
@ Giorgio,lambdas非常适合GC中的任何语言。当然,它们在C ++和C中没有位置。
SK-logic

6

Java:5年(非连续)
C#:7年

我认为您无法通过这种方式来量化生产力。这在很大程度上取决于个人开发人员和项目。使用您的开发人员知道的知识。

编辑:
让我们将“典型企业应用程序”定义为:

  • 多层的
  • 客户端服务器
  • 数据库支持

Java和C#都可以做到这一点。这与语言无关,而与框架/运行时有关。同样,使用您的开发人员知道的知识。他们可以学习一种新的语言和新的框架,但是花很多时间才能学会。对于桌面应用程序将是正确的。两种语言都可以与众多GUI工具包/库一起使用,但是它们都有不同的方法和理念。


3
“这在很大程度上取决于个人开发人员”……这就是为什么他要从在两个领域都有经验的人(以及该项目)征求意见。...这应该需要一个答案,指出哪些项目将从不同技术中受益。
敬畏

4
它不依赖于这个开发人员(又名我),而是取决于应该构建该项目的开发人员。如果他说过他将要建造什么样的项目,那也将更加容易...
EricSchaefer 2011年

@eric是典型的企业应用程序
Edin Dazdarevic

@ Edin,Java确实具有带有内置企业功能的JavaEE版本。您可以使用此框架快速开发应用程序。但是,Magic会做很多事情,您必须遵守其规则。而且,如果发生问题,不要指望异常消息会有用,因为stacktrace非常大。访问名称错误的数据库或数据库已关闭,堆栈跟踪非常大,您看不到是什么引起了最初的问题。
JonWillis 2011年

5
确保有一个“典型的企业应用程序”,从a点获取此数据,让用户弄乱它,然后将其放在b点。;)
mezmo 2011年

6

我有10多年的Java经验(从1.1版开始!)和7年来的.NET(主要是C#)经验。

您有一个非常谨慎的决定,但是大多数情况下,您应该尝试分解为以下两种情况:

桌面应用

如果要开发桌面应用程序,则必须使用要使用的主要平台。如果是使用.NET的Microsoft平台,那么没有比母舰自身开发的平台更好的解决方案了。如果是Linux或多平台方案,请考虑使用Java或转向基于Web的解决方案。

基于网络的应用

这是一个很难做出的决定,因为每个人都有自己的优势和劣势。这里有一些:

C#

优势:目前,在将新功能构建到语言和平台/框架方面,其动力更大。一切都来自一个供应商,这绝对是一个优势。您还可以使用一些非常强大的组件,例如DevExpress(Java与DX团队多年来整合在一起的东西相差甚远,这极大地提高了生产力)。

缺点:对于企业应用程序,.NET不如Java成熟。您没有像Java那样有很多供应商在.NET中构建企业软件。

爪哇

优势:更加成熟(已经解释过),并且拥有一个大型社区,其中包含几个可以提供帮助的大型开源项目。几个所谓的.NET开源项目实际上只是Java项目的翻版。

缺点: Oracle拥有Java(我知道,不是JCP),这绝对是要考虑的风险。他们的意图不是很明确,我个人不喜欢这种语言的发展方向(我知道很多Java开发人员也有类似的担忧)。

服务器端应用

它与基于Web的应用程序基本具有相同的论点,但是因为不必担心UI Java在这种情况下会变得更强大。但是同样,如果平台主要是Windows .NET,则可能是更好的选择。

总体考虑

总的来说,我认为.NET的优势主要是因为Visual Studio 2010(提供了最好的IDE),MS SQL,实体框架,IIS等的紧密集成。这些都代表了生产率的巨大提高,而我拥有大量的经验证明。我也与大多数转向.NET的Java开发人员一起工作,他们基本上持有相同的意见。

我认为,微软比以往任何时候都强大意味着,.NET将会存在一段时间也是一个好点。因此,当展望10-15年时,.NET比Java更安全。


4

我是一名刚从大学毕业的学生,​​但是在这两种语言上都有商业经验,总共花了大约3年的java和4年的C#.Net(注意.net表示您可以使用C#,VB.net,C ++ CLI,和J#和F#)。

现在,我要说明的是我的总体偏好是C#而不是Java,而两者的语法相似,我喜欢.Net框架在Java跨操作系统兼容性方面的强大功能。您必须认真考虑,需要构建什么?这只是桌面应用程序吗?您是否需要连接到其他客户端,以及其他台式机,手机和网站?

**由于Stackoverflow上的问题已关闭,因此对IDE的讨论丢失了。最终的要点是Java有许多免费的IDE,但是在我看来,它们不能与Visual Studio的功能和附加组件进行比较。但是请注意,Visual Studio的费用超过了每个许可证的费用。

您需要查看开发团队已经具备的技能,因为这将产生初步影响。无论是语言还是框架方面的经验丰富的用户,这里还是那里没有哪个更快。我想指出的是,您不必考虑该语言,因为该语言只是语法,而是该语言正在使用的工具和框架。


11
VS每个许可证1000英镑?如果您获得MSDN订阅,则可以获得更多可用的软件和工具。我真的怀疑有人会为VS2010支付零售价。
James Love

6
@Michael,我从未尝试过破坏VS扩展。但是我确实使用或尝试过各种Visual Studio插件。这些工具包括Resharper,CodeRush,Gallio,VisualSVN,AnkhSVN,testDriven.Net等。
JonWillis 2011年

2
@JonWillis同意,那里有很多扩展。在该列表的顶部,我(每天)还使用Productivity Power Tools,用于SharePoint和WSPBuilder的CKS:Dev。该库(位于visualstudiogallery.msdn.microsoft.com上)有数千个,因此为VS编写更多扩展并不难(实际上已提供了完整的框架,并且有足够的社区支持) 。
James Love

1
对于计划要工作10到15个人年的项目,VS许可证的初始成本为花生。
敬畏

1
不带MSDN的Visual Studio 2010 Professional为550美元。
鲍里斯·扬科夫

3

由于语法和工具的相似性,C#或Java的生产率提高幅度都不大,无法对您的10到15个工作年的工作项目产生重大影响。我将更仔细地研究以下问题:

  1. 项目的要求是什么,哪些语言功能可以满足这些要求(例如,跨平台与富Windows客户端)。
  2. 作为项目方法/方法论,我可以采取什么措施,使我的团队高效地工作。
  3. 对于工作环境,我该怎么办,以确保我聘用,保留和充分利用可能用于最佳项目的最佳团队。

我认为,问题背后的前提是“((C#和Java)之间的生产率差异可能会显着影响所需的投资和上市时间”)是不正确的。我毫不怀疑会有一些区别,但这不会很明显。


3

我在Java和.NET之间来回切换,从Java 1.2到1.6,以及.NET 1到4.0,大约有10年的专业工作经验(在此之前是C / C ++程序员)。

一次,就像.NET 2.0一样,我想说Java和C#差不多,特别是对于后端工作。语言构造仍然非常相似。由于Visual Studio中的WinForms设计器,.NET可能会在桌面UI编程中获得优势,而Java在Web / Server方面将具有优势,这主要是因为您不受IIS的束缚。

现在进入.NET 3.5和4,我毫不犹豫地将生产率提高到.NET。在我看来,这主要是因为.NET是一种发展迅速的语言,因为MS可以相对快速地做出语言决策,而不是通过JCP的政策来推动变化。大改进是在var关键字中的LINQ,扩展方法,包括空凝聚运营商的全部??dynamic和可能很多更伟大的东西,真正提高生产力。

就是说,一个项目的“最有生产力”的语言几乎总是大多数开发人员最熟悉和最有经验的语言。学习曲线始终是最大的生产力杀手。


3

我注意到的一件事是,许多C#/。NET商店都采取“不在这里发明”的态度,并禁止所有第三方/开源库,而许多Java商店更愿意使用开源库。同样,似乎还有更多可用于Java的库。即使您查看.NET中一些很酷的第三方库,例如NHibernate,NPOI,Spring.NET等,它们也是Java库的端口,因此位于它们的后面。当然,似乎其中许多创新首先出现在Java上,之后又创建了.NET端口。从库的角度来看,Java无疑在新的创新发现方面胜出。

微软仍然制造一些官方库,例如ASP MVC,LINQ等。但是像ASP MVC一样,第三方库(例如Struts,Spring MVC等)已经不支持Java了,而微软则迟迟未进入模型视图控制器Web范例。

当然,这些库中的许多库可以节省大量时间,并使您的工作效率更高。核心语言与核心语言C#和Java并没有什么不同,对我来说,这太接近了。投入第三方图书馆的力量,规模肯定会倾向于Java。仍然在开店的情况下,很多这种倾斜都可以平衡。只是很多.NET商店在这里没有发明的态度,而许多Java商店则是完成工作所需的一切……这在我工作的公司中甚至是正确的,.NET团队并没有得到太多(由于管理),而Java团队拥有许多已批准的第三方库/实用程序。此外,使用.NET,还有很多免费的好东西(例如,如果要使用Microsoft Office文档,则在NPOI之前,大多数解决方案[不包括办公室自动化]不是免费的。


“不是在这里发明的”。基于什么理由?我在C#和Java之间进行混合工作,并且Java员工似乎更多地滥用它,例如创建IConverter并实现将字符串转换为双精度的逻辑,反之亦然。
乔治席尔瓦

由于多种原因,我更喜欢C#而不是Java,但是,与本地C#相比,我更喜欢将“迁移的” Java To C#库移植到C#库中,通常在现实世界中设计,测试和应用得更好。
umlcat 2014年

0

我问了自己很多问题:哪个更好?C#还是Java?

我会给你一个建议,这个建议是我研究的结论:没有一个是更好的,只有你很熟悉的语言,并且你可以做很多有趣的应用程序是最好的。

学习如何编程,然后使用一种语言进行大量培训,当您精通该语言编写代码时,考虑其他语言并相信我,您将像学习其他蛋糕一样学习其他语言。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.