JAVA:你選的是一個夢還是真正效益?
軟體專案要採用什麼程式語言來進行系統程式的開發?早期,這樣的問題很難有標準答案,組合語言、Cobol、Fortran、C、Basic、VB、Delphi…等各式各樣的語言都有自己獨到之處,但自從JAVA問世之後,歷經十年後,現在儼然成了業界唯一個選擇。仔細探討這些選擇背後的訴求,不外乎兩個答案:跨平台與物件導向。其中又以物件導向的訴求居多。(大部份的系統開發好以後,很少真的做轉換平台的動作)
物件導向(OO)是許多軟體設計及開發者的理想,從OOA、OOD一直到OOP,利用物件導向程式設計的方法讓系統開發的過程中,不論是橫向或縱向都可以有很完善的分工,特別是在「物件」的實作上,軟體的虛擬世界與真實世界產生了親密的連接。這樣的做法除了讓系統的設計者與開發者很清楚地從實體世界的運作來設計、規劃並開發程式系統外,在眾多的優點中,最引人入勝的是利用繼承、多型…等特性,讓已開發好的系統物件的修改就很彈性,並且可被重複使用(reuse),以減少重覆開發的成本。
玩過JAVA後,就會不得不承認,JAVA確實是一個很強大的程式語言,特別是在物件導向的程式設計上,嚴謹的語法架構,讓系統物件可以很清楚明確地被定義出來,以方便系統的設計、規劃與開發,當然,減少重複的程式開發,增加已開發程式碼使用率的優點就更不在話下。不過,是不是採用了JAVA的程式語言來進行程式開發,所開發出來的程式就真的可以實踐OO(物件導向程式設計),並且享有物件導向程式設計的優點呢?
我嘗試著用兩段過去的經驗來回答這個問題:
第一個故事發生在.JAVA正在起飛到一定程度的年代,那時我正在一家公司與一群伙伴規劃、設計與撰寫一個產品-eHRMS。那個時候JAVA在企業的呼聲很高,幾乎是non-JAVA的產品,幾乎就被視為不入流,似乎不是JAVA就賣不出去,但我們並沒採用JAVA做為我們程式開發的語言,反而採用ASP 加 DCOM的開發架構來進行eHRMS的系統開發。不過,由於系統分析師、系統分析(SA)、系統設計(SD)都非常地的細心,沒有完整系統分析的功能模組就不會進到SA階段,即使進了SA階段,也有可能來來回回討論很多次。期間我們考慮了很多細部可能發生或不可能發生的問題,並詳細規劃出整個功能模組的架構及細部的function後,才會進入到系統程式撰寫的階段,將程式交付給工程師來進行程式的撰寫。這樣子寫出來的程式有一個好處,架構規劃得很清楚,因此function模組使用很有彈性,容易修改,程式碼本身重覆使用率也高。因此在整個系統完成大約40%的時候,就有點漸入佳境的感覺了。ASP是一個沒有那麼OO的程式語言,但某種程度上,你可以說我們彷彿已在享用OO的成果。
第二個故事發生在JAVA剛起飛的時候,當時的主管是個聰明人,一眼就看到JAVA的優勢,因此,在系統開發的程式語言上我們也選擇了JAVA來進行系統開發。JAVA的名聲太好用了,我們又馬上接下了一筆訂單,採用JAVA來進行系統開發。但專案時程很趕,我們幾乎沒有什麼時間進行太多分析,所以就採用瀑布式開發的方式來進行系統開發。美其名是在做瀑布式開發,其實是客戶需求到哪邊,我們就寫出哪樣的功能。整個系統寫下來,可以重複使用的部份少之又少,更慘的是,由於一開始缺乏架構性規劃,因此當需求變更時,系統程式就需要大幅度改寫。趕了又趕,好不容易把系統開發完成了,可是接下第二個專案時,這樣的夢魘又重新上演一次。
結論是?寫了幾個案子下來,真的搞不清楚JAVA物件導向的優點在哪,彷彿所有專案都得重新來過,只知道在JAVA嚴謹的定義下,光是物件、變數、方法(method)的宣告就搞得大家頭昏腦漲的。但很諷刺的是,由於我們是用JAVA開發,所以只要我們宣稱我們的系統是符合物件導向程式設計,客戶也就因此買單了。
林林總總說那麼多,只是想讓大家清楚地想一想:軟體專案選擇了用JAVA,我們就一定會享受到JAVA這個程式語言所帶來的好處嗎?以OO 為例,Java本身是很OO的,但這並不代表JAVA所開發出來的系統程式一定就會很OO,真正決定所開發出來的系統是不是符合OO的規範並讓大家真的享受OO所帶來的好處,還是要取決於開發團隊本身有沒有真的了解該程式本身的特性,並透過嚴謹的系統規劃來實現它。
在上述的第一家公司中,他們並沒有選擇當下最紅的JAVA,反而選擇了他們所熟悉的ASP與DCOM,來進行系統開發。其實他們反而清楚了掌握語言本身的特性,並且善用這些特性來規劃他們的系統,因此,他們利用了一個大家並不會直覺認為有OO特性的程式語言,成功地建構出一個好的系統軟體開發環境,讓參與者享用了OO所帶來的好處。
而相反的,選擇用JAVA的那一家公司,一方面因為不了解而語言本身的特性,也一方面缺乏妥善的規劃。所他們不但沒有善用了這個語言的長處,相反地,他們反而被這個語言的特性所限制,而變得綁手綁腳。如此一來,再好的語言也很難發揮,也不用談享受它所帶來的好處了。
談到這裏,希望大家不要誤會我是來反JAVA的(相反地,在完善地規劃的情況下,我會選擇採用JAVA來做開發),每種語言有他自己獨特的地方,有優點,但也往往有缺點,有時候,語言跟語言間其實不需要特別比來比去,應該依當時情況選擇合適的程式語言來進行開發。就像飛機跟直升機一樣,同樣都是飛行工具,但在不同的處境下我們會有不同的選擇,在災難救援的時候我們會選擇直升機,而在趕速度的時候我們多半選擇飛機。至於Java是不是一個好的語言,我當然還是會說它是一個好的程式語言,只是,當我們選擇了一個語言,應該要問的是,我們是不是真的很了解這一個語言?是不是真的很清楚自己為了什麼選這樣的語言來進行開發?有沒有發揮它的長處?
軟體專案為何選擇JAVA? 協力廠商也給你很多的答案。但往往這些協力廠商也是一味地用原廠告訴他們的話再跟企業進行一次行銷,而骨子裏做出來的東西可能完全沒有OO可言。
我們真的享受到Java所帶來的好處嗎?或者我們只是追求一個「夢想」?


0 Comments:
Post a Comment
<< Home