上述的故事,在我日後的職場生涯偶爾想起。從這個故事中得到的啟發是:
「選擇正確的 technology stack 有時候對於軟體公司的影響,不輸給選擇好的員工。」
選擇 technology stack ,這個題目還是有點困難,先從「選擇 programming language 」這個題目開始吧。如果是小公司、小團隊、該如何選擇合適的 programming language 呢?從我的觀點的話,我會認為,應該優先考慮四件事:
- productivity
- learning curve
- core library & third party library
- performance
Language | Statements ratio[35] | Lines ratio[36] |
---|---|---|
C | 1 | 1 |
C++ | 2.5 | 1 |
Fortran | 2 | 0.8 |
Java | 2.5 | 1.5 |
Perl | 6 | 6 |
Smalltalk | 6 | 6.25 |
Python | 6 | 6.5 |
第二件事是「學習曲線」。學習曲線陡峭的程式語言,也就意味著該語言的使用者會變少。對公司的立場來說,也就意謂著不容易找合適的工程師。舉個例子,就我自己學習 clojure 語言 (Lisp 的方言) 的經驗來說,確實不那麼容易學,因為很多觀念都不存在於過去的經驗。從 TIOBE 來看的話, Lisp 語言曾經一度是排行前 20 的程式語言,應該是因為學習曲線等因素,始終是小眾的語言。
第三件事是「函式庫支援」。這個要素其實跟「生產力」也類似。畢竟,如果主要選用的程式語言,沒有合適的函式庫支援時,往往軟體就是要透過使用多種程式語言來完成,又增加了複雜度和維護成本。
最後一件事才是「效能」。對於效能一事,我本來一直有一種誤解,覺得「程式語言之間」會有效能的差異。然而,一回我查了網路的文章,才發覺這個來自經驗的想法不太正確。程式語言和它的效能是脫勾的。效能是跟語言的實作 (implementation) 才有關系。所以,要探討 Java 語言的執行效能,重點要去探討 JVM 的實作。而一些流行的 scripting language 為何要特別設計出可以編譯到 JVM 的版本?重點是在於,做出可以在 JVM 執行的版本,比起直接將該語言做成 native machine code 省事太多,同時,JVM 又已經「夠快」了,有著幾乎不輸給 native machine code 的效能。這邊特別提一下,很多人也跟我一樣,對 JVM 有著誤解,以為 JVM 很慢,跟一般的 scripting language 所用的 engine 或是 VM 差不多的效能。這個也是來自經驗的誤解。 JVM 只是啟動比較慢,而這一點是有技巧可以克服的。