程式者的胡言亂語

pageicon 星期四 一月 03, 2008

關於”Java即將變成另一個COBOL”這篇文章

這幾天Mr. Friday針對InfoWorld上一篇名為” Java is becoming the new Cobol”的文章,提出了他的看法,其中包括了一些他覺得值得討論的地方。對他的觀點,我有些不同的論點。(基本上,寫這種主題,我是不知道Mr. Friday不知道有沒有引起戰火的心理準備就是了XD

在此之前我先聲明,雖然我現在最常使用的程式語言是Java,但我並不是個Java mania。如果說到Java mania的話,相信系統供應商更有資格啊。這讓我想到,我生平接手別人的第一個專案就是十年前系統供應商為了到美國陪叫母唸書時,殘留下來用C++寫成的DDEDynamic Data eXchange)的程式庫。經過了十年,為什麼系統供應商會從C++ programmer搖身一變成為Java mania,實在令人費解。

Java會不會成為另一個COBOL,說實在的這一點也不重要。江山代有才人出,一代新語言換舊語言,這語言的更迭原本就如同江山易主一般,是再也平常不過的事了。還記得大概二十年前,我們初次在Apple II上學習程式語言時,老師教的可是BASIC啊,這個時候還有誰在用當時那種要自己打行號的BASIC呢?在物件導向觀念開始流行之際,C++不也曾獨領風騷,人人爭相搶用?就算有一天Java過時了,那也沒有什麼,因為那代表著還有更好、更適合我們使用的程式語言誕生,不是嗎?

回歸正傳,Mr. Friday提出了幾個議題,分別是(1Java版本發行速度太快(2Third party程式庫的版本及相容性問題(3)記憶吃得兇(4程式架構愈來愈複雜

對於Java版本發行速度太快這個議題,看起來似乎是這麼一回事,不過,因為我一直不是個版本昇級狂,直到最近,我才陸續的把我的一些projectsJDK 1.4昇級到1.6,這中間還跳過了1.5。關於這個問題,�����不像��些必須苦苦追趕的大廠們去苦苦追趕。事實上,本來就沒有人規定你要去苦苦追趕。開始開發一個產品時,在事前的技術解決方案研擬之際,就會確定自己所用開發工具的版本。一個產品開發,或許少則半年,或許更長。這中間你所用的開發工具本來就會發生改版的情況,但這不意謂著你得跟著它們做昇級。在產品開發前所挑選的技術解決方案,也不會因為用到的工具昇級了,舊的工具就一夕之間變的不能用了吧?舊的工具還是可以用,而且符合原先設定的需求吧。這麼幾年下來,我手上的產品所使用的JDK版本,從JDK 1.3JDK 1.6都有,而且都還持續在維護著。我實在不能明白,JDK的快速昇級對開發產品會產生什麼衝擊?它不出新版你也是不能用,它出了新版你不去用,意思不是一樣嗎?這問題究竟是出在那兒呢?

前一個問題和「Third party程式庫的版本及相容性問題」這個問題其實是相近的。你沒有必要苦苦追趕Third party程式庫的新版本。通常,在產品開發之前,你就會決定你的技術解決方案,確定你所用的程式庫可以滿足你的需求。在產品開發中途決定更換所用程式庫的major version或到minor version是滿嚴重的事。大多數會需要選定新版的程式庫,多半是發生在選定開發一個新產品的時候。這麼一來,又怎麼會有「程式老跳訊息告訴你這個jar檔版本太舊不是他要的」的問題呢?這很明顯是開發時組態管理(configuration management)的問題吧?為什麼同一個產品的同一個版本,會持續的更換它所用到的third party程式庫的版本呢?這是很不合理的事。既然組態管理決定了對齊到某一個版本上,就不會輕易的再更動,要變更所用third party程式庫的版本,就等於是產品要做一次新的發行,重新再對一次各組件的版本。但這件事情的發生,中間要做很多工作啊。我感覺會提出這個議題真的是頗為怪異,因為這意謂著並沒有在對自己的產品做管理,反而怪罪到third party程式庫進展的太快。這理由實在詭異到極點。決定要昇級程式庫本來就是很嚴肅的一件事,任何一個好的程式庫的設計,絕對不會在變更一個小版本號時,連介面都更改了,因為也不會有所謂相容性的問題。決定自己的產品要更換大版本時,本來就要認真以對,用什麼程式語言都是一樣的,你需要做很多技術決策,包括檢視介面相容性,做相關的測試,確定沒有改版的副作用之類的。總之,這個議題我個人認為有滿大的爭議的。

至於「記憶吃得兇」這件事,Mr. Friday舉的例子是一些大型的Java IDE,這些IDE很吃記憶體沒錯(所以我也都不用:p),但邏輯上這不代表所有的Java program都吃記憶體啊。我就知道某位友人寫的server程式,必須同時線上serve上萬個使用者的連線,max heap size也才384MB。我寫的C#程式,倒是常常被嫌吃記憶體。這個論點,也是頗有值得再討論的地方。

最後是「程式架構愈來愈複雜」。我真的要說,我個人同樣對這件事沒有什麼太強烈的感覺。原因是,我不會選用複雜度勝過自己能夠勝任的framework,當你覺得複雜度太高時,就代表不是它想要提供的功能太過於通用到超過你的需求,就是你的能力還不足以駕馭這麼高複雜度的東西。

每個人對於選用framework的方式不同,想法也不同,就好比funP上的derekhsu留言���

當然寫Java 程式可以不用到Struts、也不用Hibernate,因為還有其他的選擇可以用,使用Framework是為了把複雜的事情簡化(如果是簡單的東西,用Framework就會把簡單的事情複雜化,所以終究還是要看規模)。但是如過要作複雜的商務程式,使用Framework仍然是必須的,因為他能讓程式把更容易被切割與整合,尤其是在多人開發的環境之下。

但只要開發一個稍具規模的系統,Framework是必要的,而不管這個 Framework是用現成的或是自己設計的。我會喜歡用現成的,尤其是在Java上面,已經有許多成熟的Framework可以使用,我懂,別人也懂,大家都在一定的規範之下,未來也好維護的多,如果覺得哪裡不好,自己修改原始碼也沒有關係,Spring就像是一個簡化版的EJB,許多原本用在EJB上面的東西,可以在Spring上很簡單的被調用。

至於我呢?如果現成的framework太複雜不符合我的需求,我就只會使用自製、light weightframework。我從來不覺得使用這些東西,會使我的程式架構複雜到那邊去。我曾經有一個顧問工作,是指導某公司的IT人員,從不會Java到已經利用Java搭配我給他們的自製framework,完成了一個詢報價含BOM表成本估算的系統。這中間需要的skill很多,除了Java語言本身、Web開發的基本觀念、JavaScriptDOM的操作、甚至到AJAX的使用、PDF報表的產生等等。他們只不過花了一年的時間,就從不懂Java到可以利用Java把系統開發出來。我完全不提strutsHibernate。因為我知道身為初階使用者的他們,一來能力不適合在短時間內自由自在的操控這些玩意兒,二來,其實這些東西想要涵蓋的範圍,也超乎他們的需求。其實,大多數人的需求都很單純,只是像人的慾望一樣,被過度擴張了。什麼樣的人玩什麼樣的鳥,這些高複雜度的framework就留給需要他們,而且有能力操控他們的人。這問題就和之前提到的幾個都很類似。有東西擺在那邊,並不是東西本身存在的錯,你只要不去想它們就沒事。我不懂的是,明明覺得它們複雜不好用,但又想要去用的心態是怎麼一回事。基本上,使用Java並不強迫你要使用它們呀?就好比有新版的library出來,不代表你一定要更新到最新版呀?

採用任何技術方案,都還是要回歸到你自己的需求及能力。我回顧這幾個Mr. Friday提出的問題,除了一些是軟體開發的管理面問題外,其餘的還有慾望層次的問題-追趕某種東西,追趕新版本的Java SDK、追趕新版本的third party,追趕有的沒有的framework,這些追趕的心理就和資訊焦慮一樣,不必然需要。重新審視自己的需求,擬定適合自己��方案,才是解決問題的根源。有時你的需求其實很簡單,就像我們那light weightframework也不錯用啊,起碼完全不會寫Java程式的毒菇木也拿去寫了diggirl,不是嗎?

Blogged with Flock

迴響:

sorry,無意挑剔,
只是你的字全擠在一起,
讓我看的好累,
所以不斷的跳行看,
看完了三遍還是沒看的很懂

由...發表 210.69.214.134 on 一月 04, 2008 at 09:54 上午 CST #

哈, 沒想到打開迴響的第一篇留言是這個. 基本上我是直接貼上純文字,不知道為什麼Flock會把它排成這樣,下回我會留意一下,把段落和段落之間的行距調大一點,問題應該出在這邊吧XD

由...發表 Qing on 一月 04, 2008 at 10:13 上午 CST #

可以的話,不知道可不可以套一下CSS,這樣應該可以讓情況好一些。

由...發表 免費羽毛 on 一月 04, 2008 at 10:38 上午 CST #

真的,字太多了,沒有分段落,看的眼睛有點痛。

還好有Diggirl可以看一下

由...發表 晴樹 on 一月 04, 2008 at 04:38 下午 CST #

小小調了一下,應該好了一點了吧
我發現Flock對於paragraph的設定有點不是很好

由...發表 Qing on 一月 04, 2008 at 11:08 下午 CST #

設一下line-height就好了吧?

由...發表 獨孤木 on 一月 05, 2008 at 12:45 上午 CST #

哇好強喔!獨孤木會css耶,真強!

由...發表 Qing on 一月 05, 2008 at 02:12 上午 CST #

十年前究竟是誰陪誰, 這世上只有三個人知道
一個是去工作的那位, 一個是去念書的那位,
還有一個我不能說 .....

由...發表 cjin on 一月 05, 2008 at 05:34 下午 CST #

呵, 請問是什麼樣的自製framework :P
有沒有開放試玩

由...發表 qrtt1 on 二月 25, 2008 at 11:43 上午 CST #

發表迴響:
  • HTML 語法: 關閉
把對母乳媽媽的感謝與支持傳出去

« 三月 2010
星期日星期一星期二星期三星期四星期五星期六
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
   
       
今日

Search this blog

Links

Weblog menu

Today's referrers

Feeds