MMDays 專欄有一篇名為「Java會步上 COBOL 的後塵嗎?」的文章,這樣的議題自然會牽涉到各種軟體技術的比較,並引起各派支持者熱烈的討論。然而,這是永遠吵不完的話題,恐怕只有當大多數人都看出某種語言/平台已經式微,爭論才會消音。

其中比較引起我注意的,是 Mr. Friday 認為相當精闢的一段評論,僅摘列其中一小段:

「當我們在談論一個程式語言時,我們必須要從整個軟體工程的角度來看。Java不只是一個語言。當你 看著Java時,你必須包含整個平台來看。看看這些為Java創造出來的架構與伺服器,它們的scalability是無限的!比起來.NET可就完全沒 辦法比。如果你只是要講語言的syntax,是的C#跟Java沒什麼差別。但是如果你要評判Java能帶給你的價值,你必須從頭到尾、從上到下,完整的 評估,而不只是”getThis()” 或 “setThat()”這些語法。」

看了這些評論,以及一些網友的回應之後,有一點小小的感想,藉此園地抒發。

在我學習撰寫程式,以及在過去幾年的時間裡,我也曾經多少批評、比較過 Java 和 .NET 平台的優缺點,衡量到底哪一種語言/平台才是最後沒有倒下去的一方(換言之,值得花時間去投資)。之所以會去比較,剛開始是自己在摸索,後來則是因為朋友 詢問到底該學哪一種技術,有時候則是老闆要求交評估報告。其實我已經很久沒有主動去想這個問題了,其中一個主要原因,是形勢比人強--整個環境(公司、專 案)需要你用什麼平台,你就得學什麼,選擇其實不多,去做就對了。

如果您點進來是想看到 Java 和 .NET 平台的詳細比較,最後得出哪一方獲勝的結論,或者 Java 會不會式微,那您可能要失望了。我只想針對我看到的一些網路上的評論,說些自己的想法。然而,對初學程式設計的人來說,選擇靠哪邊站似乎總是個問題,我 想,與其道聽塗說,舉棋不定,不妨自己動手去寫,自己實際感受一下,再與別人的說法交互印證。當然可能不是每個人都有這麼多時間做這些 survey 的工夫,但是對我來說,這是最好的辦法。至於網路上的評論,觀看時則要很小心仔細,否則容易被誤導、人云亦云。

過去幾年到現在,有幸在 J2EE 和 .NET 平台上開發軟體專案,心中自然也逐漸對兩個平台的優缺點有了一些主觀看法。不過,說自己接觸過 J2EE,總是有點心虛,因為我並沒有寫過 EJB。好吧,JSP 也算在 J2EE 範疇,可是如果這樣就說我開發過 J2EE 軟體系統,總覺得就好像在面試時,說自己開發過網頁程式,事實上只是用 FrontPage 編輯一個靜態網頁然後放上 Web server 而已。

回到 Mr. Friday 在專欄中提到的評論,該評論是由署名 systemanalyst 的網友回應 InfoWorld 上的 Java is becoming COBOL 文章的內容。以下摘列部分內容,並加上我的想法:

But if you take a look at it closer, .NET 1.1 was the best version ever since 2.0 was a failure and 3.0 is just too complicated (getting worst). MSDN is still difficult to navigate.

systemanalyst 認為,.NET 1.1 是 .NET framework 最好的版本,因為 .NET 2.0 是失敗的,而 3.0 太複雜,再加上 MSDN 還是很難瀏覽。看到這種論述,有種難以形容的驚訝:.NET 2.0 怎麼會是失敗的?從 .NET 1.x 用到現在的 2.0,不管是 framework 還是 IDE 開發工具(Visual Studio),都有明顯的進步,無論在功能、開發的方便性都更強大、好用很多。至少以我個人的使用經驗來看,我完全不會懷念或者想要回到 .NET 1.x(我在使用 Delphi 8 的時候就很懷念 Delphi 5,因為 Delphi 8 bug 多、IDE 速度慢、說明文件品質差;在使用 Borland C++Builder 時則很懷念 Borland C++ 3.1,因為 BCB 的編譯速度實在慢到讓人抓狂)。原作者就只說了他的看法,給一個結論,卻完全沒有理由(失敗在哪裡?)。也就是說,其結論並沒有任何充分的理由支持,這難 免讓人懷疑他是純粹以個人好惡來評斷,而非根據實際的使用經驗。MSDN 是很龐大沒錯,但是很難瀏覽?完全無法理解他指的是什麼。至於 .NET 3.0 是否太複雜或更糟,一樣也沒有提出任何有力的證據或實例。

Futureshop Canada is still ASP and seriously, they have not improved since last time I used their online shopping system in 2003. They servers cannot handle large scale of requests and the inconsistency of page response led me to somewhere I will never want to use it anymore.

在比較 Java 和 .NET 平台時,卻拿 ASP 的效能不彰來作為攻擊另一方的證據,既不對題,也欠公允。

Java is NOT just a language. When you look at Java, you have to take a look at the platform. Take a look at the frameworks and servers that are created for Java, they are giving you unlimited scalability! Comparing to .NET you are nowhere close to that. If you are talking about the language syntax itself, yeah C# is not much different than Java.

Java framework 提供了無限的延展性,而 .NET 卻連邊都沾不上?Java 的確不只是一種程式語言(如同 .NET),但此事實不能直接導出,也無法證明 Java framework 提供了無限的延展性,更別提對 .NET 的批評是否為真。無論這些說法是否為真,我比較相信:「物件導向提供了封裝、繼承、多型...這些優點,但是不保證你的程式具備這些優點。」(這句話好像 是 C++ 之父 Bjarne Stroustrup 在《The C++ Programming Language》中說的,年代有點久,無法確定自己是否記錯了)同樣的道理亦可套用在其他技術。

諸如此類的粗糙評論還很多,就不一一羅列。寫這種東西難免讓自己看起來像在護衛其中一方,其實這不打緊,每個人總有自己偏好。重要的是,在比較兩個 東西,或者批評另一方時,總得根據事實和證據來支持自己的論點,而不是光陳述自己的感覺,然後直接跳到結論。而當我們在看這類評論文章時,最好也能拋開成 見,小心檢視每一個評論是否有理由支持它(問自己:他這麼說的根據是什麼?)。然而,不管別人說得多有道理,總歸一句話,程式語言這種東西,還是自己試過 最準囉。