語言火不火主要表現的是市場的需求,和語言本身好不好是有相關性,沒有因果性
比如Python,我們七八年前就開始用了,當時有如醍醐灌頂,發現程式設計語言竟也可以如此優雅(原來一直用C++)。而福士覺得開始火的這幾年,Python本身確沒有『突然』增加什麼更迷人的東西。
對於我來說,Python在很多年前我第一次開啟ipython時就火了,同好不多,但個頂個的能扯上一翻。而現在動輒看到『python程式員』寫的代碼:
sum = 0for i in range(len(num_list)): sum += num_list[i]
我就有種看到douban變成約炮網站的悲哀
從理想上看,Python和C++是十分相似的,它們都想做萬金油。
C++是學術性的,大牛們都指著靠它揚名立萬,設計哲學是『什麼都想要』,首先要相容C要快,其次是別的語言有的咱都要有,別的語言沒有的咱也要有。但是一方面C語言本身也不是很完善(比如標頭檔這樣的粗暴的機制),另一方面為了運行時的爽快把新功能的髒活累活全往預先處理、編譯上扔,導致C++的晦澀、艱深。用C++寫代碼有點像是用文言文寫公文,逼格滿滿,文采飛揚,需要耗費大量的精力在內容以外的地方。而看文言文公文(C++代碼)更是痛苦,首先你得熟悉各種反人類的文法(傳值/傳址/move語義、預先處理、函數指標……),通曉曆代典故(effective C++, ……)
Python的想法不一樣,Python的核心是簡潔直接清晰,Python認為最好的方式只有一種,它也只呈現那最好的一面。Python的文法本身就是一種虛擬碼的最佳實務,而且這個『虛擬碼』還是可以啟動並執行。這造就了Python較低的使用門檻和極高的編程效率。用Python開發只要『有事兒說事兒』就好。ruby on rails最火的那幾年,有人問guido叔(Python作者)怎麼看,guido說的大概是:Python不需要殺手級應用,因為如果是這樣的話,Python在其它方面的作用就被忽略了。
回到話題本身,為什麼Python會顯得越來越火?
python最大的問題在於效能。效能問題其實是在設計時最容易被誤解的部分。C++以『接近C語言的效能』橫行多年。隨著物理硬體效能的顯著提升以及軟體複雜性的顯著提升,人們開始對效能有了更正確的看法。
首先,有些時候效能並不重要。IO密集型的業務大部分時間都在等待IO,節省不到1ms讓開發量增加幾倍似乎不是很划得來。
其次,有些時候程式員的效率比機器的效率更重要。對於很多複雜的邏輯性功能,使用更加清晰的語言比晦澀的語言給程式減少的負擔,可以大大增強軟體的品質。(尤其是公司給的待遇招不到知乎上的大牛程式員的時候)
於是,Python/Ruby/Java開始崛起了。用Python的『inside battery』就可以做到過去需要反覆造輪子、天天加班還做得不是那麼好的東西。我在看Python的原始碼時,突然有一種感覺:Python底層的原始碼其實可以理解為C語言的一些常用功能的庫(如hashmap實現的dict),Python進程就是載入了這些庫然後讀取設定檔(Python代碼)執行相應的邏輯。相同的功能,Python進行了一次轉義,肯定會比直接用C實現要慢,但你不一定能這麼快的寫出這樣運行比Python快的C代碼。(當然,知乎上的大牛還是除外)
於是,類似Python這樣的語言們解放了程式員的時間,程式員們寂寞難耐的夜晚可以有了更多的產出,一個一個的項目建立起來了,社區建立起來了,遲滯的市場也開始有感知了。
即便這樣,Python還有會心一擊:我也可以不那麼慢。Python可以十分方便地和C代碼融合到一起。Python和C的組合徹底解決了後顧之憂:先用Python快速開發快速搭建產品原型,然後找出效能瓶頸有針對性的效能最佳化。所謂好鋼用在刀刃上,節約時間,節省成本,減少風險,提高程式員的生活品質又有什麼不對呢?
泛泛而談,匿之.