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》。


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章