访谈:今日的Java与Cay Horstmann

InfoQ幸好最近与Cay Horstmann谈了有关Java事务的当前状况,并发布了他的最新书籍: Core Java第1 第2卷 ,第九版。

自从1995年最初发行Java以来​​,Java经历了许多变化,从语言规范的增长到Oracle收购Sun Microsystems收购Java时的所有权变更。 我们的讨论从讨论Oracle如何管理Java管理开始。

InfoQ:到目前为止,您如何看待Oracle对Java的管理? 我在考虑语言功能和业务方面,例如决定将第3方Internet浏览器工具栏与JRE安装程序捆绑在一起的决定。

Horstmann:我对工具栏的捆绑不满意。 Oracle在这里确实前后矛盾。 一方面,他们在改进Java方面投入了大量资源。 另一方面,他们做不幸的事情。 他们还对安全性方面进行了很长时间的管理,直到现在才开始追赶。 我认为他们的管理是好运。

而且,当Oracle做出可疑的决定时,就不会与社区进行讨论。 当您与内部人员交谈时,他们会说:“哦,我的手被绑住了。我什么也不能说。” 使用Sun从来没有像现在这样。 他们总是更加开放,当事情进展不顺利时,他们会乐于承认他们需要做得更好。 但是我想这就是Oracle的文化。

InfoQ:那么,在找到解决方案之前,他们会否定一个问题?

Horstmann:我想这是一个很好的表达方式。 它很烦人。 而且,我认为许多人反对Oracle的另一件事是他们对Google的诉讼。

InfoQ:是的,这很不错。 我想您可以说Android充当了整个Java平台的大使。 随着Google选择Java,它增加了对Java程序员的需求,提高了Java市场的整体渗透率。

霍斯特曼:是的,绝对。 这并不是说他们从Sun那里继承了任何有用的市场。 几年来,当每个人都看到ME注定要灭绝时,Sun一直在谈论Java ME(Java平台,微型版)电话是可行的。 而且他们从来没有制定过智能手机策略。

InfoQ:您不仅是作家,而且还是教授计算机科学的大学教授。 对Java教学的需求是出于学习如何进行Android开发的渴望,还是基于您或大学的指示?

霍斯特曼:嗯,在大学里,在任何一门课程中引入一种新语言都涉及大量成本。 学生要习惯一个语言并真正提高其学习效率,要花一个学期以上的时间。 在设计课程时,我们必须选择自己的目标。 Java确实具有广泛的适用性。 您可以从基本任务开始,然后在数据库课程,网络课程和移动课程(当然是Android)中使用它。 出于这个原因,我们相当重Java。 同样,在大学里,我们觉得教学生十种语言不是我们的工作,而是用几种代表性的语言教给他们概念。 我们教他们Java,C和功能语言。

InfoQ:您的移动课程使用什么语言?

Horstmann:我希望学生们对iOS有一定的经验,因为其中一半以上的人口袋里有iPhone。 他们当然很好奇将应用程序放到手机上并进入应用程序商店的过程。 大约有50%的Android,约30%的iOS和20%HTML5(JQuery Mobile,PhoneGap)。

InfoQ:所以您将其拆分,学生们的反馈是什么?

Horstmann:首先,他们确实很欣赏获得多种观点。 他们认为这非常有用。 但最后,他们非常喜欢使用Android。

InfoQ:您认为Java的未来会离开哪里?主要是基于Android的Java?

Horstmann:在服务器上仍然有很多Java,主要是在大型商店中。 我看这里附近的初创公司,其中许多不使用Java。 我什至不确定他们是否有特殊原因。 我与人们交谈,然后说:“(您的技术选择)有什么很棒的功能,而您不能仅仅使用Java?” 他们说:“哦,我不知道。我不知道Java知识。” 这些公司中有一大批不了解服务器端Java的年轻人。 对于像我这样喜欢Java的人来说,这有点令人担忧。 Oracle并没有说服人们相信最新的Java实际上非常令人愉快。 过去它不是火箭科学的东西。 如今,Java EE很容易,并且工具支持非常强大。

InfoQ:对于初创企业而言,Java的“ It”因素不存在吗?

Horstmann:我认为Oracle倾向于进入大型组织,在那里有人将购买昂贵的服务。 但是,这些小型服装却带来了很多创新,尤其是在硅谷。 因此,当我与这些人交谈时,他们使用Rails,他们使用Node.js。 他们大体上不使用服务器端Java。 就像我说的,这并非总是出于良好的技术原因。 有时他们甚至不知道自己缺少什么。

InfoQ:看看最新版本的Java 7和即将推出的Java 8,您是否认为Oracle正在做任何事情来解决“时髦因素”,或者在服务器端收益等领域,这更多是营销问题吗?

Horstmann:我确实确实认为服务器端Java存在营销问题。 服务器端开发的市场很大,这种语言的管理得当,易于使用,功能强大。 但是很少有人张开嘴说:“你们应该尝试一下Java。从Java开始,您可能比几年后(似乎流行的技术X)碰壁更富有成效。”

InfoQ:那是一个好点。 小型商店的问题似乎在于,随着应用程序的爆炸性增长,它们是否从Node或Rails切换到“更严重”的环境。

霍斯特曼:是的。 而且我认为对Java EE的恐惧是不幸的。 即使对于小型项目,我也只是从Java入手,它一直都非常快速,轻松。 现在,我不做会扩展到100亿用户的事情。 我通常拥有几千或成千上万的用户。 但是,我见过很多人,无论多小或多大,都会自动使用Rails。 然后,您必须找到认识Ruby的人。 这是一套全新的技术。 找到熟悉Java的人实际上很容易。

InfoQ:现在,当您这么说时,这是来自当前的开发人员还是刚从大学毕业的开发人员?

霍斯特曼:刚大学毕业。 Java在教育中无处不在,而要从大学课程中找到了解Ruby的人要困难得多。 他们要么是自学成才的,要么是他们在工作中学到的。

InfoQ:您如何看待Java随着时代的变化?

Horstmann:任何想要保持生命力的语言都必​​须具备当今每个人都认为必不可少的功能。 现在,在并发世界中,您希望拥有更多的功能样式库。 没有Java 8功能,这是不可能的,这非常好。 当我将其与Scala中的功能进行比较时,可以肯定,Scala更好,但是Scala还有其他问题。 比较复杂。

InfoQ:嗯,这提出了一个想法,即Scala用户确实很喜欢JVM作为平台,但不想使用Java。

Horstmann:如果您知道自己在做什么,那么Scala可以提高您的生产力。 您可以用一半或更少的代码行来表达您的想法。 而且在Scala中,您会因为Java繁琐而无法尝试的方法很容易。 另一方面,虽然我爱Scala,但有时也会害怕它。 如果您采取了错误的措施,您将被抓挠一段时间。

Java在大多数情况下是简单且一致的。 我不记得上一次我问自己自己Java程序中的语句在背后做了什么。 这是很有价值的功能。

InfoQ:尤其是在公司环境或团队中,这可能意味着事情要比几个人大。 这使得某人将其全部保留在他们的脑海中更加困难。 可预测性是必需的……

霍斯特曼:的确如此。 相反,您不能完全理解C ++ 11。 那是一门巨大的语言。

InfoQ:关于Ruby之类的语言,我的意思是您可以立即开始编写,然后-

Horstmann:Ruby本身并不能给您太多指导。 Rails真正使您保持警惕。 我可以给Ruby难题使用者几天的时间,然后专家会说:“哦,两年前它是这样工作的,现在它是这样工作的。”

InfoQ:您认为模仿Ruby on Rails的某些Java框架在发挥Ruby on Rails提供的最佳功能并提供与Java一起使用方面是否有效?

Horstmann:请记住,Rails解决了许多当今并不总是需要解决的问题。 如果通过移动设备或平板电脑或HTML5在客户端上具有用户界面,而JavaScript在客户端上进行呈现,则您对RailsHTML模板不感兴趣。 因此,尚不清楚Rails未来是否会实现增长。

InfoQ:嗯,再看一遍书,考虑到语言的规模,如何处理有关Java的文字? 现在,您将其分为两卷,但是鉴于今天的语言规模,您如何去覆盖它呢? 您如何确定承保范围?

霍斯特曼:最初,这本书之所以大,是因为任务是覆盖所有内容。 当这本书是多年前第一次设计时,每个人都想知道Swing。 和RMI。 我认为这是最后一次尝试的版本。 因此,下一版Java 8版将只专注于人们实际想要做的事情。 我无法想象Swing将在下一版中出现。 或RMI。 您上次使用该时间是什么时候?

InfoQ:当看这本书时,很显然,尽管这不是入门版,但它确实涵盖了全部语言。 您是否看到新的开发人员或使用Java的人对此表示赞赏,还是只是坚持第一卷?

霍斯特曼:超过一半的人不再有实体书了。 当我查看销售来自何处时,实际上其中很大一部分是通过Safari Books Online获得的。 程序员去那里一次阅读几页。

InfoQ:大小对他们来说并不重要-我的意思是,就书籍的整理而言,这可能对您来说很重要,但是读者并不在乎其大小,因为他们可以随心所欲。

霍斯特曼:是的。 另外,如果下一版本没有Swing,则Safari仍具有上一版本。 所以这不是世界末日。 对于我来说,销售如何Swift迁移到电子副本真是令人惊讶。 它在计算机科学市场上已经持续了一段时间。

我不再尝试做的事情之一就是冗长的示例,这些示例无法孤立地理解。 有些书在每一章中都这样做。 他们越来越多地建立自己的例子,这使得在中间的某个地方潜水变得非常困难。

我尝试使这些书籍易于阅读,以便有人可以直接进入感兴趣的章节或章节,然后无需阅读之前的六章就可以继续阅读。

InfoQ:您提到您已经对Java 8有所展望。您认为需要或应该讨论哪些主要功能?

Horstmann:哦,当然,λ大。 集合库中的更改很大。 这将使做普通事变得更加容易。 并发更改非常重要。 您希望能够利用多个内核而又不会给程序员带来困难。 使用Java 8和Scala,效果很好。 程序员说:“哦,我希望所有这些工作并行完成。” 您只有一个并行视图,可以通过执行类似Linq的查询对其进行操作,并且可以免费获得并行性。 因此,我认为这将非常重要。

InfoQ:您认为有必要...(在研究时我发现可能存在共性)...是否消除了基元?

Horstmann:太好了。 多年前,我问Neal Gafter当时谁在解决这个问题。 我问为什么当原始类型增加了泛型的整体复杂性时为什么没有发生? 他说,为什么不能仅仅将int和Integer等同是有原因的。 外面有人制造了像新Integer(42)这样的整数对象,并将它们用作锁! 因此,如果您无法再区分两个不同的新Integer(42),则该个人的代码将损坏。

保持向后兼容的绝对保证似乎是不合理的。 您确实希望int和Integer是可互换的,并且这种区别是VM应该能够为您优化的。

另外,要在整数数组和整数数组之间切换,VM必须非常努力地工作。

事后看来,整数和浮点数从一开始就应该是对象,但是20年前,原始类型听起来是个好主意。

InfoQ:当您第一次向学生介绍Java时,您是否仅仅因为有Integer而使用Integer?

Horstmann:不,我使用int,因为可以看到int的图书馆太多。 我真的没有花很多时间来区分。 对于集合,他们必须担心包装器类。 实际上,这没什么大不了的。 您实际上用ArrayList收集了多少个整数?

最后,如果您考虑什么使Java成为真正的Java,那么Java有两件事。 其中之一是它是一种蓝领语言,您无需具有博士学位即可理解。 另外一个是它总是有一个庞大的图书馆。 对于任何您想做的事情,似乎都有一个Java库。

拥有如此丰富的库的语言并不多。 例如,Python是一种不错的语言,但是与Java相比,Python库非常有限。

关于Python的另一件事是,它使您欣赏Java的向后兼容性。 我为Python 3的规范性和优雅性而称赞,但令我惊讶的是Python 2挂了多久,而且两者都不美观。

InfoQ:拥有庞大的遗留代码库可能会带来问题...

霍斯特曼:有了Scala,他们是无情的。 有时似乎每六个月您所做的一切都已损坏,您必须重做。

InfoQ:真的。 有很多吗?

霍斯特曼:哦,是的。 因此,在某些时候,他们将不得不停止它。 但是现在Scala不兼容二进制文件,因此您必须重新编译所有内容。 而且在语言中有足够多的功能更改,因此您很有可能也必须修复某些内容。

InfoQ:这对语言的增长很有好处,但对于收养来说却不是。

霍斯特曼:对。 这就是为什么他们在某个时候不得不说:“好吧,我们玩得很开心,现在我们必须稳定它。”

InfoQ:那么,从Java的整体来看,如果您负责该语言,那么您想克服的最大障碍是什么? (要么删除,要么更改为更好。)

Horstmann:可能是基本类型。 这很烦人,因为它增加了很多复杂性。 我真正讨厌除掉的还有什么? 我从来没有真正问过自己。 您知道的不是Java语言。 但是我讨厌启动时间慢。 我讨厌它使Java无法用于脚本编写。 我觉得这从来没有真正解决过。 我希望Oracle将以模块化的方式解决这一问题,也许是在Java 9中,或者我的孙辈们将能够看到它。 这个问题限制了语言的适用范围。

与语言本身无关,而与环境无关的另一件事是安全性问题-我们正在失去用户,因为Oracle无法按需更新客户端JVM。 没有人抱怨Flash不安全,因为Adobe找出了每三周为您提供一个新版本的方法。 但是在Windows计算机上使用Java时,每次打开Java都会显示一个小图标,表明需要更新Java。 然后,当我单击它时,我收到一些错误消息,提示它无法执行此操作。 这些年来,他们仍然无法解决这个问题。

InfoQ:我从来没有想过将两者进行比较,这是一个好主意。 与Java的运行时相比,Adobe似乎有更好的方法。

霍斯特曼:是的。 您只需单击一个按钮,Flash就会更新。 但是使用Java,它就坏了。 就是行不通。 我看着我的学生,每个学生的机器上都有一些旧Java版本的墓地。

InfoQ:对于活跃的开发人员来说,我认为查看安装的内容并进行更正会更容易,但是如果我要远程诊断它,肯定会引起混乱。

霍斯特曼:是的,是的。 然后您可能会诊断出来,然后您给普通用户提供什么补救措施? “这是重新格式化硬盘的好时机吗?”

InfoQ:您还有其他需要改变的地方吗?

Horstmann:好吧,如果您问我什么语言功能太差而应该被删除,那么有一些我从未使用过的功能,例如我不希望使用的带标签的中断。 我删除它们只是为了减少意外的复杂性,但是我不使用它们,因此它们不会真正妨碍您。 但是除此之外,它确实代表了Java的设计,我不想删除任何东西。 至于添加功能,我希望Java杀死的另一件事是属性。 我讨厌写那些吸气剂和吸气剂。

这不像解决世界饥饿问题,但如果没有样板,那就太好了。 我喜欢Scala的一件事是,您可以用几行代码编写一个简单的类。

InfoQ:这将解决Java被指控的样板代码。

Horstmann:是的,但让我们对其进行透视。 当人们说Java是新的Cobol时,让我们记住Java诞生时Cobol在哪里。 科博尔真的处于死亡边缘。 我仍然记得世界上超过一半的程序员在Cobol上工作,几年后再也没有人在Cobol上工作。 过渡非常非常快。 而且,对于Java,我认为Java可以做的事情还很多,但实际上并没有平等。 特别是拥有世界一流的可移植虚拟机。 由于这些原因,我认为Java将会出现更长的时间。

另一件事是,当Cobol去世时,有更好的替代方法。 我的意思是,现在有什么更好的方法,每个人都会蜂拥而至? 我的意思是,没有什么可以让你说“哈利路亚”了。

InfoQ:是的,这是一个很好的观察。 我的意思是看其他一些语言。 例如,C ++现在似乎正在振兴自己,但是这引起了C ++界的最大关注。

Horstmann:您想在其中编写代码吗?

InfoQ:如果您是C ++的人,您可能会感觉好些,但是我不知道这是否足以吸引新的开发人员。 如果您看一下C#,许多用户会认为它比Java更好,但是许多开发人员认为Microsoft可能会忽略C#,而使用更新的技术。

Horstmann:C#是Java,出于所有意图和目的。 它具有Java所没有的一些功能,但是,如果它很重要的话,Java可能会有些麻烦。

InfoQ:但是,Java开发人员似乎还没有足够的能力来进行整体转换。 如果您是C#的人,那您会很高兴。 但是,对,大多数营地已经分裂了。 新开发者不是来自那些。 我想在那之后您就拥有了所有-我不想贬义地讲刘海,但是...

霍斯特曼:利基...

InfoQ:是的。 不同规模,不同种族的语言。

霍斯特曼:是的,在这一点上,没有一种语言可以统治所有人。 可能会来。 当您找到它时,请告诉我,我将写下一本书。

InfoQ:有新的语言,有些语言至少在较低的水平上很流行,但是没有什么真正流行起来的。 现在有每种语言的批评家和捍卫者,但没有真正的躁狂症,也没有任何推动力。

霍斯特曼:而且很难。 我的意思是不再只是语言了。 如今,人们期望有一个好的大小库。 他们期望虚拟机。 直接在裸机上运行的语言的时代已经结束。 您可以对VM进行优化,而这些优化是Objective-C之类的语言所无法企及的。 JavaScript运行得很好,因为它们使虚拟机变得更加混乱。

InfoQ:几乎有两个主要的游泳池。 有一个静态类型库,并且计划更多种语言。 然后是“我想尽可能快地写一些东西”。 有重叠,但不再有共性。

霍斯特曼:这也是一个好点。 而且我确实认为静态类型语言可以提供很多东西。 看一下Google对Dart所做的事情。 他们试图桥接静态和动态类型。 这当然是一个有趣的方法。 但是那些人将成为所有人的下一门语言的竞争者吗? 我认为Java将在一段时间内变得强大。

InfoQ:似乎每当Java处于平静期或停滞期时,一项新技术就会使它顺利通过。 如您所知,它始于小程序,这似乎是一个重大突破。 接下来可能是原始的Web应用程序后端,现在是Android。 似乎Java一直都有一个支持者,它将语言推向前进。

Horstmann:Java可能存在很长时间的另一个原因是Java是开源的,其专利也即将到期。 关于专利是它的美丽之一,无论你怎么说,最终20年都将过去。

InfoQ:那可能是下一个冠军。 感谢您今天的宝贵时间,在此再次表示感谢,并祝您好运。

霍斯特曼:好的。 好的,谢谢。

关于被访者

Cay S. Horstmann是《 Core Java Volumes 1和2》,《 Scala for the不耐烦》(Addison-Wesley,2012年)的作者,以及《 Core JavaServer Faces》(第三版)的合著者。 (Prentice Hall,2010年),他是圣何塞州立大学计算机科学教授,Java冠军,并且经常在开发者大会上演讲。

翻译自: https://www.infoq.com/articles/java_cay_horstmann/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值