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

今日 Java——Cay Horstmann 访谈

  • 2014-02-14
  • 本文字数:6363 字

    阅读完需:约 21 分钟

近日 InfoQ 荣幸邀约 Cay Horstmann,就 Java 最新形势和 Cay 的新书 Java 核心技术:卷一 & 卷二(第九版)进行探讨。

自 1995 年首版发布以来,Java 历经多次变更:从语言规约的扩充到 Oracle 并购 Sun 后所有权的变动。本次访谈的第一个话题是 Oracle 的 Java 管理。

InfoQ:您如何看待这些年来 Oracle 对 Java 的管理?可以谈语言特性,也可以谈商业运作,诸如在 JRE Installer 中绑定第三方浏览器工具栏。

Horstmann:我并不喜欢工具栏绑定。这一点 Oracle 表现得很矛盾。一方面,他们投入大量资源改进 Java,另一方面,他们又在做些不利于 Java 的事。过去很长一段时间 Java 的安全处理都很差劲,不过如今正迎头赶上。Oracle 的管理是把双刃剑。 社区在 Oracle 做出这种值得商榷的决定时不会有任何争议。与内部人员交谈时,他们会宣称,“我就这点权力,对该问题没有任何话语权。”而 Sun 决不会出现类似的问题。Sun 一度开放,情况不乐观时 Sun 会欣然承认需要改进。我琢磨着这点可能和 Oracle 内部文化相关。

InfoQ:所以 Oracle 会否认问题直到发现可行解?

Horstmann:我想那会是一种很好的处理方式,虽然不受待见。此外,Oracle 和 Google 的诸多诉讼会让很多人不喜欢 Oracle。

InfoQ:确实。整体看来,Android 有点像 Java 平台的大使。Google 选择了 Java,Java 的开发需求量会因此增加,Java 的整个市场渗透率也会随之提升。

Horstmann:诚然。Sun 不曾为 Oracle 留有任何有利市场。多年来,Sun 一直对 Java ME(Java 平台的微型版)手机寄予厚望,但人所共见,ME 日渐没落直至灭亡。此外,Sun 未发布智能手机提案。

InfoQ:你是一名作者,也是计算机系教授。你教 Java 是由于学生有学用 Android 开发的意愿,还是个人或校方的要求?

Horstmann:任何课程引进新语言都要付出巨大代价。任何语言的熟练掌握和高效运用都要学生付出一学期以上的时间。所以,课程设计时要有选择性。一方面,Java 有很强的适用性:从最简单的作业,到数据库课程,网络课程和 Android 移动开发课程。另一方面,与教学生十种语言相比,以 Java,C 和函数式语言等典型语言为例传授基本概念才是教师的职责。

InfoQ:你在移动开发课程中使用的是哪种语言?

Horstmann:过半的学生用 iPhone,因此,我想让他们有一些 iOS 开发经验,诸如他们所关心的如何让应用程序上机、上架。总体上看,课程会有 50% 的 Android,30% 的 iOS 和 20% 的 HTML5(移动 JQuery,PhoneGap 平台)。

InfoQ:这种分授方案在学生中反响如何?

Horstmann:这种多重视角大有裨益,学生们很感激。但最终,绝大多数学生更愿意在 Android 平台上工作。

InfoQ:你认为 Java 未来的落点在哪?基于 Android 的开发?

Horstmann:服务器端,特别是大型购物网站,还会用到很多 Java。我观察过周边的初创企业,有很多没有选择 Java。我不知道他们是否有特定原因。与这部分人交谈,问到“是哪些考虑使你在技术决策中放弃了 Java?”答案多是“我不知道,我不了解 Java。”这些公司中的整整一代年轻人都不了解服务器端 Java。像我会觉得境况堪忧。Oracle 并没有做出足够的努力来向人们证明最新发布的 Java 实际上很好用。Java 已不是一门艰深的学问。现阶段的 Java EE 很简单,支持工具极多。

InfoQ:就初创企业而言,Java 并不是因此不受待见。

Horstmann:Oracle 更倾向于为有能力购置昂贵设备的大型机构做调研。但很多创新,特别是硅谷中的创新,更多发生在小团队中。这部分人用 Rails,用 Node.js,而不会用服务器端 Java。有时这并非技术原因。有时连他们自己都不知道有何损失。

InfoQ:关于最新版本的 Java 7 或者即将到来的 Java 8,你认为 Oracle 是该致力于解决 “时尚因素”问题,还是该解决营销问题,比如如何营销服务器端的优势?

Horstmann:我认为 Java 服务器端的营销确实有问题。就服务器端开发而言,经营良好的语言应有广阔的市场,包括用这种语言处理问题得心应手,包括语言背后良好的工具支持。可极少会有人建议“可以试试 Java。相比若干年后时兴技术 X 可能遭遇的各类瓶颈,初用 Java 应该会更高效。”

InfoQ:是这样。小型购物网站的问题也许在于应用呈指数型增长时是否有必要从 Node 或 Rails 切换到一个“更正式”的环境。

Horstmann:是的。在我看,对 JavaEE 敬而远之并非幸事。即便开发小型项目,Java 也常常能相当快速且轻松完成任务。如今我所接手项目的用户数量多几千或上万,不会有百亿之众。我发现无论项目大小,很多人一概无脑选用像 Rails 之类的技术。这样做,你必须去找会 Ruby 的人。Rails 的那套技术是全新的,而找到 Java 开发者则相当简单。

InfoQ:你说的情况更多针对当前开发者还是大学新人?

Horstmann:大学新人。Java 在教育中相当普遍,而学过 Ruby 的人会很难找,无论这些人学 Ruby 是自娱自乐,还是工作所需。

InfoQ:你如何看 Java 随时代变迁而发生的变化?

Horstmann:任何一种想经久不衰的语言都应该具备用户现阶段需要的特性。比方现在,并发情境下,函数式库更为时代所需。没有这些特性不是不行,但这些特性会为 Java 8 锦上添花。就目前所支持的特性而言,Scala 可能更胜一筹,但 Scala 有其他问题,比方说复杂性。

InfoQ:也就是说,Scala 用户更多看重 JVM 平台,而并不想使用 Java。

Horstmann:如果你了解所做的事情,Scala 可能会更高效。一半或更少的代码就足够表达你的想法。有些在 Java 中你会因为繁杂而不愿尝试的方法,在 Scala 中就很简单。我很喜欢 Scala,但我偶尔也会为之担心。(用 Scala 编程时,)如果走错了一步,你可能要抓耳挠腮一会了。 多数情况下 Java 简单一致。我甚至记不得最后一次自问“Java 语句暗中做了什么”是什么时候。这条特性很有价值。

InfoQ:特别是在公司或团队环境中,从事人员会超过两三个。要求相关人员记得所有资料会十分困难。可预测性却是必须的。

Horstmann:确实。你不会记得 C++ 11 的所有特性。那种语言太繁杂。

InfoQ:Ruby 之类的语言呢?我是说你可以立刻着手,之后呢?

Horstmann:Ruby 本身并不提供更多选择。Rails 才使之真正规范化。也许你会花好几天冥思苦想某些 Ruby 谜团,可专家会告诉你,“这是它两年前的运行方式,现在的运行方式有很大不同。”

InfoQ:就 Ruby on Rails 所能提供的优点而言,你认为那些自称最小化 Ruby on Rails 的 Java 框架是否有效?

Horstmann:现在看来 Rails 解决过很多并无解决必要的问题。如果客户端通过移动设备、tablet 或 HTML 5 提供用户界面,用 Javascript 做渲染,Rails 的 HTML 模版会无用武之地。所以将来 Rails 是否会再度高速增长,我不知道。

InfoQ:书中是如何处理 Java 选材问题的?现在分上下两卷,如果知道当前语言的规模,你会作哪些调整?挑选主题的标准是什么?

Horstmann:因为要求涵盖所有内容,最初书的主题很多。若干年前初次设计时,Swing 和 RMI 是热点。这会是讨论这些内容的最后一版。下一版,即 Java 8 版中,我会更关注人们想达成的目标。Swing 或 RMI 在下一版中仍出现是不可想象的。最后一次用到这些技术是多久之前了?

InfoQ:书中涵盖了整个语言,显然不是简化版。开发新手或 Java 用户会对此表示感激,还是只关注卷一?

Horstmann: 一半以上的读者没买实体书。查阅销售记录时,我发现 Safari Books Online 是主要销售途径。程序员在那儿每次读几页。

InfoQ: 保持书中内容系统有序很重要,而书的厚度并不重要,读者可以从书中主动获取想要的知识而不必通读全本。

Horstmann: 确实如此。新版中也许不包含 Swing,但 Safari 仍会留有旧版。所以绝非 Swing 到了世界末日。实际上我更惊讶于电子版发行后快速增长的销量。计算机市场中这一现象已持续了一段时间。 我并未试着加入一些孤立环境中很难理解的长例子。有些书会这样做。他们渐渐扩充实例,这会让跳读变得很难。

我试着让每个人能直接从感兴趣的那一章节读起,而不必一定要先读过之前的六章。

InfoQ: 你已展望过 Java 8。在你看,最需要或者最应该被关注的特性是什么?

Horstmann: Lambda 表达式毫无疑问是一个。容器方面的改进是一个。这些会让日常开发变得十分简单。为充分利用多核而不加大程序员开发难度,并发方面的变化也很重要。Java 8 和 Scala 会让这一工作变得优雅。程序员呼吁,“噢,我想所有事情都并行。”你恰好有一种并发的解决方案,通过操纵一个类似 Linq 的队列轻松实现并发。这点将会十分重要。

InfoQ: 基本数据类型有必要消亡么?研究时我发现基本数据类型和包装类型间兴许存在共性。

Horstmann: 那就太好了。若干年前,我问过那段时间正研究这个问题的 Neal Gafter:即便基本数据类型相比范型添加了一整层复杂性,基本数据类型为何仍未消亡?他说存在这样一种无法等同 int 和 Integer 的情况。有人创建了类似 Integer(42) 的新对象并把它当锁来使用。这种情况下,如果你无法区分两个不同的 Integer(42),代码将会失效。 绝对的向下兼容看来并不理性。可交换情形下,int 和 integer 的差别应当是 VM 所能识别并优化的。

同样,对 VM 而言,int 数组和 integer 数组间的交换同样困难。

现在看来,整型和浮点型数值在最初就该当对象看,但 20 年前,基本数据类型听上去是个好主意。

InfoQ: 初次向学生介绍 Java 时,你会选用 Integer 么?

Horstmann: 不会,我用 int,因为很多库都用 int。我不会用太多时间区分两者。用容器时,自然会考虑包装类型。实际上这并不打紧。难道你会经常用 ArrayList 存储整型? Java 主要关注两方面。一方面,Java 门槛低,理解它无需博士学位。另一方面,Java 库非常庞大:总会存在一个完成任何你想完成功能的 Java 库。

很多语言不具备这样庞大的扩展库。比如 Python,和 Java 比,Python 的库相当局限。

和 Python 比,Java 还有一个好处在于向后兼容性。我赞成 Python3 的规范和优雅,但我不知 Python2 会坚持多久,而兼顾两者并不好受。

InfoQ: 庞大的遗留代码会产生问题。

Horstmann: Scala 会让你体会残酷性。似乎每隔半年所做的一切就会被全然颠覆,你将从头开始。

InfoQ: 确实。这种情况很多?

Horstmann: 是的。有些时候必须结束。但目前你必须全部重新编译,因为 Scala 并非二进制兼容。Scala 的语言特性存在足够的变化空间,而这也正是修正良机。

InfoQ: 这对语言发展极好但不利于继承。

Horstmann: 是的。那也是为什么有时他们会说“好吧,我们之前已经做得足够有趣,现今我们将使之平稳。”

InfoQ: 全面审视后,若由你来负责 Java,你认为 Java 所要克服的最大障碍是什么?(舍弃或改良)

Horstmann: 也许是基本数据类型。基本数据类型带来的复杂性非常烦人。还有什么我真正讨厌并想摆脱的?我从未想过。你也知道,Java 语言特性不算多。但我讨厌漫长的启动时间,那妨碍了 Java 被作为脚本使用。这点是我从未关注的。也许是 Java 9,也许是我的孙子活着时,我希望 Oracle 能通过模块化关注这点。这限制了 Java 的适用范围。 另一件与 Java 本身无关而与环境相关的问题是安全。用户正在流失,因为 Oracle 无法像承诺所述的那样更新 JVM 客户端。从来没有人会抱怨 Flash 不安全,因为 Adobe 每三周都会推送给你一个新版本。而就我 Windows 机器上运行的 Java 而言,一打开它我就会看到一个 Java 需要更新的小图标;但每次点击图标,都会报出无法执行的错误。这么多年过去了,一切如旧。

InfoQ: 我从未想过能这样比较 Java 和 Flash,但这观点不错。Adobe 相比运行时 Java 似乎有更好的解决方案。

Horstmann: 是的。只要单击按钮 Flash 就会更新。而 Java,则是报错。就我的观察,几乎每个学生的机器中都有一些旧版 Java 等待移除。

InfoQ: 活跃开发者也许更容易找到所安装的程序并保证程序正确安装,但可以肯定的是,远程诊断会带来困惑。

Horstmann: 确切而言,是的。分析之后,你会为常规用户提供什么样的补救方案?“是时候格式化硬盘了?”

InfoQ: 你还想改变其他的一些么?

Horstmann: 如果你是在问哪些不好的语言特性需要消除的话,用不到且不希望存在的特性有很多,比如带标号的 break。为了消除偶发复杂型,这些特性是我想舍弃的,但这些特性极少使用,所以并不妨碍。另一方面,并非任何特性我都想舍弃,有些特性确实代表了 Java 的设计。至于添加特性,噢,另一件我想舍弃的特征是属性。我不喜欢 getter 和 setter 方法。 这并不像解决世界饥饿,但没有模版也不错。我喜欢 Scala 的一个原因是,你能在几行内定义一个简单类。

InfoQ: Java 的模版类型常被指责。

Horstmann: 是的,但让我们认真回顾下。人们赞誉 Java 是新一代 Cobol。Java 横空出世时 Cobol 正濒临灭亡。还记得有段时间,世界上一多半的程序员都用 Cobol 编程,几年之后,没有人再用 Cobol。那种变化非常非常快。至于 Java,我认为还有很多事情 Java 可以做而 Cobol 中不存在的,比如,具备一个可移植性强的世界一流虚拟机。由于这些原因,我认为 Java 会存在更久。 另一件事情是,Cobol 消亡时,有一些更好的替代品。可目前,什么值得人们趋之若鹜?我的意思是,并不存在其他值得你高呼哈利路亚的替代品。

InfoQ: 是的。我指其他一些语言。比如 C++ 圈内,C++ 的自我复兴最为引人注目。

Horstmann: 你想用 C++ 编程么?

InfoQ: 如果你是 C++ 程序员,也许会更认同,但我不知道对新程序员而言,那是否足够吸引。再看 C#,很多用户觉得 C#优于 Java,而这部分用户中很多是程序员,这部分人认定微软将放弃 C#转向支持更新的技术。

Horstmann: 综合看来,C#就是 Java。C#具备一些 Java 不具备的特性,但如果某一特性真的重要,Java 会很快具备。

InfoQ: 但对 Java 程序员而言,使公众接受似乎并不够。如果你是 C#拥护者,会很高兴。但绝大多数阵营都已分化。程序员新手并非从已分化阵营中来。那之后,尽管我不想用悲观的腔调说,但你只会得到……

Horstmann: 市场定位。

InfoQ: 是的。不同的大小,不同的竞争语言群体。

Horstmann: 是的,从这一点看,没有语言能一统天下。若你能找到那么一种语言,告诉我,我会写下一本书。

InfoQ: 有很多新语言,其中一些至少小范围内很流行,但没有一种广泛流行。现在每种语言都有支持者和批评家,但没有真正的狂热者或是或仅仅推动任何事。

Horstmann: 广泛流行很困难。不光是语言。而今,人们期盼一种合适大小的库,一个虚拟机。直接在裸机上运行语言的时代已告结束。一些你能在 VM 上做的优化,像 Objective-C 之类的语言想都不要想。JavaScript 运行得相当好,他们让虚拟机更具生气。

InfoQ: 几乎只有两类主流库。一类静态类型推断为主,希望得到更多语言特性。另一类追求速度为主。两类库间存在重叠而不存在共性。

Horstmann: 这点也不错。我认为强类型语言能提供更多。看看 Google 为 Dart 所做的就知道了。他们试图弥合动静态间的区别。那确实是一条很有趣的路。但那些是否会是下一代主流语言的竞争者?我认为 Java 还会强势一段时间。

InfoQ: 似乎每次 Java 经历过一段沉静期后,一种新技术就会重新使之扬名。从伪革命性的 applets,到原生 web 应用,再到目前的 Android。似乎 Java 永远有一个领跑者促使语言前进。

Horstmann: 另一个 Java 会持续一段时间的原因在于 Java 是开源的,其专利会很快失效。专利有个妙处,20 年之内保值。

InfoQ: 也许正有下一个领跑者。十分感谢,祝好。

Horstmann: 客气,谢谢。

关于受访者

Cay S. Horstmann是《Java 核心技术,卷一 & 卷二》,《快学 Scala》(Addison-Wesley, 2012) 的作者, 《JavaServer Faces 核心编程》第三版 (Prentice Hall, 2010) 的共同作者,是圣荷西州立大学的计算机系教授,是一名 Java Champion,也是各类程序员会议上的活跃讲演者。


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-02-14 08:233993

评论

发布
暂无评论
发现更多内容

pytest学习和使用3-对比unittest和pytest脚本在pycharm中运行的方式

Python 自动化测试 pytest

ByteHouse:基于ClickHouse 的实时计算能力升级

字节跳动数据平台

大数据 云原生 flink 消费 kafka Clickhouse 企业号 3 月 PK 榜

如何通过Java代码在Word中创建可填充表单

在下毛毛雨

Java 表单 word文档

不可错过!Arm 、Intel 及阿里云等资深技术专家现场解读系统安全

OpenAnolis小助手

系统安全 Meetup 龙蜥社区 sig 机密计算

2023中国儿童防敏市场发展洞察

易观分析

医疗 防敏 儿童

使用流水线插件实现持续集成、持续部署

北京好雨科技有限公司

Kubernetes CI/CD rainbond

NFTScan 与 DeBox 达成合作,双方在 NFT 社交数据层面展开合作

NFT Research

NFT

软件工程高效学 | 软件的内涵与危机

TiAmo

软件工程 软件开发

中国全屋智能市场将达万亿级,仅3.5%住宅渗透率拥有巨大潜力

Geek_2d6073

快速掌握网站监控关键数据:仪表盘的创建与管理

云智慧AIOps社区

监控 监控宝 监控工具 云智慧 网站监控

腾讯大神耗时三年,立足实际开发的巅峰之作,详解高并发程序设计

做梦都在改BUG

Java 程序设计 高并发

龙蜥自动化平台 SysOM 2.1 热补丁中心介绍 | 第 74 期

OpenAnolis小助手

直播 系统运维 龙蜥大讲堂 SysOM 补丁

终于有人把Java面试高分Guide总结得如此系统,堪称傻瓜式笔记总结

采菊东篱下

java面试

金三银四互联网大厂精选1160道Java面试题答案整理(2023最新版)

架构师之道

编程 程序员 java面试

开源订单管理系统

源字节1号

开源 软件开发 小程序开发

企业数智化转型不仅是可行的,还是必行!

加入高科技仿生人

人工智能 低代码 制造业 数智化

全网爆火!阿里内部产出的Java面试核心手册震撼开源了,太香了

开心学Java

Java 面试 春招 java Java八股文 Java 面试题

跟着字节AB工具DataTester,5步开启一个实验

字节跳动数据平台

大数据 云服务 AB testing实战 ab测试 企业号 3 月 PK 榜

面试被怼:技术更新这么快,你还不懂响应式微服务就out了

做梦都在改BUG

Java spring 微服务 响应式

初学后端,如何做好表结构设计?

王中阳Go

Go golang 数据库 表结构 golang 面试

Flink 在中泰证券的实践与应用

Apache Flink

大数据 flink 实时计算

CloudCanal 落地 StarRocks 数据迁移同步的实践与思考

StarRocks

数据库

好用的Java开发工具:IntelliJ IDEA 2022v2022.3.3汉化激活版

真大的脸盆

Java Mac Mac 软件 Java 开发

adobe安装提示错误“Error:SyntaxError:JSON Parse error:Unexpected EOF”

互联网搬砖工作者

苹果M1芯片的Mac怎么关闭SIP?M1 mac关闭Sip方法教程!

互联网搬砖工作者

百度文库接入文心一言,国内首个生成式AI文档服务即将上线

Geek_2d6073

软件测试/测试开发丨接口测试必备技能-常见接口协议解析

测试人

软件测试 自动化测试 测试开发

还在stream中使用peek?不要被这些陷阱绊住了

程序那些事

Java java8 程序那些事 JDK20

pytest学习和使用4-pytest和Unittest中setup、teardown等方法详解和使用(最全)

Python 自动化测试 unittest 测试框架 pytest

百度CTO王海峰:全栈AI技术加持,打造新一代大语言模型文心一言

飞桨PaddlePaddle

软件测试/测试开发丨一文带你了解接口测试价值与体系

测试人

软件测试 自动化测试 测试开发

今日Java——Cay Horstmann访谈_Java_Jeff Martin_InfoQ精选文章