創業,你選擇靜態還是動態語言?
每個人都在想為什么在這個世界大家都在選擇靜態語言,當你準備選擇一門動態語言的時候,卻又冒出了如此多的兄弟。我們通常考慮的是哪種語言是我熟練的那就拿它來做這項工作??傊@做不失為一種著手開干得好方法。現在還有別的什么影響你的選擇嗎?測試?開發速度?還是程序的健壯性?
動態型 VS 靜態型
動態語言是一種變量使用前不需要聲明的語言,如 Python、Ruby 和PHP,在動態語言中像下面這樣做是允許的。
- num = 10
某種意義上來說,這卻是一把雙刃劍,因為動態語言的類型檢查是在程序運行期間,代碼運行前沒有任何辦法找出 bug。我知道你可以寫測試,但是你并不能測試任何事情。這里有一個雖然不重要的例子。
- def get_first_problem(problems):
- for problem in problems:
- problam = problem + 1
- return problam
現在如果你被一些嚴重的電子樂干擾著,一個縮進的錯誤很輕易的就忽略了,代碼弄完了然后部署到生產環境中,于是bug就接踵而來了。
記住,在生產環境中你是***能消滅bug的人。
靜態語言 :使用前變量需要聲明,編譯的時候需要類型檢查,包括Java、C、C++在內的語言都是靜態語言。
- static int awesomeNumber;
- awesomeNumber = 10;
關于健壯性的增加和運行時錯誤機會的減少有很多的爭論,編譯器能捕獲一些在你編碼的時候產生的令人討厭的錯誤,方法的契約是嚴格的,不好的地方就是沉重的樣板代碼。
弱類型 VS 強類型
弱類型和強類型經常與動態語言和靜態語言混淆起來。弱類型語言會引起一些哲學性問題如數字2和字符”two“的相加,在弱類型語言中像這樣做是沒問題的。
- a = 2
- b = "2"
- concatenate(a, b) // Returns "22"
- add(a, b) // Returns 4
傳統的語言將嚴格限制各種事務的出現,如強類型語言中字符與整型相加將導致錯誤,如下:
- >>> a = 10
- >>> b = 'ten'
- >>> a + b
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- TypeError: unsupported operand type(s) for +: 'int' and 'str'
- >>>
總結:
無論你在哪抨擊這篇討論,聲明總比前者好,因為前者會導致一場語言的戰爭。
動態語言適合快速周期開發和原型設計。靜態語言更適合長期的開發周期,零碎的bug非常會付出非常高的代價(電話通信系統,航空交通系統)例如,如果一巨頭公司叫Moo Corp,花了幾百萬美元在做QA和測試,一bug以某種方式陷入在這個領域中,為了修復意味著另一個輪的測試。當你做在板凳上你要做的就是選擇一種簡潔的靜態語言,這項工作的難度就是得有人做”擠奶”的事。
測試、測試、還是測試
僅僅就一點點資料為了用來思考、啟動下一個項目,你從來就不知道哪些限制你可能放在你自己和你的團隊身上。
當你為你的項目選擇一門編程語言時,你考慮的因素有哪些呢?
英文原文:Sachin FromDev