Java Is Not Python, either...

                Java is not Python, either...

       在我发表了"Python Is Not Java"这篇文章后,大家对此产生了热烈的响应,我想我确实也需要再拿出一些时间来阐述Java Is Not Python,either. Java是一个功能非常强大的语言,在JDBC、JNDI、OSGi等很多方面都制定了标准和规范.
       当然,Python用户除了蔑视这些之外,在大多数情况下,他们宁可"自封名册(roll their own)". 对于Python而言,其唯一的标准是PEPs和标准的类库. 而对Java来说,它的规范就能达到几百页.在Python中,一个PEP基本限制在一个页面内,并且标准类库是用documentation和implementation来定义的,它大约一年时间也就更新一此.
       从某种程度上来说,在Python社区里,就类库的改进和语言的变化方面来看,当前的不安恰巧是Python和Java语言的文化差异的一种征兆. 在Java世界里,它一般认为对一个规范的多种实现是讲得通的,所以规范是社区的重点,而不是强调实现. 所以一旦实现了某一个规范,那它也未必会成为Java平台的一部分. (记住一点,那就是谁也不想在等待一个新的平台版本).
       规范本身就是Java固有的一部分.Java有接口,而Python没有.当然,还有许多框架,像Zope、Twisted和PEAK,它们也都有接口,但对Python开发者来说,Python看上去好像没有.Java中存在接口意味着一个规范体能考虑一些指定的、严格的对象,无论是什么样规范都可以.相比较下,Python规范的特点就好像是对象实现的草案一样,或者Python规范仅仅是实现的documentation.
       你要操作类库,这或许可以的.但你要建立框架和平台,仅指明实现是怎么做这是不够的.你必须从整体上讨论实现应该是怎么做的,因为一个平台或者框架的有些用户可能会根据需要的功能进行他们自己的实现.
       比如,对OSGi说. OSGi(Open Services Gateway Initiative)为基于组件的网络服务定义了一个标准的服务平台. 基本上,一个OSGi平台的实现能允许你安装软件"包".这些软件包可以引用其他包中的类.它们可以运行或停止,它们能为其他软件包提供服务,也可以动态的访问其他软件包提供的服务.这些就允许你建立一个个性的应用程序,比如说网络服务器(它就是一个软件包,当任何软件包提供servlet服务的时候,它就会动态的进行通报).
       OSGi 被使用在各种各样的产品和系统中, 这包括"小型家电"器械、汽车电器和服务物资供应系统。它并且被用来作为Eclipse IDE平台的"插件"系统的理论依据。当前, Python世界并没有使用它。由比较, Zope 2 个产品和杂货商的小包是粗暴玩具。
        许多Python开发者可能会说"所以什么?我们并不是不需要那些发出臭味的标准."尤其不是像OSGi那样的六百页的Java标准.有一点可以证明的是,在Python中仅仅一点应用程序平台才是像OSGi那样的复杂,即需要主IDE,应用服务器,和可以扩展的应用平台.
       但是,在Java世界中,你不是必须要求这些的,如果你要使用其中的一种,明智的选择就是遵循标准,或者使用一个现存的标准,或者使用你自己模仿编写的一个标准.无论采用哪种方式,你都是有可以遵循的模型的.
       这样,一个精密的Java程序员就能够避免像Python开发者那样在某个应用程序中要想充实他们的需要就必须做一些heads-scratching和prototyping.相反,Java程序员不用重新发面轮子的概念,而只是仅仅写一个轮子接口的实现就可以了.
       当然了,一些Python开发者能够从Java规范中学到一些东西.在设计一个适合Python的复杂应用程序之前,我自己决定来检查一下Java的这种艺术级别的特点.接下来我还要不得不忍受一个相当长的"Pythonification"处理过程,为了使这些API能成为Python中的API,在这过程中还要进行多次的重写.
       但是当我这样做的时候,我的实现和一些接口仍不能成为Python中的一个标准.没有人能知道我做的是什么,接下来可能会有些人也像我似的同样写这些代码,或者把这些代码和他们自己写的别的代码都统统扔掉.可能我们有些人是很有创造性的,但是我们的力量相对Python社区而言还是很微弱的.
       当然实现将是所有这些人的全部,或者说这样成功的机会还是有的,但是它最终是不可能成为标准类库的.但是说是出于偶然也好,Phyton标准类库所采用的模块有很多实际上是来自Java中功能相似的那些接口或者那些实现!比如说,'logging'模块来自log4j,'theading'模块模仿的是Java线程类,而'unitttest'就是JUnit的一个克隆.

 

       (原文链接网址:http://dirtsimple.org/2004/12/java-is-not-python-either.html,Phillip J. Eby先生的英文blog网址:http://dirtsimple.org/)

       译者注:Phillip J. Eby的blog在国外软件开发领域影响很大,广为流传的两篇文章是:“Python Is Not Java”与“Java is not Python, either...”,我会陆续为大家奉上。Phillip J. Eby还是一位多面手,除了在Python上的深厚造诣外,在心理学研究上也颇有建树,著作有《You, Version 2.0》。


 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值