技術(shù)文:初學(xué)者如何選擇Java和.net?



自從.Net問世以來,程序員都很關(guān)心的一個(gè)問題是「該學(xué)Java或.NET」。

想要兼顧兩者,其實(shí)不太容易。投入在.NET的時(shí)間越多,所能花費(fèi)在Java的時(shí)間自然就少了,反之亦然。在信息爆炸的時(shí)代,重要的不是信息的取得,而是信息的抉擇。信息太多,時(shí)間太少,如果不能慎選適合的技術(shù),只會(huì)平白浪費(fèi)許多時(shí)間,斫喪自己的競(jìng)爭(zhēng)力。

一 開發(fā)效率方面
對(duì)我們來說選擇開發(fā)工具的最需要衡量的就是這一因素:表現(xiàn)層開發(fā):J2EE這方面非常欠缺,把這一任務(wù)丟給了應(yīng)用服務(wù)器廠商和編程人員,不象.Net擁有很牛的.Net Studio,不過Jbuilder 6已經(jīng)出來了,支持EJB2.0 也不算太落后,但一直沒有解決方案的就是頁面用戶控件(當(dāng)然Turbine的Action Event也算一種),缺乏可視化設(shè)計(jì)和Servlet應(yīng)用程序框架生成。我期望的一種方式是具有象.Net Studio一樣的可以所見即所得的編輯模板(Template),綁定用戶按鈕事件處理。目前可以通過javascript庫,模板庫及宏庫略微緩解一下Servlet的開發(fā)。ASP .Net和Servlet都支持動(dòng)態(tài)更新表現(xiàn)層。

二 XML支持能力:
.Net一直叫囂的就是我集成了XML和Web Service,但JDK1.4也搞出了XML規(guī)范,這方面已經(jīng)差不多了,不過.Net的易用性好得很,而且就此一家,程序員不必費(fèi)心思選組件或產(chǎn)品。

在采用XML和XSLT的開發(fā)模式中:微軟的SQL Server 2000直接提供了HTTP Query到XML數(shù)據(jù)的功能,不過我用dbxml也能做得這一點(diǎn)嘛,還適用于大多數(shù)的主流RDBMS,更牛!這種開發(fā)模式應(yīng)該是未來的方向。

三 理解的兩者本質(zhì)
Java是綁定于一種語言的跨系統(tǒng)的平臺(tái),是一個(gè)有多家供應(yīng)商提供競(jìng)爭(zhēng)性產(chǎn)品的規(guī)范。
.net是綁定于一種系統(tǒng)的多語言平臺(tái),是一個(gè)規(guī)范性較弱的壟斷性產(chǎn)品。
一個(gè)是規(guī)范一個(gè)是產(chǎn)品,本來就不同。于是.net的發(fā)言人說,規(guī)范和產(chǎn)品沒得比,要比就比具體產(chǎn)品。但,Java天生是規(guī)范,這不是Java的錯(cuò),.net生來是迎戰(zhàn)Java的,孤軍奮戰(zhàn)是他的命。

隨便問一個(gè)稍有頭腦的Java程序員,Java最大的好處是什么,他會(huì)毫不猶豫地告訴你:“簡(jiǎn)潔”。Java為Internet而生,也為自己“簡(jiǎn)單易用并提高生產(chǎn)效率”的理念而活。

Java討人喜歡,因?yàn)樗鸭业琢脸鰜?鼓勵(lì)大家發(fā)揮聰明才智幫他進(jìn)步。那么多開源項(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也因其不易開發(fā)、部署受到批評(píng)。新近通過的EJB 3.0幾乎是對(duì)EJB2.x的全盤否定,丟棄了重量級(jí)的EJB2.x,引入輕量級(jí)開源項(xiàng)目Hibernate的設(shè)計(jì)理念,公布不久就獲得多方支持。為了理想,Java不惜付出代價(jià),要不然哪有Highway帖子里.net設(shè)計(jì)師的評(píng)價(jià):“Java發(fā)展到現(xiàn)在,還能相對(duì)那么緊湊精干,不容易!”

.net不同,出生于老牌商人世家,什么理念啦,原則啦,對(duì)商人來說不重要。重要的是要保住市場(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)開發(fā)人員保住飯碗,象EJB3.0那種過河拆橋痛下殺手的事情還沒干過。新功能要加,歷史物件也要留。但他和自家親戚關(guān)系緊密,外人從親戚家拐個(gè)彎就到他家,自在,沒有陌生感,也沒有路費(fèi)。人留住了,市場(chǎng)就留住了。至于跨平臺(tái),有違家族利益,不符合祖訓(xùn),所以理論上的跨平臺(tái),他不打算認(rèn)真對(duì)待。但中小企業(yè)應(yīng)用的市場(chǎng),他占住了。

于是呢,Java陣營繼續(xù)為理想而戰(zhàn),.net陣營繼續(xù)為市場(chǎng)而戰(zhàn),各得所需,都忙得不亦樂乎。

四 站在用戶的立場(chǎng)上
雖然Java和.net奮斗的目標(biāo)不同,但是都是B/S結(jié)構(gòu)軟件市場(chǎng)的生力軍。

Java對(duì)大中小型系統(tǒng)都適用,只要搭配不同的操作系統(tǒng)、應(yīng)用服務(wù)器等等,大到銀行綜合信息系統(tǒng)、全國全省的統(tǒng)一應(yīng)用系統(tǒng),小到手機(jī)游戲,Java可以大小通吃,來者不拒。尤其是中國政府的重要系統(tǒng),全沒有.net的份,為啥?你不給我看家底,我怎么知道你有沒有留了后門,改天偷偷溜進(jìn)我家?

.net照顧中小型應(yīng)用毫無問題,而且開發(fā)速度快,作為用戶,付了錢很快能看到回報(bào),當(dāng)然歡喜。大型應(yīng)用么,.net是不是真的支撐不了,我不知道,但諸如windows不穩(wěn)定不安全的評(píng)論由來已久,.net建構(gòu)于這些親戚的基礎(chǔ)上,壞事就脫不了干系。

系統(tǒng)交貨早,功能實(shí)現(xiàn),運(yùn)行穩(wěn)定,安全性不出紕漏,用戶就滿意。

跨不跨操作系統(tǒng),這個(gè)考量不重要,哪有沒事整天換操作系統(tǒng)的用戶?

五 站在開發(fā)商的立場(chǎng)上
Java還是.net?繼續(xù)頭疼?缙脚_(tái)對(duì)開發(fā)商是一個(gè)巨大的誘惑。一次開發(fā),多個(gè)平臺(tái)使用,降低了遷移成本,有利。但Java的開發(fā)工具沒有.net順手,對(duì)編碼人員的要求比.net要高。

.net培訓(xùn)成本低,上手快。尤其如果開發(fā)人員以前都是做windows開發(fā)的話,轉(zhuǎn)型成本低得讓老板眉開眼笑。 最重要的決定力量是市場(chǎng)。開發(fā)商所定位的市場(chǎng)用戶的需求和開發(fā)上在技術(shù)上的歷史積累,決定了開發(fā)商最終的策略。

六 站在從業(yè)人員的立場(chǎng)上
從業(yè)人員被市場(chǎng)所驅(qū)動(dòng),反過來也引導(dǎo)市場(chǎng)。Java起手的過程比較漫長。Java開發(fā)者要做很多DIY工作,才能寫出第一個(gè)像樣的程序。DIY多了,對(duì)于從業(yè)的基礎(chǔ)素質(zhì),必有提高。

.net入門快,windows最大的好處“可視化”在.net延續(xù),集成環(huán)境好,單步調(diào)試強(qiáng),這是Java團(tuán)隊(duì)中下至程序員上達(dá)項(xiàng)目經(jīng)理歷來羨慕的地方。做慣了windows和.net下的開發(fā),難免覺得Java下的開發(fā)調(diào)試實(shí)在比較原始:代碼大多要一行一行寫,單步調(diào)試很多時(shí)候不可能。

但Java人員的付出也有回報(bào)。我還記得當(dāng)年P(guān)ascal編程課和Unix操作系統(tǒng)帶給我的思維沖擊,那門編程課應(yīng)該更準(zhǔn)確地說成“結(jié)構(gòu)化編程――pascal”。Pascal強(qiáng)調(diào)的結(jié)構(gòu)化編程帶來了非結(jié)構(gòu)化語言如Fortran之流無法比擬的美和樂趣,Unix崇尚的“小即是美”、“沒有消息就是好消息”深入我心。在軟件開發(fā)這一生產(chǎn)過程中,除了得到維持生計(jì)所需的報(bào)酬,同時(shí)能得到美的享受和滿足的心情,實(shí)為天賜。Java從業(yè)者樂于談?wù)揓ava的美,這一點(diǎn)上比.net有福。

結(jié)束語

就服務(wù)端市場(chǎng)來講,Java目前在技術(shù)先進(jìn)性上有絕對(duì)優(yōu)勢(shì)。應(yīng)用系統(tǒng)需要各個(gè)層面的框架(framework),Java都有大量已完成或正在進(jìn)行的開源項(xiàng)目幫助開發(fā)人員更好地完成自己的任務(wù)。諸如struts/JSF類的框架,.net沒有對(duì)應(yīng)物,而且Java在揚(yáng)棄的同時(shí)保持著相對(duì)的穩(wěn)定。

.net開發(fā)效率差不多是Java的三倍(經(jīng)驗(yàn)數(shù)據(jù)),致命的誘惑。在Java放棄的客戶端程序上,.net是老大,但在服務(wù)端,.net還是個(gè)小弟弟,有待成長。微軟最初想要構(gòu)建一個(gè)新的技術(shù)來回應(yīng)J2EE,但發(fā)現(xiàn)一己之力還辦不到。于是匆匆祭出com/com+,被絕大多數(shù)程序員評(píng)為“丑陋繁雜,遲早會(huì)被替換掉”。什么時(shí)候替換呢?這一替換對(duì)應(yīng)用的影響有多大呢?微軟的新操作系統(tǒng)對(duì).net又會(huì)有多大影響?拭目以待。

繞來繞去的意思是,我不覺得兩個(gè)平臺(tái)有截然的高下之分。在這個(gè)互動(dòng)的世界上,不想被淘汰的競(jìng)爭(zhēng)者始終保持警惕,努力學(xué)習(xí)對(duì)手的優(yōu)點(diǎn)。Java的努力之一就是提供更易用的工具幫助開發(fā)人員快速輕松地開發(fā)Web應(yīng)用程序。而.net的當(dāng)務(wù)之急是改進(jìn)架構(gòu),完善框架。

還是那句話:沒有最好的技術(shù),只有對(duì)于具體項(xiàng)目來說最適用的技術(shù)。
北大青鳥網(wǎng)上報(bào)名
北大青鳥招生簡(jiǎn)章