Scala, Groovy, Clojure, Jython, JRuby and Java ----我们的工作语言

在以前的一封邮件中,我指出在众多改变中,最明显的一个就是:在java领地上的JVM上使用其他流行的语言的发展变得越来越快。一些老的和新的创建的基于JVM的语言---JRuby 和 Jython ,Java风格的语言---Groovy 和Scala 和brand ,新语言---Clojure 和 Kotlin,这些语言为我们提供了选择------得到JVM的性能和可靠性却可以使用一种不同的语法。

在一个理想的世界里所有的开发者都可以自己选择的自己的语言。现实情况是,作为开发者,我们被适合(我们的)语言和支持这个工具的公司实际上使用什么语言所约束。首先,你选择的适合你的领域的语言---能让你的工作快速容易,更重要的是对于你们的非功能化需求例如:性能可以变得快速容易。其次,没人愿意成为使用简单的编辑器来处理编码过程-苦力(码农)。是的,我知道,我们都可以使用Vim和Emacs或者流行的IDE比如IntelliJ或Eclipse等,来容易和迅速地完成大片代码的重构(你好TDD!)。第三,现实的情况是,在我们的位置上(职位上)很少能指导(决定)我们的雇主选择什么语言。学习一种不断上升人气的语言意味着你在未来有更多的就业机会,可是雇主却决定着语言的选择权。

事实上,许多公司夸耀他们使用最新的语言,因为它使他们更具吸引力来招聘他人。你几乎不能不关注微博和推特上的人们在大喊大叫“我们的公司已经被新的语言改变了开发流程”可是这个场面是真的么?

在Indeed.com上有一个有用的业界认可的我们可以继续工作的趋势图。在Tiobe爷爷辈的语言图中,可是在下面两点上却没有用。a) 
它没有提供足够的信息 b)它是简单的游戏。—是的我们知道是Delphi干的(yes
Delphi dudes)。现在,在你抱怨之前,我知道使用这样的(处理方式)从完美和科学的角度是远远不够的还有很长一段路要走。但除非你想做一个纵向研究,询问所有的公司,他们使用的是什么?相信他们的答案都是真实的而不是营销的上的噱头,来说明它可能是足够好来解释(语言的流行)

那么,这能告诉我们关于行业如何看JVM的主要语言:Java,Groovy,Scala,Clojure,Jython和JRuby *。当我们一览(关注)所有在工作中涉及到的语言所占比例的时候会发生什么呢?

嗯,好……很明显,在业界尽管关于其他语言有的喧嚣之声不绝,Java仍然是大量存在,在就业市场上几乎占有3.5%的工作都对Java的知识有要求。我们都知道,Java是一个行业重量级的,但有点吃惊,相比其他语言是一个难以分辨的线。总计都近0线,他们就需要一些大量的,指数性增长才能开始威胁到Java。

当你拿走Java会发生什么情况

这是一个有趣的多。首先,Jython是比其他Java真的接受了JVM上的第一语言。Groovy开始回升2007,很快成为替代语言第一,毫无疑问,而由Grails,Clojure和JRuby从来没有得到太多的支持。尽管在过去18个月左右开始的上升。我觉得最有趣的一点是,在Scala的接受最近有所增加。目前排Jython后排第三,梯度表明,它将很快进入第二。把Scala和Groovy置于一个相对应的基准,来比较他们的增长速率,我们就会看到如下。

于是我们可以看到,Scala终于超越了Groovy的增长率。于是我们可以说,当你想温习一下旧的Groovy课本或许看了一眼Scala, 但你能做的最好的事情就是保持你的Java水平(在这些语言中)顶层的位置。业内人士关心的是Java是JVM语言的老大什么时候到头呢?不过看起来是在路上(被取代的路上)。

时间: 2024-11-08 17:08:05

Scala, Groovy, Clojure, Jython, JRuby and Java ----我们的工作语言的相关文章

Java Next: Groovy、Scala or Clojure?

Java 下一代: 选择您的下一个 JVM 语言 如果任意 Java 下一代语言都适合作为您使用的下一代语言,那么您会如何选择?本文调查了会对这个重要决定产生影响的各个因素. Java 下一代: 克服同义词干扰 上一期 Java 下一代文章(“函数式编码风格”)对比和比较了 Scala.Groovy 和 Clojure 中的函数式编码风格.在本文中,系列作家 Neal Ford 将会更深入地剖析 Java 下一代语言中的过滤.映射和缩减(reduce)功能.文中提供的一系列简短的编码示例可帮助您

Scala与Clojure函数式编程语言的逆袭

编程世界就好比江湖,各种技术与思想有如各种内外家功夫在历史的舞台上纷呈登场,各领风骚.如今,自C.C++传承而来的以Java为代表的命令式语言一派可谓如日中天.门徒万千.多年来,这几门语言一直占据着TIOBE编程语言排行榜前几名,而很多"没落"的语言却在最近这几十年里逐渐淡出了人们的视线.在命令式语言中,随着面向对象编程的流行而兴起的对设计模式的探讨始终是OO程序员群体中的热门话题,设计模式的相关问题也一度成为面试官遴选候选者的硬性指标. 然而,江湖上逐渐出现了一种说法,"有

Java 下一代: Groovy、Scala 和 Clojure

在与 Martin Fowler 共同参加的一次主题演讲中,他提供了一个敏锐的观察报告: Java 的遗产是  平台,不是  语言. 最初的 Java 技术工程师曾做过一个了不起的决定,将语言从运行时中分离出来,最终使 200 多种语言可在 Java 平台上运行.该基础架构对平台保持长久活力非常关键,因为计算机编程语言的寿命通常很短.自 2008 年以来,每年由 Oracle 主办的 JVM 语言峰会都会为 JVM 上替代语言的实现者提供与平台工程师公开合作的机会. 欢迎来到 Java 下一代专

[转载] 详述三种现代JVM语言--Groovy,Scala和Clojure

转载自http://www.tuicool.com/articles/jYzuAv和http://www.importnew.com/1537.html 在我与Martin Fowler曾经合作呈现的一次主题演讲中,他作出了一个有洞察性的观点: Java的遗产将是平台,而不是程序设计语言. Java技术的原始工程师们作出了一个明智的决定,就是将编程语言与运行时环境分开,最终这使得超过200种语言能够运行在Java平台上.这种架构对于该平台的长期活力是至关重要的,因为计算机程序设计语言的寿命一般都

详述三种现代JVM语言--Groovy,Scala和Clojure

Java的遗产将是平台,而不是程序设计语言. Java技术的原始工程师们作出了一个明智的决定,就是将编程语言与运行时环境分开,最终这使得超过200种语言能够运行在Java平台上.这种架构对于该平台的长期活力是至关重要的,因为计算机程序设计语言的寿命一般都是比较短.从2008年开始,由Oracle主办的一年一度的JVM语言峰会为JVM上其它的语言实现与Java平台工程师进行开放式合作提供了机遇. 欢迎来到Java.next专栏系列,在本系列的文章中,我将讲述三种现代JVM语言--Groovy,Sc

Groovy轻松入门——通过与Java的比较,迅速掌握Groovy

Groovy和Java的相同点有: 3+, 4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 20+, 21, 22, 23, 28+, 29+, 30+, 31+, 32+ +表示Groovy不但涵盖了Java的语法,而且还有增强部分. Groovy和Java的不同点有: 0, 1, 2, 5, 7, 9, 11, 16, 17, 19, 24, 25, 26, 27 下面所列序号不分先后顺序: 0. 在Groovy可以用def定义无类型的变量(定义变量方面def与

java安全沙箱(三)之内置于Java虚拟机(及语言)的安全特性

java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及Java API 本篇博客主要介绍下"内置于Java虚拟机(及语言)的安全特性":其它几类安全机制会在后续博客中陆续介绍. 简介 jvm装载一个类,并且对字节码进行了四趟扫描,这些字节码就能安全地被执行了.然而去了这些安全校验,jvm在执行字节码时还进行了一些内置的安全机制校验.这些安全机制

Java类加载器工作原理

Java类加载器是用来在运行时加载类(*.class文件).Java类加载器基于三个原则:委托.可见性.唯一性.委托原则把加载类的请求转发给父 类加载器,而且仅加载类当父 类加载器无法找到或者不能加载类时.可见性原则允许子类加载器查看由父类加载器加载的所有的类,但是父类加载器不能查看由子类加载器加载的类.唯一性原则只允许加载一次类文件,这基本上是通过委托原则来实现的并确保子类加载器不重新加载由父类加载器加载过的类.正确的理解类加载器原理必须解决像 NoClassDefFoundError in

Java 8 动态类型语言Lambda表达式实现原理分析

Java 8支持动态语言,看到了很酷的Lambda表达式,对一直以静态类型语言自居的Java,让人看到了Java虚拟机可以支持动态语言的目标. import java.util.function.Consumer; public class Lambda { public static void main(String[] args) { Consumer<String> c = s -> System.out.println(s); c.accept("hello lambd