写点什么

大家谈 18 岁的 Java——周志明:多语言协作至今仍是一个被严重忽视的优势

  • 2013-06-08
  • 本文字数:3202 字

    阅读完需:约 11 分钟

2013 年,已经进入第 18 个年头的 Java 仍然是 InfoQ 上最受欢迎的话题,最近的《详细分析Java 中断机制》、《关于Java 性能的9 个谬论》、《深入理解Java 内存模型》等系列文章,一直占据InfoQ 阅读热榜的首位。同时,今年7 月的 JavaOne 购票入口)再次选择了中国,7 月22-25 日将在上海世博中心举行连续4 天的会议,话题涵盖核心Java 平台、JavaFX 与用户体验、Java EE 和Web 服务/ 云,以及Java ME/Java Embedded/Java Card 等技术领域。

2013 年,在云计算、大数据、移动互联网等话题占据了人们所有的注意力的时候,Java 的状态到底如何?近期,InfoQ 中文站将对业内几位资深 Java 项目作者与书籍作者进行采访,了解他们眼中 Java 的现状,以及他们对 Java 未来的看法。

今天受邀参与采访的嘉宾是远光软件开发部总经理,《深入理解 Java 虚拟机》、《深入理解 OSGi》的作者周志明( @Iam 周志明)。

InfoQ:Java 语言给您留下的最初印象是什么?您最初的 Java 项目是什么样的?

周志明:我在大学以及刚开始工作时,并不使用 Java 语言。第一次接触 Java,是参与一个 MIS 项目,采用 JDK 1.4,EJB 2、JSF 1 作为技术平台,IBM WSAD 作为开发平台。

那时候对 Java 的感受很矛盾,一方面感觉 Java,准确的说是 Java EE 确实很规范、完善,框架和容器了提供很多功能,使用者大部分的技术性需求确实都考虑到了。另一方面,感受是 Java EE 很烦很繁,经常怀疑是不是必须把事情搞得那么复杂,最简单一个 SessionBean 至少要写 3 个类还要做一番配置,WSAD 虽然能帮忙做很多工作,但是又慢得一塌糊涂。“理想很丰满,现实很骨感”,相信这就是那时候很多人的感受。

InfoQ:您现在接触的 Java 项目跟那时相比,有怎样的变化?

周志明:现在的 Java 项目普遍从“迷信”趋于“理性”,以前的 Java 项目从迷信 EJB 为代表重容器服务时代,到后来迷信 without EJB 为代表的 SSH 时代,再到现在各种技术、框架都趋于成熟后,理性选择的时代。现在我接触的很多项目,除了 Spring 还被普遍采用之外,已经没有什么必然的技术存在了。

另外一个变化是现在的项目已经把非交付代码的需求提升到很重要的位置,单元测试、CI、Maven 等几乎成为项目必不可少的一部分。

InfoQ:您是否会推荐您在 Java 项目中的年轻程序员去掌握其他编程语言?您的首选推荐语言是什么?

周志明:我认为“掌握其他语言”不是推荐不推荐的问题,Java 程序员应该、必须学习掌握至少一门 Java 以外的语言。从互联网到企业应用,从手机、移动设备到分布式服务、从界面到后端,目前 Java 都有涉猎。使用一门语言包办绝大部分需求,对这门语言本身来说是一件好事;但对于人来说,这何尝不是一个单调的世界。熟练掌握一门语言的语法、框架、工具之后,要更进一步,或者说要精通这门语言,那会遇到很多问题,不得不站在语言之外去看去思考,才能避免“只缘身在此山中”的困境。

举一些例子,譬如去年发布的 Java 7 中,其中一个新增的特性是加入了 invokedynamic 指令和 java.lang.invoke 包(JSR-292)。仅在 Java 语言范围内,很难理解为什么需要添加 invokedynamic 指令?java.lang.invoke 和 java.lang.reflect 有什么区别?再譬如为什么有许多 JIT 的代码优化,尤其是激进优化,JIT 编译器能做,而 GCC 这些静态编译器不能做?没有其他语言的对比,这些问题都不容易想清楚理透彻。

InfoQ:对于一些从新锐编程语言开始入行的年轻程序员,比如 Ruby 程序员,您是否会推荐他们了解 Java?为什么?

周志明:如果主要使用的是 JRuby,那学习 Java 还是很有必要和价值的。否则,是否要学习 Java,我认为首先要取决于个人兴趣。若没有足够动力,仅仅从语法层面了解 Java,简单写几个 DEMO,那 Java 并没有什么可取之处,甚至可以说 Java 的语法已经落后于许多新生代的语言,也落后于它的竞争对手 C#(随着 Project Coin 和 Lambda 的加入,Java 的语言能力会改善一些),以至于让人产生 Java 语言非常啰嗦的误解。我认为 Java 最值得学习的是它极为完善成熟的生态系统,几乎所有你感兴趣的领域,都能找到对应的开源项目,而且在不少的技术领域中,存在着经过长期验证,蕴含精妙思想,值得学习阅读的项目。

InfoQ:不少传统的 Java 应用开发者最近都开始尝试 Scala、Node.js 等新的编程语言,编写出来的应用在编写效率、资源消耗等方面相比 Java 有很多优势。毫无疑问,新技术大量出现,老技术的适用范围会被部分替代。您认为 Java 的应用场景有哪些适合被替代,哪些不适合被替代?

周志明:说 Scala、Node.js 对比起 Java 有编写效率的优势,这点在开发处于中小型规模时,我是认同的。但是在资源消耗上,以相同的算法思路为前提,Scala 和 Java 都是 JVM 语言,将很难找到论据证明前者比后者性能有显著提高。而当开发规模膨胀到一定程度,我相信 Java 在规范、协作和性能调优上还是占有很大优势。许多著名应用都证实了这一点,如 Yammer 从 Scala 转 Java、Twitter 从 ROR 转 Java 等。

因此我认为关注快速成型的、中小型的互联网应用,新生代语言将会一定程度代替 Java,但是在大型应用,尤其是企业应用上,Java 的地位仍然难以撼动。

InfoQ:JVM 下多语言协作开发是否能够最大化地发挥 Java 自身的优势?

周志明:毫无疑问,多语言协作至今仍是一个被严重忽视的优势。许多人认为 Java 之所以基于虚拟机运行,目的仅是来满足 Java 语言跨平台的需要。这其实只对了一半,看那些没有跨平台需求的 C#、VB.net 语言,同样运行于 CLR 虚拟机之上,这样做的目的就是为了支持多语言。

Java 平台上的多语言混合编程正成为主流,每种语言都可以针对自己擅长的方面更好地解决问题。试想一下在一个项目之中,并行处理用 Clojure 语言编写,展示层使用 JRuby/Rails,中间层则是 Java,每个应用层都将使用不同的编程语言来完成,而且,接口对每一层的开发者都是透明的,各种语言之间的交互不存在任何困难,就像使用自己语言的原生 API 一样方便 ,因为他们最终都运行在一个虚拟机之上。

InfoQ:您觉得 Java 语言自身存在的挑战是什么?

周志明:Java 语言最大的挑战来源于自身。Java 一直引以为豪的社区管理(基于 JCP 管理)模式,利于集合多家厂商的力量,对 Java 语言的发展起了至关重要的促进作用。但是今天这种模式对 Java 的发展反而产生了制约。JCP 执委会中每个成员,基于自己的商业利益,都希望在 Java 发展方向上有更大的话语权,过于庞大的决策群体和决策流程导致 Java 患上了“大公司病”,前面提到的 Java 语法是一个例子,C#刚刚发布的时候是参考模仿过 Java 的,但到今天微软一家掌控的 C#,语法先进程度早已远远超过了 Java。另一个例子是 Java 的模块化规范,JSR-232、JSR-277、JSR-291、JSR-294 等技术提案几乎成了 Oracle 与 IBM 为首的厂商的商业斗争,导致 Java 的模块化进程一拖再拖。其他的例子还有 Oracle 与 Apache 关于 Harmony 的 TCK 授权之争、Oracle 与 Google 关于 Android 的 Java 授权之争等等。由于掺杂着越来越多的商业利益,导致 JCP 和 Java 的活力在逐渐减弱。

InfoQ:一旦 Java 8 走向成熟,是否可以支持现有系统向 Java 8 的成熟迁移?

周志明:尽管 Java 8 已经发布在望,但距离成为商用主流版本还有一段相当遥远的路。据我所知,目前还有许多企业信息系统甚至还在使用 JDK 1.4。Java 的每一个版本都是与之前版本保持兼容的,即使有少量不兼容的地方,修改成本一般也不大。迁移到新 Java 版本的最大的牵绊在于对新版本特性和虚拟机稳定性的考量,以及以前在生产环境中投入的成本两方面,例如用户已经够买了 Weblogic 10,没有特殊需要的话,那就一直用 Java 5 好了。

但是如果以“一旦 Java 8 走向成熟”为前提来讨论的话,Java 8 还是相当吸引人的,且不说 JVM 层面上的性能改善措施,光从功能上讲,即使 Jigsaw 被裁,剩下以 Lambda 为首的一系列改进仍然让人对 Java 8 保有足够的期待。

感谢张龙张逸提供采访问题。

2013-06-08 00:416549

评论 1 条评论

发布
用户头像
从2024年的视角看,当年周老师的回答还是依然很厉害
2024-04-01 15:06 · 浙江
回复
没有更多了
发现更多内容

TiFlash 表达式的实现与设计

TiDB 社区干货传送门

多种姿势搞定Tidb集群监控大屏

TiDB 社区干货传送门

监控

PCTP考试学习笔记之一:深入TIDB体系架构(下)

TiDB 社区干货传送门

TiDB 底层架构 管理与运维 TiDB 源码解读 TiKV 源码解读

2022年网约车平台服务用户体验指数(UEI)

易观分析

用户体验 网约车平台

师文汇:OceanBase 4.0 产品核心能力解读

OceanBase 数据库

独自一人开发一整套ERP系统是什么水平?

优秀

ERP系统

上游sql通过drainer同步到kafka时在kafka中是什么样子的

TiDB 社区干货传送门

实践案例 管理与运维 版本测评 大数据场景实践 实时数仓场景实践

SBOM落地的关键一步——漏洞可利用性交流(VEX)

SEAL安全

软件供应链安全 漏洞管理

阿里巴巴全新出品Spring全家桶笔记:(Spring+SpringBoot+SpringCloud)

Java永远的神

Java spring 程序员 面试 程序人生

MySQL的redolog如何保证数据不丢?其中原理你真的知道吗?

Java全栈架构师

Java MySQL 数据库 程序员 程序人生

2022 DEMO CHINA 创新中国峰会将于9月7-8日在无锡举办

创业邦

AppCube视角浅析: 艾瑞咨询《2022年中国低代码行业研究报告》

华为云开发者联盟

后端 开发

使用函数计算自定义运行时快速部署一个 SpringBoot 项目 | 文末有礼

阿里巴巴云原生

阿里云 Serverless 云原生 springboot 函数计算

冠军斩获10万奖金!首届"域见杯"医检AI开发者大赛精彩落幕

华为云开发者联盟

人工智能 华为云 医检

企业号九月金秋榜

InfoQ写作社区官方

企业号九月金秋榜

深入理解Java虚拟机!京东大佬耗时半年肝出来的HotSpot VM源码剖析笔记真香(附完整源码)

Java全栈架构师

Java 源码 面试 程序人生 JVM

实战-记录一次大版本升级

TiDB 社区干货传送门

新版本/特性解读

开放下载 | 飞天技术峰会-云原生加速应用构建分论坛资料开放下载

阿里巴巴云原生

阿里云 云原生

数字藏品:为何深受年轻人喜爱,到底有何魔力?

开源直播系统源码

数字藏品 数字藏品开发 数字藏品系统

RT-Thread记录(十六、SFUD组件 — SPI Flash的读写)

矜辰所致

RT-Thread 8月月更 SFUD SPI设备

pd-ctl 选项 --jq 格式化语法使用案例详解

TiDB 社区干货传送门

性能调优 实践案例 管理与运维 扩/缩容

历时10个月,1300+队伍参赛 第二届HarmonyOS开发者创新大赛奖项揭晓

Geek_2d6073

RT-Thread记录(十七、AT组件 — ESP8266使用 at_device 软件包联网)

矜辰所致

esp8266 RT-Thread 8月月更 AT组件

Dijkstra(迪杰斯特拉算法)的实现(C,C++,Matlab)

Five

算法 图论 8月月更

华为云算法零门槛:零基础教你AI试伊妆

程思扬

华为 API 华为云 开发者说

Dubbo 3 易用性升级之 Dubbo 官网大改版

阿里巴巴云原生

阿里云 开源 云原生 dubbo

Python自学教程7-字典有哪些常用操作

和牛

Python 测试 8月月更

融云移动办公协同平台,助力政企数智化转型升级

融云 RongCloud

企业 即时通讯

swap去中心化交易所系统开发技术分析

开发微hkkf5566

PCTP考试学习笔记之一:深入TIDB体系架构(上)

TiDB 社区干货传送门

管理与运维 TiDB 源码解读 TiKV 源码解读 TiKV 底层架构

看完年薪30W~120W程序员分别需要掌握的技能栈,我彻底悟了!

程序员小毕

Java 程序员 程序人生 后端 架构师

大家谈18岁的Java——周志明:多语言协作至今仍是一个被严重忽视的优势_Java_sai_InfoQ精选文章