将新的JVM编程语言引入已建立的企业环境


11

想象一下,您当前的工作场所是一家Java商店。有很多有关Java语言的丰富知识,并且有一个完善的构建和部署过程来以流畅,敏捷的方式处理所有事情。

有一天,一个项目问世了,它大声疾呼要用Ruby编写。只有高级开发人员才有关于Ruby的任何线索,但有一个普遍的概念,因为JRuby存在于JVM中,所以可以继续使用和支持现有的基础结构。同样,JRuby可以展示一种以更少的代码实现更好的方式来实现当前应用程序的方法,因此这可能表示正在进行的迁移。

请记住,JRuby只是一个示例,它可以等效地是Clojure或Groovy或在JVM上运行的任何其他程序。

问题是,您将如何引入这种变化-如果有的话?



1
无法想象您可能在那谈论的“ Java”商店gary
Gareth Davis

@Jonas很好的链接-很多东西可以在那里嚼。
加里·罗

Answers:


15

免责声明:当我写一本关于在JVM上进行Polyglot编程的书时,我有偏见(Shameless Plug !!-经验丰富的Java开发人员):)

首先,您只应在确实需要的地方介绍更改!

一个很好的起点是考虑Ola Bini的编程语言金字塔。Ola谈论稳定,动态和领域特定的语言。

Java是一种稳定的语言(静态类型化和托管的),由于各种原因(如果人们感兴趣,我可以稍后再讨论)对于动态层项目(例如Rapid Web Development)或特定于领域的层项目(例如建模)不是理想的选择。企业集成模式域)。如果您有适合这些层次之一的项目,那么这可能是一个很好的起点。

如果替代语言具有基本功能,您也可以考虑在稳定层引入一种新语言来替代Java。例如,Scala比Java更简单,更自然地处理并发。

根据要求,对此有更多要求。WRT Java:

  • 重新编译很费力
  • 静态类型可能不灵活,并导致较长的重构时间
  • 部署是一个繁重的过程
  • Java的语法不适合生成DSL

此时,您可能会问自己:“这些层中适合哪种编程挑战?我应该选择哪种语言?”,请记住没有万能的选择,但是我确实有一些评估您的选择时可以考虑的标准。

特定领域

  • 构建/持续集成/持续部署
  • 开发人员
  • 企业集成模式建模
  • 业务规则建模

动态

  • 快速的Web开发
  • 原型制作
  • 交互式管理/用户控制台
  • 脚本编写
  • 测试驱动开发/行为驱动开发

稳定

  • 并发代码
  • 应用容器
  • 核心业务功能

从一个小的低风险模块(请记住,这些JVM语言经常与现有的Java代码很好地交互)或项目开始。明确说明这将是一个废弃的原型。

确保您已经研究了该语言的编程生命周期和工具方面。您将要确保可以TDD,运行构建工具和持续集成,具有强大的IDE支持以及所有其他因素。对于某些语言,您只需要接受某些工具不存在或非常基础即可。开发人员和工具支持的力量可能超过语言的力量。

确保有一个充满活力的社区,当您遇到困难时可以为您的团队提供帮助。本地用户组对此更好。

确保开发人员接受了初步的语言培训,尤其是如果该语言不是OO风格的语言(移至Clojure并非易事)。

我想就是这样。我个人已经在Java开发中成功地将Groovy,Scala和Clojure与Java结合使用,以完成诸如XML处理,构建快速网站和进行数据处理等任务。


+1是一个完整的答案-尤其是“搬到Clojure并非易事”。我希望对动态层/特定于域的层选择标准进行一些扩展。这本书祝你好运!
加里·罗

@Gary Rowe-我将略微介绍选择标准,请在10-15分钟内再次检查:)
Martijn Verburg

@Martin感谢您的额外信息,非常感谢。
加里·罗

很好的答案,Martijn,非常详细且经过深思熟虑。也许您应该为此书写一本书!;)
Rein Henrichs

@Rein,好吧,我不得不承认我能够解释第7章的内容,该书专门讨论了这个问题;)
Martijn Verburg

3

我想添加一些有关“如果有的话”的话题的想法。确实,为什么要向团队介绍其他语言?的确,如果您只是在看单个项目,那么新语言可能会成为理想的任务工具。但是,如果您要进行许多项目,那么随着时间的流逝,您可能最终会获得许多其他语言。我不知道您的维护周期和项目数量,但是与以前相比,团队很可能必须以更多的语言提供大量的专业知识。

从业务角度来看,添加语言意味着向团队添加复杂性和知识要求。这延长了职业调整的时间,使在团队中放假的(或永久性的)专家替代更加困难,并且需要对团队成员进行额外的培训,这意味着短期内会放慢脚步。

在我眼中,使引言受到欢迎的策略也应该解决这些问题,而不仅仅是纯粹的功能方面。预期的收益是否值得像我上面提到的那样带来额外的麻烦和不利条件?如果可以证明这一点,则接受率可能会更高。指出对团队成员资格进行的大量投资也可能会有所帮助。


2

我会说,从边缘开始。在一些非生产性代码中展示该语言,例如构建脚本,maven插件,报表运行等。一旦他们看到了实用性和简单性,他们可能会更倾向于允许进入小型项目等等。

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.