日暮西山-咖啡喝完了?

Java,這個字大概在整個資訊界是無人不知無人不曉的,他走到盡頭了嗎?

Java大略是在1996年出現,這年我還在準備高中聯考,要我認識他是不太可能的。當年網路並非如今如此興盛,要有網路就要使用極慢和極昂貴的撥接上網,這時瘋迷籃球和棒球比電腦更多。

2000年我第一次接觸Programming Language,學的是C,C語言大概是影響整個資訊界最重要的程式語言,當時的C目的很簡單,就是取代組合語言與電腦溝通,而且沒有強大的GUI、沒有複雜的軟體架構,頂多只是include幾個函式庫就可以完成了,透過大量的C和少量的組語可以完整的拼湊出一個作業系統,直到今天Linux仍活躍在embedded system當中,而C也仍然在低階程式語言上無可取代,加入Object Oriented概念後的C++,C++企圖打開軟體世界的另一片天,利用和C相似的語法外加複雜的OO概念可以打造出更大、更複雜,讓企業使用的系統。

但是誰都沒想到90年代後期網路會突然流行起來,而伴隨的應用也越趨重要,Java在這個時候出現了,透過applet實現了透過瀏覽器作為平台可以大量散佈軟體,但是後來applet終究漸漸消失,但伴隨而來的Servlet、JSP卻也帶動了至今仍未停歇的風潮。

有許多人急著找尋Java的替代品,但根據我在SI公司裡待了半年的看法,短期以內應該很難有人能夠取代Java在企業主、主管心中的地位。大部分客戶要求的並非高超的技術與完整良善的軟體架構,這些東西應該是由我們這些實際工作者本身就應該要注意的,他們只有要求:

1. 準時完工、達成需求
2. 不要出問題
3. 出問題要有人能夠解決

這就是為何當採購人員提出買IBM、HP甚至Dell、Acer的PC 5000台給全公司用是可能被接受的,但是提出到Nova組5000台電腦讓全公司用是不可能被接受的,就算同樣價格可以買到效能更好、外型更炫的PC也一樣,就是那句老話,你能保證品質和維護嗎?

今天,當你提出建議使用何種平台做為開發工具時,提出Java是不太會有主管質疑你是否能夠保證品質與維護的問題,也不會質疑你是否Java能夠做到。就好像你提案要使用Oracle作為本公司的資料庫,不太會有主管問你Oracle當資料庫是否有問題,但是當你提出要用pgSQL就會有人問你了。

要在人心中有這樣的地位是相當不容易的,Java有數不清的IDE(整合開發環境)可用、一卡車的Application Server和亂七八糟的framework,這代表了遇到各種奇怪的需求和問題絕大部分Java都可以handle,或許效能和過程不如人意,但終究可以到達。

另外一個能夠達到這個目標的是Microsoft的.NET平台,他同樣也有相同的保證,.NET很不簡單,他在極短的時間內達到Java花了約10年達到的目標,或許是.NET是後出的平台,他學習了很多Java跌跌撞撞才試出來的架構,他複製了Java所有該有的東西,甚至超越,.NET比Java更早就具備了許多Java 5才有的語言特性。

但是.NET有個致命缺點,他只有在Windows的平台下執行,而效能無法保證,我指的效能並非幾個thread的運算速度,而是當以千為單位的使用者在使用時,Windows是否能夠保證運行無誤?Java背後有JVM做為成功的基石,使得Java的Web應用程式在絕大部分的情況下能夠在各種作業系統上運行(這裡我強調Web,並非所有本機端運行的Java程式都能夠正確無誤),而在JVM的基石下,Java能夠在UNIX-like OS上運作,因此AIX、HP-UX、Solaris、Linux或是Windows都可以執行Java,而不是那麼保證可以執行.NET的系統。無巧不巧的,無論是cluster、GRID或是main frame大多在UNIX-like OS上運作,提供強大的運算效能與可靠性,這給了Java至今仍然不敗的地位。

但是我不得不說,Java已經脫離原來的初衷太多了,起初以「簡單」、「易學」為號召,使用類似C和C++的語法,將C和C++的開發者納入自己的懷抱,今天看來,Java也比C++好一點罷了,Java因為要解決(或者說符合)各種不同的軟體架構與設計模式,他有太多太多的衍生產品,Struts、Hibernate、Spring是我們常見的,還有Beehive、Page Flow、JSF、Tapestry...上百種framework或plug-in可以用,彼此之間緊密糾纏,光是版本相容問題就可以把人的頭腦搞到爆炸,光是了解Java 1.4和Java 5、Java 6之間的差異就已經讓人望之卻步,更不用說某些libary或是某些framework只能在特定的framework和JVM之間做搭配,這已經夠嚇人了,外加上一卡車的Application Server在這之間的相容性問題,而AP server自己也有版本分支的情況,這一段我自己寫出來也嚇到我自己,我是J2EE的初學者,這問題我到現在還是沒有搞定。

我剛開始在大學時是接觸J2SE,用Java寫寫幾個簡單的應用,接下來我接觸了一下J2ME就認定手持裝置不是我的歸宿,而Web Application則是PHP帶我入門,但這種拼湊出程式的寫作方是我並不喜愛,因此最後我進入了.NET。

我接觸.NET時是.NET 1.1,他code behind的開發方式我非常喜歡,我不用再去寫網頁上難以debug的JavaScript,所有的元件我都可以將之物件化然後在背後的程式控制,而且有許多除了微軟以外的公司提供各種豐富、炫麗的元件可用,這樣的技術只有Struts稍微類似,JSF想要模仿,做來做去還是.NET最好用,可惜他是.NET。

因此我還是必須接觸J2EE,還是得和上面提過的那些狗屁倒灶的問題奮戰,我還是得再看一堆文件、資料、書來搞懂這些東西怎麼運作,而最近很紅的Ruby on Rails呢?如果自己開間公司自己找了幾個programmer來開發自己公司的系統,或許可以玩玩,但是要取代Java還是有一段路要走。

留言

這個網誌中的熱門文章

使用Mac的Preview來合併兩張圖片

重拾起書本

Mac OS X 10.6.3 上的黑體-繁