技术开发 频道

Google首席架构师谈Java的命运

  思考Java带来的编程经验

  Seibel:思考Java的设计并实现它,是否让你学到了什么跟编程有关系的东西?

  Bloch:我学到的东西太多了。比如我知道了即使是想把一个很小的程序写对也是非常难的。我把这个想法发表在了博客里,题目是“几乎所有的二分搜索和归并排序都是错的”。认为自己程序是对的就是在愚弄自己。程序里有大量没解决的Bug,当然是不对的。多数情况下,程序里的Bug都不少,它们只能免费完成任务。

  我知道,既然写正确的程序那么难,我们就应该尽力去帮助大家。所以能减少Bug的所有东西都是好的。这就是我是静态类型和静态分析的信徒的原因,任何可以减少某个特定类别Bug的东西都是非常好的,任何可以让程序员的工作更轻松的东西都是好的。

  我更加确信有好的API文档是很重要的。人们很少提及Javadoc对这个平台的成功所起的作用。好的API文档永远都是Java文化的一部分,也许是因为Javadoc从一开始就存在吧(译者注:所以人们低估了Javadoc的作用)。

  我一直信奉“简单就是美”这句话,现在更是如此。我不断看到更复杂的东西最终被证实是有害的,只是有的时间长点儿,有的时间短点儿。我设计的时候,会仔细看着我的“复杂度计”,一旦复杂度要到红线了,就需要重新设计了。

  偶尔我会遇到不相信这些的人们,他们会说:“Josh你太傻了,你怎么就是不明白;这才是应该做的,可惜你就是搞不懂。”我就是不信这些。我觉得事情一旦复杂起来,那么一定有什么地方错了,也许到了寻找更简单的方法的时候了。

  Tony Hoare的图灵奖获奖感言中有一句充满了大智慧的话,讲的是设计一个系统的两种方式:“一种是尽量简单,这样显然不会有什么问题;另外一种是,尽量复杂,这样没什么问题会很显然。”

  后面的内容同样饱含智慧,但是知道的人不多:“第一种方法其实更难。它需要从复杂的自然现象发现简单物理规律的那种技能、投入、洞察力,甚至是那种灵感,同时还需要你能接受你的目标受限于物理、逻辑和科技的约束,以及在目标间有冲突的时候可以妥协。委员会无法做到这些,除非已经完全来不及了。”

  Seibel:你是否想过在职业生涯中再次更换你的主要语言,还是准备退休前一直做Java?

  Bloch:我自己也不知道。我从C语言转向Java有点突然。从研究生毕业时起,到1996年,我主要使用C语言编程,然后一直使用Java直到现在。我已经预见到我可能要更换到其他语言了。但是我不知道是什么语言。也许它还不存在。我觉得产生一个新编程语言的时机已经成熟,但是同时我又觉得平台的惯性也比以前更大了。现代的平台不仅仅是一个语言和一些库,它包括很多工具,是一个虚拟机,一个庞然大物。创建一个完整的新平台的前景比以前更不乐观。

  我不知道将出现什么。但是我认为如果改变我的主要语言是对的,那么我就会这么做。我想尽力保持开放的心态。我想尝试更多的语言。我最近没时间做,但是以后还是会做的。

  Seibel:列出几个你想尝试的语言吧?

  Bloch:我想试试Scala,虽然我怀疑它是否能成为未来的新宠。我很崇敬MartinOdersky。我觉得他写的语言中有很多精妙的想法。但是我同时也认为他加入了太多复杂的东西,太学术化了,所以很难取得世界范围内的大成功。当然我还没权利去评价,因为我还没学习过。

  我还想用用Python。Scheme不是新生物,不过我也想试试。我想花几个月,跟我儿子一起过一遍《Structure and Interpretation of Computer Programs》一定很有意思。每个人都说这是一本伟大的书。我已经买了,算是开了个头。看完它需要一些时间。我想这就是我目前想学的。

  Seibel:现在很多人在讨论我们写程序的时候,如何能把未来的多核CPU的优势利用起来。Java显然是第一个内建多线程机制的主流语言。你觉得Java的逻辑在多核的世界是否仍然可用?

  Bloch:我想说得更深入一些。我认为Java是现有语言中最好的。但有趣的是,现在很流行谈Java是否即将死去。我觉得这基本上是扯淡。我认为现在最好的多线程构件就在Java里。我认为Java将迎来复兴。我不是说它是未来20年内非常先进的,也不是说它是处理多核的最好方式。但是我认为从现有的东西来看,我们是足以傲视同侪的。

0
相关文章