Google首席架构师谈Java的命运

发表于:2011-3-14 09:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:chenqiuge    来源:51Testing软件测试网采编

分享:

  Seibel:如果去掉泛型,现在Java会变得更好用吗?

  Bloch:我不知道。我还是喜欢泛型。泛型能帮我找到代码中的Bug。泛型可以让编译器强制做一些限制,之前这些限制我只能放在注释中。另一方面来说,当我看到那些疯狂的参数类型相关的错误信息,当我看到像classEnum>这样的泛型类型声明时,我就会想,显然泛型的设计还没成熟到可以放到Java中的水平。

  我们总是太乐观,然后搬起石头砸自己的脚。所以我们说:“耶!我们当然可以把泛型放到Java中。在CLU的时候我们就知道泛型了。这技术25年前就有了。”最近我听到关于闭包的类似言论,不过那是50年前的技术了。“噢,闭包很简单,不会给语言加入任何新的复杂性。”

  嗯,没错。但是我觉得我们从泛型这件事儿得到了教训。在你懂得这个改动会对概念层面带来什么影响之前,在你可以确保软件行业从业人员可以高效地使用新特性,而且这一新特性会让他们活得更好之前,你不应该给语言加入这一特性。

  如果早知道程序员们对泛型是这个反应,我们肯定不会把它加到Java里。这是不是说我们就完全不会搞泛型?不,我不这么认为。我认为泛型确实很好。主要是因为大多数集合是同质的,而不是异质的,同质的集合处理起来是比较方便的。多数情况下类型转换都不合适。转换可能会失败,而且让你的程序不再优雅。我想你知道这是什么集合,它应该自动符合你的这些需求。但是,是不是这就意味着你应该承受我们现在承受的这种复杂度?不,我想我们只是没有处理好泛型。

  Seibel:关于泛型有来自于用户的压力吗?有人抱怨泛型的缺点干扰他们写程序了吗?

  Bloch:有没有工程师大骂泛型的缺点?不,没有,他们没有抱怨过。如果因为泛型简洁就把它们加进来,那我会内疚的。因为当时我们以为这么做是对的。

  有人说,很多工程都是扯淡。有人要求我们加入foreach吗?没有。他们没有要求我加入。但是我就知道这是应该做的。我对了——每个人都喜欢它。但是我觉得我们行业内的一大问题就是,在工程领域,做一个东西,仅仅因为它简洁,仅仅因为它是一个好的工程项目,等等。如果你不能解决真实用户——在这里就是Java程序员——的真实问题,那么你就不应该加入新的特性。

  James Gosling曾做过一个非常了不起的演讲——“Java的感觉”。他说,给Java加入任何东西之前,都需要三个真实的用户。不应该因为一个东西简洁就把它放进来。

  但是人们就是想把什么东西都放进去。工程师是做什么的?他们就是写代码的。而当他们写一个库,或者一个语言的时候,他们就是想放各种东西进去。你需要他人的参与,需要指导的声音,需要这些东西来帮助你完成产品,帮你在放与不放之间做出最好的权衡。因为你可以放进去的东西总比你应该放进去的东西多。那么是不是说所有的这些东西都不好呢?那也不是。只是你需要做出决定,某些东西是不应该放进去的。

  思考Java带来的编程经验

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

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

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

43/4<1234>
价值129的会员专享直播免费赠送,添加微信领取听课名额哦~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号