【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

今日 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:233829

评论

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

华为云EI:引领企业智能化转型,助力全球行业创新

爱尚科技

什么是plist

雪奈椰子

ios 开发 IPA上传

Nautilus Chain 上首个 DEX PoseiSwap 通证经济学模型解析

威廉META

华为云FusionInsight引领现代数据平台革新:助力企业数字化转型与增值

科技怪授

深度学习:理解卷积神经网络(CNN)的原理和应用

兴科Sinco

人工智能 神经网络 深度学习 自然语言 图象识别

中台的下一站:行业数字化操作系统

创智荟

中台 操作系统 数字化

集简云已支持GPT-4 API接口,将最新AI模型接入到您的业务流程中

集简云开放平台

人工智能 ChatGPT

基于低代码开发平台打造新时代OA系统

力软低代码开发平台

WeOpsV3.16持续拓展云平台能力,监管华为ManageOne云平台

嘉为蓝鲸

运维 weops

“云智一体”进化史

百度开发者中心

人工智能 云智一体 文心一言

嘉为蓝鲸携手腾讯云亮相石油石化峰会!

嘉为蓝鲸

能源 嘉为蓝鲸 研运一体化

一文吃透低代码平台源代码交付的重要性

这我可不懂

软件开发 低代码 JNPF

如何打开 plist 文件

ios 开发 IPA上传

持续领先同行?看华为云EI如何助力企业智能化转型

爱尚科技

开心档之C++ 多线程

雪奈椰子

报名开启!成都首个ChatGPT和大模型专题研讨会,期待您的参与!

NLP资深玩家

The era of Wallys/wifi7 has arrived-ipq9574+qcn9274.

Cindy-wallys

qcn9274 ipq9574

百度智能云助力达拉特旗入选“数字城市创新成果与实践案例”

百度开发者中心

人工智能 智慧城市 云智一体

Wallys/The IPQ9554+qcn6274 support the new WiFi 7 standard

Cindy-wallys

ipq9554 qcn6274

解锁企业数据管理的利器——DataOps

数造万象

C++ 循环

雪奈椰子

开心档

Dapr和Rainbond集成,实现云原生BaaS和模块化微服务开发

北京好雨科技有限公司

云原生 #Kubernetes# Baas rainbond 企业号 4 月 PK 榜

DriveGPT自动驾驶大模型中国玩家首发!1200亿参数,毫末智行出品

Openlab_cosmoplat

人工智能 自动驾驶 机器学习 开源社区 ChatGPT

如何使用 Postman 发送 JSON 数据

Liam

json Postman 接口测试 API API 调试

C++ 修饰符类型

雪奈椰子

iOS上架 IPA上传

OctConv:八度卷积复现

华为云开发者联盟

人工智能 华为云 卷积 华为云开发者联盟 企业号 4 月 PK 榜

华为云EI引领行业智能化转型:赋能全球企业,共创智能未来

爱尚科技

达观助手智能写作,让写作更快更好更有趣!

NLP资深玩家

北京 Meetup 邀你来|云上 StarRocks 极速湖仓

StarRocks

数据库 活动 OLAP 大数据分析 StarRocks

REST API 安全基础知识:保护你的应用程序和用户数据

Apifox

API 企业安全 REST API 安全认证 API 安全

REST 与 SOAP 之间的差异

Apifox

Rest 协议 soap REST API SOAP Webservice

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