速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

大家谈 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:416593

评论 1 条评论

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

龙蜥社区高性能存储技术 SIG 11 月运营回顾 | 龙蜥 SIG

OpenAnolis小助手

开源 高性能 存储 龙蜥社区 sig

如何用纯css代码实现太极阴阳鱼动画效果

千锋IT教育

CodeArts如何保证客户代码和应用安全?

科技怪授

华为云

前端工程师leetcode算法面试必备-二分搜索算法(下)

js2030code

JavaScript LeetCode

cleanmymac2023体验版功能讲解

茶色酒

CleanMyMac CleanMyMac X2023

融合内存计算和分布式计算 数据智能分析处理平台RapidsDB更快、更简单、性价比更高

科技热闻

【计算讲谈社】第十四讲|从学科融合走出的数字人,是技术变革还是应用创新?

大咖说

阿里云 吴翰清 数字人 元宇宙游戏

柏睿数据融合数据联邦+AI 打造更快、更简单、性价比更高的数据智能分析处理平台

科技热闻

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

Apache APISIX 玩转 Tongsuo 国密插件

API7.ai 技术团队

加密 api 网关 Apache APISIX

Meetup No.8 回顾 | OpenMLDB + MaxCompute:集成打通云上生态,高效构建 AI 应用

第四范式开发者社区

人工智能 数据库 开源 时序数据库 特征

Dimitra荣获Web3 & Blockchain企业精神奖,有望成Web3农业领导品牌

股市老人

什么是CodeArts?

科技怪授

华为云

前端工程师leetcode算法面试必备-二分搜索算法(中)

js2030code

JavaScript LeetCode

CleanMyMacX2023免费版Mac清理软件

茶色酒

CleanMyMacX

数据库挖矿系列-优化器设计探索穿越之旅

阿里技术

数据库

如何基于 APISIX 迭代数字智联平台

API7.ai 技术团队

api 网关 Apache APISIX 用户案例

一个多开发虚拟环境的命令行工具——asdf

吴脑的键客

Python ruby

OpenMLDB 社区月报 | 2022年11月

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

从源码到架构实战,Spring Boot+Spring Cloud微服务开发笔记全分享

小小怪下士

Java spring 微服务 springboot SpringCloud

基础设施 NFTScan 正式发布 Cronos 网络 NFT 浏览器

NFT Research

区块链 NFT 数据基础设施

澜舟2022年度产品发布,抢鲜看!

澜舟孟子开源社区

人工智能

2022鸿蒙开发者大赛应用创新赛道收官,中国赛区21个优秀作品获奖

Geek_2d6073

【Meetup 明天见】OpenMLDB + MaxCompute:集成打通云上生态,高效构建 AI 应用

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

专访 | 刘乔升:开源是人类智力劳动最好的组织形式

第四范式开发者社区

人工智能 机器学习 数据库 开源 时序数据库

【MyBatis】mybatis中#{}与${}的区别

No8g攻城狮

MySQL mybatis sql

活动预告 | 2022 中国开源开发者(北京)峰会

第四范式开发者社区

人工智能 机器学习 数据库 特征

花费半个月啃完这份滴滴Redis核心手抄本,我终于把面试官按在地上摩擦了

程序知音

Java 数据库 redis 后端技术

鸿蒙开发实例|对象关系映射数据库

TiAmo

华为 华为云 12月月更

CleanMyMac试用版4.12.1下载教程

茶色酒

CleanMyMac X CleanMyMac X2023

列存引擎 Tianmu 如何实现 Delete?| StoneDB 研发分享 #3

StoneDB

MySQL HTAP 数据库· StoneDB 12 月 PK 榜

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