相容性與維護性
最近系統遇到相容性的問題,兩個不同的版本並行在線上運作,產生諸多無法預期的問題,像是效能問題、未知的 HTTP 404、503 … 等。問題錯綜複雜,加上歷史包袱的堆疊,加上線上隨時的亂流,形成一種無法控制的風暴。
這讓我思考到幾件事情:
第一個是 Java 在開發語言的位置。Java 為什麼會存活到現在?大概 2005 年就有人說 Java 即將 COBOL 化,大概準備躺平了。不過似乎不是如此,從 Githut, TIOBE 上的排名來看,Java 依舊在前幾名。我想原因有幾個:
- 社群資源豐富,生態成熟
- API 具備標準,各種工具完整
- 學習資源多
- 應用廣泛
- 向下相容、可維護性高
最後一點是重點,程式語言發展到後來,能否持續被接受,『高可維護性』是其中的關鍵。
Cubie Messenger 是台灣開發的 MI, Server side 從 Java7 升級到 Java8 幾乎是無痛, 當然他有 TDD 配合. 這是個很好的例子: http://www.ithome.com.tw/news/90500
針對可維護性另一個例子就是 python。python 3.0 做了大膽的改版,加入很多新的功能與特色,但是無法向下相容當時的 2.6,所以當時把一些 3.x 的功能放到 2.7。約 2010 年我買了一本 python 的書,書本講的是 3.x 的內容。可是,到現在為止,幾乎所有系統的內建的 python 都還是 2.6, 2.7,而我熟悉的也是 2.6/2.7 的語法,生態圈使用 3.0 的還真的不多 (因該也有,我不曉得而已)。到現在,2.7 依舊在維護。
Javascript 這幾年因為 node.js 加 F2E 的帶動,鹹魚翻身。社群生態也蓬勃發展,但是比較好的是,自從 RoR 紅了之後,他類似 linux 套件管理的工具概念,被社群廣泛接受,所以每個生態圈幾乎都有自己的套件管理,像是:
- node.js 的 npm, nvm
- RoR 的 rvm, gem
- python 的 pip
- OS X 系統套件管理: homebrew, MacPorts
- java 社群歷史悠久 maven 以及新一代的 gradle
- linux 老牌的 apt-get, yum
因為這些有套件管理概念,相容性似乎會比較好一點 (?),至少吸收了很多概念,不只是語言上的,也包含方法、流程的部分。
另外一種相容性的例子,就是:iPhone / Mac OS X。這兩大產品線的作業系統相容性我想大家不會有意見。相對於 Android 的相容性,大家是有目共睹的。。。 這張圖 說明了一切 XDD
還有一個例子是被併購、已走入歷史的 ThinkPad,也是以相容性佳著名,後來 IBM 賣掉個人電腦事業部之後,整個就往下走了。
相容與維護會是企業大型系統發展到後來,成長期階段能否順利擴大規模的關鍵因素,如果僅止於眼前的專案的利益,無法將視野放遠,那麼成長瓶頸是指數上升,整個公司將原地踏步。
BTW,其中 node.js 使用的高效能 V8 Engine,作者是 Lars Bak - 前 Sun 員工, Java HotSpot 團隊的技術總監,負責開發高效能的 JVM。 V8 engine 傳承了 JVM 的精神與效能。