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),代码将会失效。 InfoQ: 初次向学生介绍Java时,你会选用Integer么? Horstmann: 不会,我用int,因为很多库都用int。我不会用太多时间区分两者。用容器时,自然会考虑包装类型。实际上这并不打紧。难道你会经常用ArrayList存储整型? InfoQ: 庞大的遗留代码会产生问题。 Horstmann: Scala会让你体会残酷性。似乎每隔半年所做的一切就会被全然颠覆,你将从头开始。 InfoQ: 确实。这种情况很多? Horstmann: 是的。有些时候必须结束。但目前你必须全部重新编译,因为Scala并非二进制兼容。Scala的语言特性存在足够的变化空间,而这也正是修正良机。 InfoQ: 这对语言发展极好但不利于继承。 Horstmann: 是的。那也是为什么有时他们会说“好吧,我们之前已经做得足够有趣,现今我们将使之平稳。” InfoQ: 全面审视后,若由你来负责Java,你认为Java所要克服的最大障碍是什么?(舍弃或改良) Horstmann: 也许是基本数据类型。基本数据类型带来的复杂性非常烦人。还有什么我真正讨厌并想摆脱的?我从未想过。你也知道,Java语言特性不算多。但我讨厌漫长的启动时间,那妨碍了Java被作为脚本使用。这点是我从未关注的。也许是Java 9,也许是我的孙子活着时,我希望Oracle能通过模块化关注这点。这限制了Java的适用范围。 InfoQ: 我从未想过能这样比较Java和Flash,但这观点不错。Adobe相比运行时Java似乎有更好的解决方案。 Horstmann:是的。只要单击按钮Flash就会更新。而Java,则是报错。就我的观察,几乎每个学生的机器中都有一些旧版Java等待移除。 InfoQ: 活跃开发者也许更容易找到所安装的程序并保证程序正确安装,但可以肯定的是,远程诊断会带来困惑。 Horstmann: 确切而言,是的。分析之后,你会为常规用户提供什么样的补救方案?“是时候格式化硬盘了?” InfoQ: 你还想改变其他的一些么? Horstmann:如果你是在问哪些不好的语言特性需要消除的话,用不到且不希望存在的特性有很多,比如带标号的break。为了消除偶发复杂型,这些特性是我想舍弃的,但这些特性极少使用,所以并不妨碍。另一方面,并非任何特性我都想舍弃,有些特性确实代表了Java的设计。至于添加特性,噢,另一件我想舍弃的特征是属性。我不喜欢getter和setter方法。 InfoQ: Java的模版类型常被指责。 Horstmann: 是的,但让我们认真回顾下。人们赞誉Java是新一代Cobol。Java横空出世时Cobol正濒临灭亡。还记得有段时间,世界上一多半的程序员都用Cobol编程,几年之后,没有人再用Cobol。那种变化非常非常快。至于Java,我认为还有很多事情Java可以做而Cobol中不存在的,比如,具备一个可移植性强的世界一流虚拟机。由于这些原因,我认为Java会存在更久。 InfoQ: 是的。我指其他一些语言。比如C++圈内,C++的自我复兴最为引人注目。 Horstmann: 你想用C++编程么? InfoQ: 如果你是C++程序员,也许会更认同,但我不知道对新程序员而言,那是否足够吸引。再看C#,很多用户觉得C#优于Java,而这部分用户中很多是程序员,这部分人认定微软将放弃C#转向支持更新的技术。 Horstmann: 综合看来,C#就是Java。C#具备一些Java不具备的特性,但如果某一特性真的重要,Java会很快具备。 InfoQ: 但对Java程序员而言,使公众接受似乎并不够。如果你是C#拥护者,会很高兴。但绝大多数阵营都已分化。程序员新手并非从已分化阵营中来。那之后,尽管我不想用悲观的腔调说,但你只会得到…… Horstmann: 市场定位。 InfoQ: 是的。不同的大小,不同的竞争语言群体。 Horstmann: 是的,从这一点看,没有语言能一统天下。若你能找到那么一种语言,告诉我,我会写下一本书。 |