關於Java嘅迷思
一般上咗年紀嘅人對 Java 嘅認知,大概停留於 90 年代末嘅 Java Applet。當時嘅 Java Applet 通常啟動得好慢,又核核突突,唔係太受歡迎,所以後來慢慢被 Javascript 淘汰。(順帶一提,Javascript 同 Java 就好似鯨魚同魚咁樣,係兩樣幾唔同嘅嘢嚟,唔好撈亂呀。)
好多喺 90 年代末至 21 世紀初接觸電腦科技嘅人,對 Java 嘅觀感特別差。當時嘅 Java 行得好慢,功能又唔齊,setup 又麻鬼煩,真係見到都唔開胃。
Java 嘅問題不止於此。Java 係出名「又長又唚」嘅程式語言。人哋寫兩三行就搞掂嘅嘢,喺 Java 可能要寫幾十行。好多程式員對呢樣嘢非常反感。如果有得揀,好多人會選擇用返啲冇咁長氣嘅語言。
不過,雖然 Java 咁多問題,但係呢十幾年以嚟,Java 喺後端 (backend) 技術嘅發展非常蓬勃。點解呢? Java 嘅啟動速度仍然係有啲慢[1],但喺後端伺服器環境裡面,大部份嘅 process 都係一直長開唔會停嘅,所以啟動時間冇太大關係。而 JIT [2] 技術進步咗,電腦又快咗,今時今日 Java 喺大部份情況下已經唔算慢。
Java 而家喺伺服器嘅後端大行其道[4],其中一個原因,其實係贏在起跑線。雖然 Java 語言本身非常唔討好,但佢有一個非常龐大嘅 standard library,好多常用嘅功能已經包埋俾你,唔需要程式員自己寫,省時省力。呢個完全係「父幹」嘅問題,Java 係由一間大企業[3]控制嘅語言,有錢就可以請多啲人將個 standard library 寫得勁啲。今時今日,好多新嘅語言都有好可觀嘅 standard library,但 Java 應該係第一個附送咁大規模嘅 standard library 嘅語言嚟。
由於贏在起跑線嘅關係,就算 Java 個語言本身(曾經)幾令人討厭,好多企業為咗節省開發資源都照樣用 Java,貪佢有好多現成嘅功能,唔使再寫多次嘛。正值呢個時期開源軟件興起,好多人繼續為 Java 寫開源軟件,Java 就有更多嘅現成軟件可以用,揀用 Java 嘅企業又再節省更多開發嘅資源。呢樣嘢先至係 Java 最煞食之處,呢種優勢係大部份其他程式語言難以突破。[5]
所以好多時,大企業做大型嘅軟件項目,Java 會係數一數二嘅選項。唔係貪佢有咩特別,純粹係慳人力、慳錢。相反,小型軟件項目就比較少會用 Java,因為⋯⋯ Java 真係(曾經)幾乞人憎囉。就算近年 Java 追返某些功能,好多開發人員都覺得 Java 太「悶」,不及其他新潮語言咁「好玩」。
至於某套軟件系統應該用咩語言或平台去寫,真係好睇個系統用嚟做乜、有冇咩特別要求。呢類問題屬於「軟件架構 (software architecture)」範疇,呢啲決定對項目嘅 budget、對系統嘅性能、對系統嘅長期維修等等都有深遠嘅影響,所以通常留返俾有咁上下軟件開發經驗嘅人去拍板。 雖然我本人好討厭排資論輩,但呢類決定的確係需要由資深嘅人去做。好多經驗比較淺嘅人,揀技術平台會傾向投入太多個人情感,亦會傾向用啲比較「型」嘅技術,忽略好多長遠問題。
至於近日民航處爆出嚟嘅花生,大家睇到佢哋嘅系統問題多多,但除非真係睇晒佢哋嘅系統架構、規格、要求等等嘅文件,否則真係好難評論實情「錯」在何處。未得到足夠資料就 jump to conclusions 嘅人,絕對未夠資格去設計任何大型軟件項目嘅架構。
我哋行內流行講 Murphy’s Law,大意就係「任何可以出事嘅嘢最終都會出事」,即係話,就算有樣嘢 99% 肯定,剩低嗰 1% 都唔可以忽視。不過正所謂「隔行如隔山」,做軟件工程需要嚴謹,但係做網絡評論員(或者而家興叫做「KOL」)卻係的確唔需要咁認真。我之前都講過,反正媒體公信力失效,倒不如開放空間俾大家鳩噏,唔好太認真。所以,如果用軟件工程要求嘅嚴謹尺度去批判網絡 KOL 的確唔係好公平,反正香港有言論自由,大家都有自由發表自己意見,何必認真呢?
— –
- [1] 講緊 JVM 嘅 startup time
- [2] Just-in-time compilation
- [3] 以前係 Sun Microsystems,而家係 Oracle。順便講句,Java 成套嘢正到有兩間龍頭科技公司嘗試抄佢,引發兩三單世紀大官司,不過呢啲嘢離題唔講了。
- [4] Android 算唔算係用 Java ? 呵呵
- [5] 近年 Javascript, Ruby, Python 等等嘅 community 嘅 open source libraries 開始越嚟越多,可能超越咗 Java,但 Java 始終係一個相對保守同安全嘅選擇。另外大型項目 type checking 好很重要,不過篇幅所限唔深入講了。
(原文於 2017 年 6 月發佈,略有修輯)