Java抵触情结已经初步显现,我们已经开始看到由此引起的一些根本性转变。
Bruce Tate的一些著作集中讨论了Java的缺陷,并指出需要放弃一些还未实现的想法。诸如Jens Alfke's Thought Palace和Stephen Colebourne's Weblog中的博客也频繁提到这个问题。当然还有Steve Jobs的著名引用(引用自iPhone):“Java不具有构建价值。人们不会再使用Java了。它只是个巨大的累赘”。产生这种抵触的惟一原因就是,Sun始终以为Java是无所不在、无所不能。它曾经是令人叹服的,但是只有语言的设计者和提倡者能认识到其中的问题,这种语言才能继续发展。如果这种语言已经不再成功,仍然坚持称赞它,这种行为本身就是一种否认。EJB已经对此作出了反应。EJB 3小组最终承认EJB成本太高,并且也从Hibernate和Spring学习了经验,但是还不足以解决问题。大多数人似乎都认为Hibernate和Spring比EJB3更加简单和直观,因此,对于这种过去成本过高的技术,很难再回到以前的看法了。
Java 5默认了这样一个事实:Microsoft使用C#实现了很多有趣的功能,而且Java 7中引入的特性支持这样一种思想——Java现在正与C# 3.0玩追赶游戏。竞争是不错的,Java并没有死。它在继续发展,构建在JVM之上的新语言(如Ruby、Scala和Groovy)的出现是Java技术恢复活力的象征。我们想问这样一个问题:为何Java applet未被当作RIA(富Internet应用程序)的客户端标准在Internet上普及?这是一个非常尖锐的问题,因为Gosling及其团队打算放弃Java(从而摒弃许多考虑不周的决策),这将会引起Internet的变革。这就是AWT和Applets在最后时刻被抛弃的原因,据说从计划到完成花了一个月时间。Bill Venners引用了Patrick Naughton的话:“这是一个时间问题,只需3个月时间就会波及整个Java领域。这是由我们发起的。”我之前就听说过这句话1,而且在构建编程语言时,这种态度似乎总是错误的。您正在创建一个基本的体系结构,希望人们将会采纳和使用多年。这就是需要谨慎思索的地方,而不是冲动。
我能够明白为何Green Team持有这种态度:这是Microsoft的方式。抛出一个产品以吸引大众的目光。这个产品不必是完美的;它只需要占领市场空间就行了。随着时间的推移,可以修复仓促推出的产品上的任何缺陷。这是一种敏捷的营销方式。这种方法适用于动态语言。曾经最流行的语言之一Visual Basic,已经发展了许多年了。Python已经修复了一些对原有代码有害的缺陷,以优化该语言。据说,Ruby也计划这么做。但是对于包含大量代码(特别冗长的语言)的静态语言来说,修复漏洞似乎不那么奏效。所有代码都必须重新编译,而且可能被更改,但是我认为,Java本来也可以采用Python的方法:如果不希望更改就不要更新。许多公司始终都没有更新其Java版本。
特别是当我编写Thinking in Java 时,许多人都说“已经有太多的Java图书了,您的书不会有市场的,不值得这样做。”
Web陷入混乱
能够发现可能性固然不错,然而缺点是很难确定何时出现故障。Web的概念非常有远见,但大部分web是失败的。是的,我们已经能够使web工作,但是很难说它“运行良好”。具体来讲,使用HTML、CSS和JavaScript的任何应用程序都难于开发并且成本昂贵,而且似乎不可能在不同浏览器上获得相同的外观。甚至简单的页面也会因字体问题而看起来不同。
如果您使用Firefox,有多少您访问的站点由于只针对Internet Explorer (IE)创建而至少有部分内容难以读取?在我看来情况越来越糟了;我看到更多(不是更少)站点不能很好地兼容Firefox,以至于我将认真地考虑转向IE。
CSS并没有实现它许下的美好承诺。许多年过去了,它在各种浏览器上的实现仍然不一致。只要使用HTML和CSS,您就总是想知道自己创建的应用程序是否会在其他浏览器上产生不符合期望的效果。除IE或Firefox之外,其他浏览器的情形还会更糟。
JavaScript也在web初期出现了,但是浏览器的混战导致了JavaScript的不一致性和难于使用。Ajax的关键元素之一在于,已经有人开始解决跨平台JavaScript问题,因此您不用考虑不同浏览器之间经常出现的不一致。这种方法存在两个问题。第一个问题是JavaScript的功能有限。尽管Ajax可以充分利用JavaScript的功能,但它的功能也非常有限。第二个问题是,我们依靠Ajax库来处理跨浏览器问题。如果想要编写自己的代码,必须精通这些问题,而且到那时Ajax的许多功能都没有用了。Ajax极大地改善了用户体验,但它也存在局限性,我猜想我们已经了解了Ajax将提供的绝大部分功能了。
更令人印象深刻的是Google Web Toolkit (GWT),为了加速开发过程,它将类型检查Java转换为跨平台JavaScript。首先用Java编写代码,然后用GWT将其编译为跨浏览器JavaScript。然后,JavaScript变成了能够在所有平台上运行的中间代码。但是这让Google的智囊团不得不解决本来不应该出现的问题。而且,如果没有所需的库,您仍然必须解决跨平台JavaScript问题,才能编写新代码。纵使GWT如此高明,我觉得它也会被JavaScript和浏览器的内在限制搞得筋疲力尽。
我们确实看到了一些令人惊奇的基于Ajax的工具,比如GMail和其他Google工具,它们正在不断地诱惑我。这种现象非常好,但这是您希望在web上看到的最好结果吗?您已经看到,如果没有这个限制,这些应用程序就非常接近理想结果了,即使它们不能持续工作(是的,我知道Google工具还“处于测试阶段”)。例如,在GMail中,您按下‘r’键后应该能回复消息。有时候这是可行的,但常常行不通,这非常使人恼火。而且更常见的情况是,当我使用像GMail这样的web应用程序时,Ctrl-C复制操作也不起作用了。Windows、Firefox、JavaScript或其他软件中都会出现这种问题,但它似乎与web应用程序有关,而且这种情况至少持续了一年。坦白来讲,我并不关心为什么会出现问题,相信任何其他用户也不会关心。如果这么简单的事情都出现问题,其前途不容乐观。
对于造就了如今的web的一连串错误决策,我们必须付出多少努力才能补救?
富Internet应用程序
安装问题
Java已经存在10年了,而且applet并不是与web交互的主要方式。我认为主要原因在于安装问题,这是另一个未被重视的Java问题。老实说,为Java applet和应用程序体验。
AWT最初的用户体验沉重打击了Sun对Java的狂热吹嘘,而且我认为applet到现在还未恢复元气。结果,Java永远不会成为RIA的主流。即使在现在,仍然不能在web站点上方便地运行Java applet。他们失败了,而且还不知道错在哪里。更糟糕的是,他们甚至会阻止Firefox打开新窗口,直到我重新启动计算机。
对“applet已经死了”的常见回应是“它们没有死。我一直都在使用它们。”applet并不是一无是处;人们仍然在用它创建出色的产品。Java Posse每周都会发布一个或多个applet。上面的论断应该理解为“对于web RIA来说,applet已经死了”。JRE和任何特定applet的安装过程并不足以说服任何人将它们用于通用的web站点。
Java的缺陷同样也影响到了桌面应用程序,applet也是一样。我曾经使用过一个叫做Memorex exPressit的Java产品,它的UI非常难看而且缺陷很多。我还使用过Logitech IO钢笔支持软件(用.NET编写的),它运行流畅而且外观漂亮,与Memorex exPressit形成鲜明对比。您也许会说Memorex编程人员缺乏经验,但是Logitech软件只是一个运行良好的小型应用程序,无需编程人员付出任何辛苦的劳动,然而,在我用过的使用Java编写的应用程序中,几乎没有一个易于使用。Eclipse是一款非常优秀的软件,但我觉得其背后一定饱含着“艰辛的劳动”。
Corel曾经试图使用Java创建一个文字处理程序(我忘记了他们是想移植WordPerfect还是从头开始编写)。显然他们的行动太早了,因为他们仅具有AWT。但是如果您听过Sun的夸张宣传,就会觉得这是正确的选择。不过没关系,无论如何它还是能工作的,因为这类失败已经使人们不敢使用Java了。
OpenOffice不是用Java编写的,而是用C++编写的。我相信这不是因为编程人员想要与C++的跨平台问题做斗争。而是因为C++快速,或许是因为可以更直接地控制底层平台。尽管发展方向始终由Sun掌控(多年以前,我参加了一个记者招待会,Gosling在会上说“Java始终跟C++一样快或者更快”,这句话一直困扰着我),但是Java并不能解决所有问题。
| 共3页: 1 [2] [3] 下一页 | ||
|
|
||||
| · ADSL应用面面俱到 · 龙芯要做中国的“奔腾” · 华为七千人主动辞职规.. · 华为路由器配置 · 华为员工自杀频频拷问.. · 贝恩资本携手华为22亿.. · 2007盘点专题:有多少.. · 双机热备技术 |
· 微软出价446亿美元收购.. · 国际文档格式标准开战 · 体验Visual Studio 200.. · 微软Forefront企业安全.. · Sun以10亿美元并购开源.. · 802.11n:下一代的无线.. · 甲骨文Oracle 11g正式.. · Windows Server 2008专.. |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · SQL Server 2008/2005.. · 中间件应用技术专题 · 深入了解PGP加密技术 · MySQL数据库备份 |
· 病毒查杀专题 · VPN技术 · Solaris 10 配置管理 · Linux 基础 · SSL VPN详细知识 · Linux防火墙 · 路由器设置与口令恢复 · Linux 集群技术专题 |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · 中间件应用技术专题 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · MySQL数据库备份 · 身份认证技术 |
· 病毒查杀专题 · 清除流氓软件——51CTO.. · SSL VPN详细知识 · Sniffer安全技术从入门.. · 路由器设置与口令恢复 · Linux 集群技术专题 · VPN技术 · Linux 基础 |
|||