技術文:初學者如何選擇Java和.net?



自從.Net問世以來,程序員都很關心的一個問題是「該學Java或.NET」。

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

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

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

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

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

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

Java討人喜歡,因為他把家底亮出來,鼓勵大家發(fā)揮聰明才智幫他進步。那么多開源項目,都在競爭中求發(fā)展,對Java的發(fā)展貢獻巨大。Java作為規(guī)范,吸收成果不計出身,善于否定自己、自我揚棄的優(yōu)點有目共睹。EJB3.0就是一例,EJB是Java 2企業(yè)版(即J2EE)的殺手锏,在企業(yè)級應用中廣受推崇,占據(jù)大型企業(yè)應用的高端市場。但EJB2.x也因其不易開發(fā)、部署受到批評。新近通過的EJB 3.0幾乎是對EJB2.x的全盤否定,丟棄了重量級的EJB2.x,引入輕量級開源項目Hibernate的設計理念,公布不久就獲得多方支持。為了理想,Java不惜付出代價,要不然哪有Highway帖子里.net設計師的評價:“Java發(fā)展到現(xiàn)在,還能相對那么緊湊精干,不容易!”

.net不同,出生于老牌商人世家,什么理念啦,原則啦,對商人來說不重要。重要的是要保住市場,搶占市場。

他的主人以操作系統(tǒng)雄霸桌面電腦,曾經(jīng)對互聯(lián)網(wǎng)不屑一顧。當終于發(fā)現(xiàn)自己犯了原則錯誤,不得不迎頭趕上時,.net應運而生。.net世交多,要盡量保持親戚關系,還要讓親戚的支持者原windows平臺開發(fā)人員保住飯碗,象EJB3.0那種過河拆橋痛下殺手的事情還沒干過。新功能要加,歷史物件也要留。但他和自家親戚關系緊密,外人從親戚家拐個彎就到他家,自在,沒有陌生感,也沒有路費。人留住了,市場就留住了。至于跨平臺,有違家族利益,不符合祖訓,所以理論上的跨平臺,他不打算認真對待。但中小企業(yè)應用的市場,他占住了。

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

四 站在用戶的立場上
雖然Java和.net奮斗的目標不同,但是都是B/S結構軟件市場的生力軍。

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

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

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

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

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

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

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

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

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

結束語

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

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

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

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