Scala代替Java是一个不错的选择吗?


11

我们将开始一个新项目,其中将培训所有使用Java(frameworks / ECO system等)的.net开发人员。我们有很多用C#编写的代码,似乎所有这些都将浪费掉,因为我们必须用Java重新编写所有代码。我看到的问题是,大约第一年(可能是两年),我们将无法交付任何东西,因为我们将大部分时间用于重现Java以前但现在的内容。

由于我们的团队分布在世界各地的不同办公室,并且我们有大量的Java开发人员(20至30名)和10位使用.net的开发人员,因此我们希望让所有开发人员都使用相同的语言/平台,以便我们开始重用组件/模块。所以我可以理解管理层的观点。

昨天我遇到了Scala,并想知道将它与当前产品(用C#编写)一起使用是否会更好,然后至少一年后我们将有一个有效的产品。同样在一年中,我们在迁移产品的其他部分时可以在Java世界中使用这些模块。

考虑到我们要实现的目标,Scala是比Java更好的选择吗?


2
用另一种语言重写所有内容?还有2年没有交付成果吗?听起来像是一个糟糕的管理决定,并且您可能需要半年的时间
才能找到

是的,考虑了。不确定我现在应该从哪里开始并坚持使用C#:)
JD01

1
这听起来像是您要做的事情您不应该做的
back2dos

Answers:


15

需要考虑的几点:

  • Scala是一门很棒的语言-但值得注意的是,正确学习和使用它也是一种挑战性的语言。不只是我的意见-即使是经验丰富的Scala专家也这么说。根据您团队中的技能水平,它可能最适合作为最有经验/专家开发人员的工具
  • Java和C#在许多方面都非常相似-训练有素的开发人员可以很快迁移(语法相似,这主要是学习每种语言的怪癖并了解不同库的情况,通常具有相似的功能,但包装方式不同和/或名称不同)。我个人已经从Java切换到C#,然后又重新回到Java,没有任何困难。
  • 还值得注意的是,所有JVM语言(Java和Scala,还有JRuby和Clojure等)都非常兼容-它们共享相同的基本JVM平台,并且可以非常轻松地共享代码/库。

考虑到所有这些,您可能想要对冲赌注,并采取混合Java / Scala策略 -即迁移到JVM平台,并最初专注于Java,但是在开发人员感到满意和/或感到满意时,继续使用Scala。它适合眼前的问题。

从管理角度来看,这具有许多优点:

  • 您仍然可以共享所有库,因此您的投资将是安全的
  • 您经验不足的开发人员将能够快速转移C#-> Java
  • 您经验更丰富的开发人员可以充分利用Scala中的高级功能
  • 所有工具都是兼容的/可以共享的(构建系统,IDE,部署工具等)
  • 您可以免费访问JVM上非常广泛的开源库生态系统(以及跨平台可移植性,这可以说是JVM平台上的最佳理由)
  • 您的开发人员可以使用使自己的技能/任务更加高效的语言(在某些情况下使用Java,在其他情况下使用Scala,将来可能还会使用Clojure等其他语言)

缺点是您仍然需要两种主要语言来支持。但是实际上您实际上可能已经不止两个了(shell脚本,特定于域的XML格式,配置文件,规则引擎,HTML或Javascript?),所以您可以说这实际上并没什么大不了的。


谢谢你提供的详情。我只是想找出什么是最好的前进方向,并且您提供了一些出色的信息。目前,我们有一些优秀的OO开发人员,但没人熟悉函数式编程。
JD01

1
乐意效劳!值得注意的是Scala更像是一种基于多范例/ OOP的语言。虽然您当然可以在Scala中使用FP,但是如果您希望语言的功能更加清晰,那么Haskell或Clojure可能更接近目标。
mikera 2011年

至于代码重用,如果我从第一天开始使用Clojure或Scala,或者甚至按照您在混合策略中所说的那样,是否可以在.net和Java中重用Clojure / Scala代码?我想知道这是否是管理层的一个好卖点。这样,我们仍然可以推出产品(具有新功能的旧产品),并且还可以通过Clojure / scala模块的代码重用来重新编写Java中的现有代码。我在这里的想法是否正确,还是会带来其他问题?
JD01

1
如果愿意,可以将Clojure / Scala功能公开为Web服务或REST接口。这比仅直接构建一个库要高一些(如果您想从Java /另一种JVM语言调用该功能,这将是最佳选择),但肯定可以灵活地从您喜欢的任何客户端调用代码。网络,Java,Ruby等)
mikera 2011年

谢谢迈克。我认为代码重用路径至少会向管理层表明,使用Scala / Clojure选项不需要完全重写。我不希望我们最终像Netscape :)。回到构建库,如果没有Web服务,是否可以在.net和Java中使用它?
JD01

15

我将添加第三个选项。您组织中的任何人都在研究C#和Java模块之间的互操作吗?您如何公开C#功能?是否可以选择SOAP或RESTFul Web服务?

两年的重写可能是一个组织的丧钟(问Netscape)。但是,在现有代码相互配合的同时逐步进行迁移可能会减少业务影响。


3

将C#重写为Scala与重写Java一样困难。至于哪种语言“更好”,那一点没有意义,每种语言都有其自己的正负点。

我不知道您的代码库有多大,但是对于30个开发人员来说,两年的时间对于一次简单的重写来说似乎是巨大的。当您知道C#很简单时,就可以开始使用Java。我花了一两天来适应它。

我的建议是让管理人员按照自己的方式行事,并享受获得报酬以扩展技能的事实。


只有大约10个开发人员将使用新产品。我只是想找出使用​​Scala的利弊。
JD01

1
我对您的项目或Scala的细节了解不足,无法给您确切的答案。但是在我看来,引入没人知道的第三种语言只会使事情复杂化。
Tom Squires

你可能是对的。我考虑过要在一年左右的时间内推出产品,同时又能够重用.net和java中的代码。您的观点很清楚:)
JD01

1

我认为更简单的选择是让Java开发人员学习C#。两种语言在许多方面都非常相似,并且Java开发人员花很长时间即可选择C#。我曾与许多学习C#的Java开发人员一起工作,通常这是一个平稳的过渡。WebForms编程模型是它们可能会停留一段时间的一个方面。Java开发人员可以更好地适应MVC范例。这样,您无需等待一年就可以开始开发新功能。至于Scala,恐怕这将给所有30个尝试学习一种新语言的开发人员带来一个全新的问题。


有太多用Java编写的产品,因此要让他们学习C#会很困难。我希望使用Scala,一旦有了新产品,Java开发人员就可以直接使用库而无需学习Scala。
JD01

2
如果将现有的.Net代码公开为Java开发人员可以调用并开发Java中所有新功能的服务,那还可以吗?
斯里拉姆

过去曾提出过建议,但已决定我们不再使用.net。
JD01

哇!然后,我将使其保持简单并用Java重写代码。我认为Scala会引入另一种复杂的管理方式,这对管理人员来说是一件很难的事。
斯里拉姆
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.