自從協(xié)議簽過(guò)以后,在合肥和南京的這段時(shí)間我沒(méi)買任何書(shū),也沒(méi)訂任何雜志,因?yàn)榕c其買了帶到北京來(lái),不如到北京來(lái)再買。加上到了北京的前幾天都在適應(yīng)環(huán)境,也沒(méi)顧的上這樁子事。算算看來(lái)已經(jīng)有四個(gè)月沒(méi)看<<程序員>>了,<<程序員>>的很多概念已經(jīng)在我腦海中淡化了,(天哪,這樣不好!),前兩天遇到潘加宇,居然問(wèn)他“你有沒(méi)有給<<程序員>>寫(xiě)過(guò)文章?”話一問(wèn)出來(lái)連我自己都覺(jué)得搞笑!潘加宇早就是<<程序員>>的專欄作家了!幸好我們當(dāng)時(shí)沒(méi)吃米飯,否則肯定兩個(gè)人對(duì)噴。
為了不再丟人,我一口氣把幾個(gè)月的<<程序員>>都買了,好好補(bǔ)補(bǔ)血。遺憾的是我還是沒(méi)有逃脫我不喜歡的論調(diào)和文章,就是那種看過(guò)了特別想把剛才吃的都吐出來(lái)的那種文章。比如2005年第二期的雜志就有這樣一篇文章。這篇文章的大意是說(shuō)原本很被技術(shù)界看好的JDO 2.0標(biāo)準(zhǔn)被很多大公司集體否決了,所以就認(rèn)為商業(yè)政治謀殺了技術(shù)標(biāo)準(zhǔn),而事實(shí)上是,這篇文章的作者根本就沒(méi)有搞清楚這場(chǎng)紛爭(zhēng)背后的意義。
先讓我們來(lái)看看JCP投票的情況:
SE/EE
|
![]() |
|
從實(shí)際情況上來(lái)看,好像是和EJB的利益有關(guān)的人都投了反對(duì)票,希望技術(shù)開(kāi)放和公平競(jìng)爭(zhēng)的人都投了贊成票,于是那篇文章的作者就得到一個(gè)結(jié)論:大公司們希望自己的服務(wù)器硬件和應(yīng)用服務(wù)器能賣上好價(jià)錢,所以就謀殺了JDO 2.0。為澄清這個(gè)問(wèn)題,我同那篇文章的作者采取同樣的方法——考察故事的背景。在java社群里最閃耀的O/R mapping明星有兩個(gè):JDO和Hibernate。他們互為競(jìng)爭(zhēng)對(duì)手,將java的O/R mapping工具集劃分為兩個(gè)陣營(yíng),而他們共同的競(jìng)爭(zhēng)對(duì)手又是EJB 2.x中的entity bean。這場(chǎng)戰(zhàn)爭(zhēng)是三大技術(shù)標(biāo)準(zhǔn)的公平較量,或者可以說(shuō)成是封建貴族、改良派新貴族和革命派之間的較量,戰(zhàn)爭(zhēng)的結(jié)局眾人皆知——Hibernate獲得了最高的榮譽(yù)和程序員心目中的領(lǐng)導(dǎo)地位,JDO雖不可與之并駕齊驅(qū),但也差不到哪去,培養(yǎng)了一群重視粉絲,而臭名昭著的entity bean則被列入“不推薦使用(或推薦不使用)的技術(shù)名單”,掛上“戰(zhàn)敗國(guó)”的牌子。
下面我沿用那篇文章作者的用語(yǔ)“商業(yè)政治”。商業(yè)政治家們覺(jué)得Hibernate作為一種開(kāi)源軟件確實(shí)不是其大規(guī)模推廣的最好方式,(假如Hibernate能加入Apache或Eclipse之類的社群興許好一些),而他又確實(shí)很棒,所以為Hibernate爭(zhēng)取一個(gè)適當(dāng)?shù)拿肿屍淅^續(xù)統(tǒng)治者的地位是迫在眉睫的事。注意,這里并不是說(shuō)商業(yè)政治家們有多高尚,相反,作者也覺(jué)得他們都長(zhǎng)著一副丑陋的像銅錢一樣的面孔,可是作者同時(shí)也相信他們永遠(yuǎn)都會(huì)把股東放在第一,客戶放在第二,而把程序員放在第三。當(dāng)IBM/SAP等意識(shí)到自己所提供的高端軟件中有一部分不如開(kāi)源產(chǎn)品他們會(huì)立即得到客戶的抱怨聲,如來(lái)自BMW和Citibank的聲音,他們會(huì)立即用盡三十六計(jì)以提升這部分產(chǎn)品的競(jìng)爭(zhēng)力。這次商業(yè)政治家們采用的方法是“挖人”!將Hibernate的老大挖到EJB來(lái),鼓勵(lì)他創(chuàng)新,分階段的拋棄EJB 2.x的一些設(shè)計(jì),在EJB 3.0中集成Hibernate的思路,以求為客戶提供唯一的也是目前最好的解決方案,要知道,技術(shù)界的很多成本都耗在了技術(shù)分歧上面。此時(shí)的JDO還在第二名的花環(huán)中沾沾自喜,可當(dāng)他發(fā)現(xiàn)本次比賽的三個(gè)人在下次比賽中將變成兩個(gè)人時(shí)他立即意識(shí)到“第二名=最后一名”!這就好像蘇聯(lián)吞并和很多戰(zhàn)敗國(guó),這讓盟軍十分惱火。JDO決定推出2.0版以適應(yīng)形式的需要,但是這個(gè)決定在前面提到的投票中被否決了。
原因很簡(jiǎn)單,我們不需要兩個(gè)相同程度80%的規(guī)范在市場(chǎng)上并行,這為很多產(chǎn)品帶來(lái)了更多的成本。除非JDO 2.0從另一個(gè)角度切入市場(chǎng),并在規(guī)范中澄清如何解決其與EJB 3.0的競(jìng)爭(zhēng),否則不能標(biāo)準(zhǔn)化。那篇文章的作者認(rèn)為這是因?yàn)榇蠊鞠M约簝r(jià)格昂貴的應(yīng)用服務(wù)器能繼續(xù)出售,所以才否決JDO 2.0,我不知道他如何得到這個(gè)詭異的想法。事實(shí)上商業(yè)策略往往是不隨技術(shù)標(biāo)準(zhǔn)而變化的,即使這個(gè)世界上從來(lái)沒(méi)有過(guò)EJB 3.0,也沒(méi)有Hibernate,IBM也一樣能把他的小型機(jī)+AIX+WebSphere賣出去!而倘若他同時(shí)批準(zhǔn)了EJB 3.0和JDO 2.0,那就更好了,IBM現(xiàn)在可以提供兩套產(chǎn)品了,業(yè)務(wù)面豈不是更廣,要知道,對(duì)IBM來(lái)說(shuō)真正的核心客戶是不會(huì)在乎IBM的應(yīng)用服務(wù)器有幾種的,他們依然照單全收!比如BMW和Citibank。而大企業(yè)們這樣做恰恰是為了維護(hù)市場(chǎng)的穩(wěn)定,減輕客戶CIO和IT部門的壓力,他們否決JDO 2.0的出臺(tái)也正是希望EJB 3.0系列產(chǎn)品能搶先占領(lǐng)市場(chǎng),讓昨日的山大王真正成為明日的技術(shù)皇帝!
最后,模仿那位作者,讓我們來(lái)回顧一下誰(shuí)投了贊成票,以及他們的出發(fā)點(diǎn):
1。Apache,在java的戰(zhàn)場(chǎng)上,apache永遠(yuǎn)都是贏家,因?yàn)樗揪褪窃诎缪菀粋€(gè)軍火商的角色,無(wú)論誰(shuí)贏誰(shuí)輸都得大量使用apache的組件構(gòu)建商業(yè)平臺(tái)。而作為java社群的領(lǐng)導(dǎo)者之一,apache相信技術(shù)的對(duì)立面越多,技術(shù)本身就會(huì)越繁榮,java不能結(jié)束世界大戰(zhàn)的局面。
2。Apple,這種分歧跟他基本沒(méi)什么關(guān)系。但機(jī)遇對(duì)于蘋(píng)果通常都會(huì)比對(duì)于其它同等規(guī)模的企業(yè)要重要一些。
3。Borland,一直希望能在應(yīng)用服務(wù)器市場(chǎng)上分一杯羹。事實(shí)上除了VB以外的任何一種開(kāi)發(fā)類標(biāo)準(zhǔn)對(duì)borland都是有吸引力的。
4。Doug Lea先生,作為java社群領(lǐng)導(dǎo)者中的自然人之一,“平等競(jìng)爭(zhēng)”是個(gè)很重要的學(xué)術(shù)話題。
5。Sun,稍稍讀一些IT發(fā)展史就會(huì)知道,Sun從來(lái)就不是商業(yè)路線的成功者。
總結(jié)起來(lái),那篇文章犯了兩個(gè)基本的邏輯錯(cuò)誤:
1。其作者本能的以為老企業(yè)一定會(huì)維護(hù)老產(chǎn)品的權(quán)威,卻沒(méi)有意識(shí)到這一次JDO的競(jìng)爭(zhēng)對(duì)手不是上一次圣戰(zhàn)的戰(zhàn)敗國(guó),而是一個(gè)擁有Hibernate血統(tǒng)的全新的EJB 3.0。
2。開(kāi)放和競(jìng)爭(zhēng)確實(shí)對(duì)技術(shù)的發(fā)展很有好處,可是“過(guò)度競(jìng)爭(zhēng)”卻會(huì)違反“客戶利益至上”的經(jīng)濟(jì)學(xué)不二法則。這使我想起了我曾經(jīng)有幸聆聽(tīng)了北大光華的一位院長(zhǎng)的講座,他告訴我們“壟斷有效率損失,競(jìng)爭(zhēng)一樣有效率損失”,不能用單一的標(biāo)準(zhǔn)來(lái)衡量人類社會(huì)的每一個(gè)角落。
經(jīng)濟(jì)學(xué)出身的泡泡