技術(shù)文:初學(xué)者如何選擇Java和.net?
自從.Net問(wèn)世以來(lái),程序員都很關(guān)心的一個(gè)問(wèn)題是「該學(xué)Java或.NET」。
想要兼顧兩者,其實(shí)不太容易。投入在.NET的時(shí)間越多,所能花費(fèi)在Java的時(shí)間自然就少了,反之亦然。在信息爆炸的時(shí)代,重要的不是信息的取得,而是信息的抉擇。信息太多,時(shí)間太少,如果不能慎選適合的技術(shù),只會(huì)平白浪費(fèi)許多時(shí)間,斫喪自己的競(jìng)爭(zhēng)力。
一 開(kāi)發(fā)效率方面:
對(duì)我們來(lái)說(shuō)選擇開(kāi)發(fā)工具的最需要衡量的就是這一因素:表現(xiàn)層開(kāi)發(fā):J2EE這方面非常欠缺,把這一任務(wù)丟給了應(yīng)用服務(wù)器廠商和編程人員,不象.Net擁有很牛的.Net Studio,不過(guò)Jbuilder 6已經(jīng)出來(lái)了,支持EJB2.0 也不算太落后,但一直沒(méi)有解決方案的就是頁(yè)面用戶控件(當(dāng)然Turbine的Action Event也算一種),缺乏可視化設(shè)計(jì)和Servlet應(yīng)用程序框架生成。我期望的一種方式是具有象.Net Studio一樣的可以所見(jiàn)即所得的編輯模板(Template),綁定用戶按鈕事件處理。目前可以通過(guò)javascript庫(kù),模板庫(kù)及宏庫(kù)略微緩解一下Servlet的開(kāi)發(fā)。ASP .Net和Servlet都支持動(dòng)態(tài)更新表現(xiàn)層。
二 XML支持能力: .Net一直叫囂的就是我集成了XML和Web Service,但JDK1.4也搞出了XML規(guī)范,這方面已經(jīng)差不多了,不過(guò).Net的易用性好得很,而且就此一家,程序員不必費(fèi)心思選組件或產(chǎn)品。
在采用XML和XSLT的開(kāi)發(fā)模式中:微軟的SQL Server 2000直接提供了HTTP Query到XML數(shù)據(jù)的功能,不過(guò)我用dbxml也能做得這一點(diǎn)嘛,還適用于大多數(shù)的主流RDBMS,更牛!這種開(kāi)發(fā)模式應(yīng)該是未來(lái)的方向。
三 理解的兩者本質(zhì)
Java是綁定于一種語(yǔ)言的跨系統(tǒng)的平臺(tái),是一個(gè)有多家供應(yīng)商提供競(jìng)爭(zhēng)性產(chǎn)品的規(guī)范。
.net是綁定于一種系統(tǒng)的多語(yǔ)言平臺(tái),是一個(gè)規(guī)范性較弱的壟斷性產(chǎn)品。
一個(gè)是規(guī)范一個(gè)是產(chǎn)品,本來(lái)就不同。于是.net的發(fā)言人說(shuō),規(guī)范和產(chǎn)品沒(méi)得比,要比就比具體產(chǎn)品。但,Java天生是規(guī)范,這不是Java的錯(cuò),.net生來(lái)是迎戰(zhàn)Java的,孤軍奮戰(zhàn)是他的命。
隨便問(wèn)一個(gè)稍有頭腦的Java程序員,Java最大的好處是什么,他會(huì)毫不猶豫地告訴你:“簡(jiǎn)潔”。Java為Internet而生,也為自己“簡(jiǎn)單易用并提高生產(chǎn)效率”的理念而活。
Java討人喜歡,因?yàn)樗鸭业琢脸鰜?lái),鼓勵(lì)大家發(fā)揮聰明才智幫他進(jìn)步。那么多開(kāi)源項(xiàng)目,都在競(jìng)爭(zhēng)中求發(fā)展,對(duì)Java的發(fā)展貢獻(xiàn)巨大。Java作為規(guī)范,吸收成果不計(jì)出身,善于否定自己、自我揚(yáng)棄的優(yōu)點(diǎn)有目共睹。EJB3.0就是一例,EJB是Java 2企業(yè)版(即J2EE)的殺手锏,在企業(yè)級(jí)應(yīng)用中廣受推崇,占據(jù)大型企業(yè)應(yīng)用的高端市場(chǎng)。但EJB2.x也因其不易開(kāi)發(fā)、部署受到批評(píng)。新近通過(guò)的EJB 3.0幾乎是對(duì)EJB2.x的全盤(pán)否定,丟棄了重量級(jí)的EJB2.x,引入輕量級(jí)開(kāi)源項(xiàng)目Hibernate的設(shè)計(jì)理念,公布不久就獲得多方支持。為了理想,Java不惜付出代價(jià),要不然哪有Highway帖子里.net設(shè)計(jì)師的評(píng)價(jià):“Java發(fā)展到現(xiàn)在,還能相對(duì)那么緊湊精干,不容易!”
.net不同,出生于老牌商人世家,什么理念啦,原則啦,對(duì)商人來(lái)說(shuō)不重要。重要的是要保住市場(chǎng),搶占市場(chǎng)。
他的主人以操作系統(tǒng)雄霸桌面電腦,曾經(jīng)對(duì)互聯(lián)網(wǎng)不屑一顧。當(dāng)終于發(fā)現(xiàn)自己犯了原則錯(cuò)誤,不得不迎頭趕上時(shí),.net應(yīng)運(yùn)而生。.net世交多,要盡量保持親戚關(guān)系,還要讓親戚的支持者原windows平臺(tái)開(kāi)發(fā)人員保住飯碗,象EJB3.0那種過(guò)河拆橋痛下殺手的事情還沒(méi)干過(guò)。新功能要加,歷史物件也要留。但他和自家親戚關(guān)系緊密,外人從親戚家拐個(gè)彎就到他家,自在,沒(méi)有陌生感,也沒(méi)有路費(fèi)。人留住了,市場(chǎng)就留住了。至于跨平臺(tái),有違家族利益,不符合祖訓(xùn),所以理論上的跨平臺(tái),他不打算認(rèn)真對(duì)待。但中小企業(yè)應(yīng)用的市場(chǎng),他占住了。
于是呢,Java陣營(yíng)繼續(xù)為理想而戰(zhàn),.net陣營(yíng)繼續(xù)為市場(chǎng)而戰(zhàn),各得所需,都忙得不亦樂(lè)乎。
四 站在用戶的立場(chǎng)上
雖然Java和.net奮斗的目標(biāo)不同,但是都是B/S結(jié)構(gòu)軟件市場(chǎng)的生力軍。
Java對(duì)大中小型系統(tǒng)都適用,只要搭配不同的操作系統(tǒng)、應(yīng)用服務(wù)器等等,大到銀行綜合信息系統(tǒng)、全國(guó)全省的統(tǒng)一應(yīng)用系統(tǒng),小到手機(jī)游戲,Java可以大小通吃,來(lái)者不拒。尤其是中國(guó)政府的重要系統(tǒng),全沒(méi)有.net的份,為啥?你不給我看家底,我怎么知道你有沒(méi)有留了后門(mén),改天偷偷溜進(jìn)我家?
.net照顧中小型應(yīng)用毫無(wú)問(wèn)題,而且開(kāi)發(fā)速度快,作為用戶,付了錢(qián)很快能看到回報(bào),當(dāng)然歡喜。大型應(yīng)用么,.net是不是真的支撐不了,我不知道,但諸如windows不穩(wěn)定不安全的評(píng)論由來(lái)已久,.net建構(gòu)于這些親戚的基礎(chǔ)上,壞事就脫不了干系。
系統(tǒng)交貨早,功能實(shí)現(xiàn),運(yùn)行穩(wěn)定,安全性不出紕漏,用戶就滿意。
跨不跨操作系統(tǒng),這個(gè)考量不重要,哪有沒(méi)事整天換操作系統(tǒng)的用戶?
五 站在開(kāi)發(fā)商的立場(chǎng)上
Java還是.net?繼續(xù)頭疼。跨平臺(tái)對(duì)開(kāi)發(fā)商是一個(gè)巨大的誘惑。一次開(kāi)發(fā),多個(gè)平臺(tái)使用,降低了遷移成本,有利。但Java的開(kāi)發(fā)工具沒(méi)有.net順手,對(duì)編碼人員的要求比.net要高。
.net培訓(xùn)成本低,上手快。尤其如果開(kāi)發(fā)人員以前都是做windows開(kāi)發(fā)的話,轉(zhuǎn)型成本低得讓老板眉開(kāi)眼笑。 最重要的決定力量是市場(chǎng)。開(kāi)發(fā)商所定位的市場(chǎng)用戶的需求和開(kāi)發(fā)上在技術(shù)上的歷史積累,決定了開(kāi)發(fā)商最終的策略。
六 站在從業(yè)人員的立場(chǎng)上
從業(yè)人員被市場(chǎng)所驅(qū)動(dòng),反過(guò)來(lái)也引導(dǎo)市場(chǎng)。Java起手的過(guò)程比較漫長(zhǎng)。Java開(kāi)發(fā)者要做很多DIY工作,才能寫(xiě)出第一個(gè)像樣的程序。DIY多了,對(duì)于從業(yè)的基礎(chǔ)素質(zhì),必有提高。
.net入門(mén)快,windows最大的好處“可視化”在.net延續(xù),集成環(huán)境好,單步調(diào)試強(qiáng),這是Java團(tuán)隊(duì)中下至程序員上達(dá)項(xiàng)目經(jīng)理歷來(lái)羨慕的地方。做慣了windows和.net下的開(kāi)發(fā),難免覺(jué)得Java下的開(kāi)發(fā)調(diào)試實(shí)在比較原始:代碼大多要一行一行寫(xiě),單步調(diào)試很多時(shí)候不可能。
但Java人員的付出也有回報(bào)。我還記得當(dāng)年P(guān)ascal編程課和Unix操作系統(tǒng)帶給我的思維沖擊,那門(mén)編程課應(yīng)該更準(zhǔn)確地說(shuō)成“結(jié)構(gòu)化編程――pascal”。Pascal強(qiáng)調(diào)的結(jié)構(gòu)化編程帶來(lái)了非結(jié)構(gòu)化語(yǔ)言如Fortran之流無(wú)法比擬的美和樂(lè)趣,Unix崇尚的“小即是美”、“沒(méi)有消息就是好消息”深入我心。在軟件開(kāi)發(fā)這一生產(chǎn)過(guò)程中,除了得到維持生計(jì)所需的報(bào)酬,同時(shí)能得到美的享受和滿足的心情,實(shí)為天賜。Java從業(yè)者樂(lè)于談?wù)揓ava的美,這一點(diǎn)上比.net有福。
結(jié)束語(yǔ)
就服務(wù)端市場(chǎng)來(lái)講,Java目前在技術(shù)先進(jìn)性上有絕對(duì)優(yōu)勢(shì)。應(yīng)用系統(tǒng)需要各個(gè)層面的框架(framework),Java都有大量已完成或正在進(jìn)行的開(kāi)源項(xiàng)目幫助開(kāi)發(fā)人員更好地完成自己的任務(wù)。諸如struts/JSF類的框架,.net沒(méi)有對(duì)應(yīng)物,而且Java在揚(yáng)棄的同時(shí)保持著相對(duì)的穩(wěn)定。
.net開(kāi)發(fā)效率差不多是Java的三倍(經(jīng)驗(yàn)數(shù)據(jù)),致命的誘惑。在Java放棄的客戶端程序上,.net是老大,但在服務(wù)端,.net還是個(gè)小弟弟,有待成長(zhǎng)。微軟最初想要構(gòu)建一個(gè)新的技術(shù)來(lái)回應(yīng)J2EE,但發(fā)現(xiàn)一己之力還辦不到。于是匆匆祭出com/com+,被絕大多數(shù)程序員評(píng)為“丑陋繁雜,遲早會(huì)被替換掉”。什么時(shí)候替換呢?這一替換對(duì)應(yīng)用的影響有多大呢?微軟的新操作系統(tǒng)對(duì).net又會(huì)有多大影響?拭目以待。
繞來(lái)繞去的意思是,我不覺(jué)得兩個(gè)平臺(tái)有截然的高下之分。在這個(gè)互動(dòng)的世界上,不想被淘汰的競(jìng)爭(zhēng)者始終保持警惕,努力學(xué)習(xí)對(duì)手的優(yōu)點(diǎn)。Java的努力之一就是提供更易用的工具幫助開(kāi)發(fā)人員快速輕松地開(kāi)發(fā)Web應(yīng)用程序。而.net的當(dāng)務(wù)之急是改進(jìn)架構(gòu),完善框架。
還是那句話:沒(méi)有最好的技術(shù),只有對(duì)于具體項(xiàng)目來(lái)說(shuō)最適用的技術(shù)。