Java业界领袖法国式回忆录的详细介绍
Java业界领袖法国式回忆录的详细介绍
刘天北
Marc Fleury, Blue—"Why I Love EJBs", JBoss.org, 2002.12
这个标题更多地是玩笑。“Java业界领袖”不是指麦克尼利先生或Java规范的作者,而是对“JBoss”这个词的望文生义的翻译。所谓“法国式回忆录”,说的是JBoss的创始人和CEO Marc Fleury前些时候写的一篇自白性的随想“Blue: Why I love EJBs”。Marcf(这是Marc Fleury在JBoss源码中的署名)原籍法国,称这篇文章“法国式”,不会有大错。
对广大编程爱好者来说,似乎已经无需再过多介绍“JBoss是什么”。开放源码的,免费的,(因而)最受欢迎的应用服务器,J2EE战士们的圣地福音,Marf更喜欢听到的说法可能是“BEA killer”,不祥地暗示着JBoss在市场份额上对业界老大BEA Weblogic的致命威胁。2002年一年内,JBoss就被下载超过两百万次。这样的软件创造者,我们当然愿意听听他的想法,哪怕是思路怪诞或是语无伦次。
说到“思路怪诞、语无伦次”,可能多数程序员给常人留下的都是这个印象——想想你的女友最近对你的评论。Computer nerd几乎已经成了一个固定表达方式,用以形容这些坐在屏幕前,时而沉思冥想时而狂击键盘的狂人。可Marcf在“狂人”里也算是特殊的(哈姆雷特的准岳父和敌人Polonius会说,“疯得不同一般,颇有条理”)。在一次鼓吹开放源码的访谈中,他用了《黑客帝国》中的意象比喻自己:你可以选择吃蓝药丸还是红药丸。“专职做open source”就是那粒红的。吃了仙药,心明眼亮,看到的世界自然不同,那意思,就跟电影里Neo那种disillusioned的感觉差不多。
这段关于药丸的话已经成了不少opensourcer的座右铭。不过我们也可以读读《理想国》,苏格拉底的那一番“洞穴学说”同样精彩:常人好比是昏暗的洞穴里的奴隶,看不到外面的十方世界,只能从洞壁上模糊的影子胡乱猜测实情,但是要是有一个奴隶突然觉悟,扭过头来看到了青天白日,再回来搭救难友,告诉他们世界的真相,奴隶们多半不会感激,反而会认他疯了,或者老拳打死也不一定。换句话说,在西方的观念体系中,狂人、天才,仅隔一间;疯人的呓语,往往就是天机,反之亦然。
这回的呓语是法国味儿的。题目中的蓝色,固然暗示了刚才提到的非凡药物,更源自一套著名的法国电影(Trois Couleurs par K. Kielowski。Marcf也提到他的文章同样会有三部曲)。是的,你提醒得对,那还是他们国旗的颜色。
法国和美国,更广泛地说,老欧洲和新大陆的关系,一直是我乐意暗自玩味的一个话题。请想想英语里以“French”开头的那些词组:French kiss, French leave... 从中你可以得到一整套“法国想象”。
据说在哲学、社会学理论里,有一种从德国到法国/英国,再到美国的“理论旅行(traveling theory)” ,对于软件业来说,虽然计算机是正宗美国货,但若是缺了从莱布尼茨到冯诺伊曼的理论铺垫,缺了Bjarne Stroustup、Ivar Jacobson、Martin Fowler等人的工作和创见(谁能告诉我设计模式四人帮中欧洲人的比例?),程序员们的生活肯定会和现在不同。那么,法国人的位置呢?不要忘记,这个盛产文学、时尚用品和浪漫生活方式的国家目前正把开源J2EE领域作为一块最新的殖民地。JBoss和(半政府投资的)ObjectWeb已经成为点亮J2EE发烧友们双眼(和心灵)的著名品牌。
但法国人就是法国人。他们的狂热、“会玩儿”与他们对简洁、逻辑的钟爱一样出名。很难想象美国政府会有心思资助一个开源项目,同样很难想象BillG或是LarryE能写出Marcf这样的文章。略作铺垫、给“Why I love EJBs”破题之后,这位名副其实的JBoss就通过一连串的“I remember”,沉入了繁复、诡谲的往事:他的理论物理专业(似乎是在MIT作访问学者时拿的博士),他最早在Sun的工作,他在BEA面试职位时说的那句广为传诵的话(文中甚至暗示,这句话影响了BEA收购Weblogic),他怎样与Rickard Oberg(另一位天才,JBoss2和以前版本的设计者)相遇,怎样收到BEA的拒绝,BEA又怎样力邀Oberg加盟,他怎样创立了这个开源项目,JBoss的名称怎样从EJBoss变成现在这样(他这次没有因此责怪Sun)... 都是非常好玩儿的话题。熟悉软件业的朋友,不一定要懂编程,都会发现这是一份好读物。我个人则从中看到了罗布-格里耶(Alain Robbe-Grillet)晚期那些传奇风格的回忆录,特别是《重现的镜子》(Le Mirror Qui Revient)的影响——甚至那句“我回想起...”的语气都一模一样。读到这些“业界”的往事和时事,我不由得像Marcf本人一样,觉得这些都值得手握一杯好酒仔细揣摩,直至头脑进入一种递归循环般的恍惚(“...my brain goes in recursive loops at this point, I find it spooky, something to ponder over a good glass of wine. ”)
但无论如何,不该把它仅仅当成文学读物——说正经的,这首先是一份技术白皮书,一声宣战和招募友军的号角,一次商业宣传。文中的很多论断,在技术上更为有趣,更值得细细品味,不少行家都说这是最近读到的最好的EJB文章。从标题而言,Marcf的主旨是辩护性的:在大多数人抱怨EJB的陡峭的学习曲线和简陋的开发模式的时候,在不少人都转而拥抱轻量级的POJO和JDO的时候,在一些人预言EJB技术将于2003年底消亡,EJB是另一个CORBA的时候,解释“Why I love EJBs”是困难的,并需要挑衅性的勇气。凭借以往的了解,我认为Marcf不缺乏这个。这个法国人有央视体育解说员常说的“高卢雄鸡”(后面经常跟着的是“日耳曼战车”和“亚平宁什么什么”)的好战气质。挑衅是他的专长。比如这次,为了争辩EJB自身不一定性能低下,他举出了若干自己心目中的“性能杀手(performance killer,注意他们对killer这个词的爱好)”,杀手家族中罪孽最深的就是当今最流行的SOAP/Web Services(“In that family, the worst of all is possibly SOAP, the Web Services”)。为了避免刺伤,我就不往下列了,你可以自己去看看,被他判决的还有哪些是你的最爱。
接下去的段落中,Marcf谈到了应用服务器设计的最优实践和EJB开发的最优实践(你能区别这两者,对吧?)对于服务器设计,读之前我就能想到他要说什么:Dynamic Proxies/AOP/Interceptors/JMX。这些JBoss特色确实能给人深刻的印象,同时也逐渐被其他主流厂商所采用。对于EJB开发,他谈得最多的是高速缓存(caching)和避免串行化,好的实践包括将Web Container和EJB Container并置(collocation)、尽量使用具备cache的CMP2而不是BMP等等(我们听见了Monsieur JBoss的一句法国情话“CMP20 persistence, mon amour”)。当然,Marcf也没有忘记攻击J2EE规范(specifications)的作者们(“Real tech not spec" is our new war cry.)。其他的警句包括“缓存为王(cache is king)”、“EJB天生就要缓存(EJB's are natural caches)”、“谁掌握了带事务处理的Web应用谁就拥有了Web(He who owns the transactional Web owns the Web)”等。所有这些都是用不容置疑的语调给出的。如果这些碰巧也是你自己的实践方式——就像我的情况——你会感到妙不可言。但是,我也能设想EJB和JBoss的敌人那种被激怒和沮丧的感受。
在技术方面最出乎我意料的是Marcf对JBoss4勾画的蓝图。原本是J2EE独有的很多功能和服务,比如数据持久性、事务等等,都能被普通Java对象享用。为实现这个目的,它将提供一整套AOP的开发框架。换言之,JBoss 4将大大超越J2EE,达到一个全新的开发模式,当然原有的J2EE,JMX/EJB/component的模式还将被继续支持。无怪乎Marcf大力推行AOP(注意,JBoss自己的AOP框架与AspectJ完全不同,区别在于运行时实现还是编译时实现),甚至大有把它当成“银弹”之意。是否,像前一次对J2EE的预见一样,Marcf又在呓语中泄露了天机呢?是否我们都应该check out JBoss AOP模块的源码一读究竟呢?从Marcf对EJB本身的认识来看,我个人觉得其中洞见与盲目紧密地纠缠在一起。也许红药丸的服用者都倾向极端?也许其极端既是优势,又是代价?我回想起(对,这次是我本人的回想)Paul de Man的《盲目与洞见(Blindness and Insight)》,也许正如de Man所说,天才的盲目与洞见总是不可分割的,二者事实上是一回事。
即使相信Marcf的预言,我预料大多数开发者也不一定需要如此紧跟超前的技术。有个血淋淋的词儿叫bleeding edge,形容的就是这些与一般的前沿cutting edge相对的、刚刚萌芽、极不稳定的技术领域。风险是明显的:如果你搭对了车,你在灯下为了掌握这些不成熟的技术渡过的那些不眠之夜,你在应付一个又一个beta版的戏剧性差异时的头痛就会终获回报,但谁能说得准呢?软件业的这些趋势,除了技术方面之外,“商业”因素似乎更重要。Marcf选择了Open Source和J2EE固然是他成功的基石(他——拿着那杯用于沉思的酒——说,要是当时BEA雇了他,可能Weblogic用的就是现在的JBoss的代码了),但是从传统的“商业头脑”角度考虑,他的种种言行倒不见得一定合格(据说JBoss曾在Java ONE大会上卖过T恤衫)。不过最近见到他的同行都认为他的商业素质渐趋完善——这对J2EE这个行业来说显属幸事。JBoss的logo是“May the source be with you——愿源码与你同在”,在此我也愿意祝“好运与JBoss同在”。
最后说点儿题外话——当然,你也可以把整篇文章都当作编程领域之外的话。Marcf的文章去年12月初就出现在了JBoss网站上,但由于前两个月工作繁忙,直到昨天才看到该文——甚至首先是通过中译。这个中译,怎么讲呢,只能说是一个大意介绍:所有的句子都在那儿,但是微妙的、细节上的东西很多(我甚至想说,尽可能地)都错了。Persistence是持久性,不是“一致性”。Local interface是本地接口,不是“端口”。Interceptor是拦截器,不是“解释器”。Web Collocation是指Web Container(比如Tomcat/Jetty)和EJB Container(比如JBoss)放在一起,在同一个虚拟机中运行,而不是“Web程序的协作”。术语上的错误还在其次,很多句子的意思都没有领会出来。
我没有苛责译者的意思。只想说我的一点感慨:我们究竟为什么翻译?读者和译者又到底能从翻译中获得多少?像这篇中译,我也是听了不少人的赞许才去读的,那么赞许者是否就已经满足于这样一种“粗线条”的理解了呢?无论如何,我偏爱原文中那些细节胜过“速读”式的含混翻译。举最后一个例子:译文的最后一句话是:“你们也将能超越的任何巨大障碍,不只是我,每个人都能。”意思上似乎没问题。但原文却是“...soon, you will all be walking through walls, not just me, everyone.”。请体会这里的魔术隐喻:walking through walls,而不是“超越、任何、巨大的、障碍”。我也很难说出这句究竟怎么翻译合适,但就是因为这些肤浅的、有时别扭的、看上去没有积极意义的细节,我永远站在原文一边。