寫在前面的話:偶爾聽到有人為哪門編程語言孰優孰劣爭辯;有時也聽到有人為了選擇用哪門編程語言而困惑。有的人可能會告訴我們:“不要去糾結哪門哪門編程語言了,有那個時間還不如去學習一下那門語言。”可是仍然覺得這樣的回復無法讓人內心平靜,為了能夠從心底里不去糾結這些問題,我認為應該理解一個基本的問題:為什么會有這么多的編程語言?恰好最近看coursera里面Stanford University的professor Alex Aiken講解的Compilers一課里講到這樣一個問題:The Economy of Programming Language,里面的觀點還是很有啟發意義。
====正文開始=====
不同的cpu有着不同的指令集,這些指令集都是二進制的0和1;后來有了匯編語言,可以認為是二進制指令的助記符表示;再后來有了高級編程語言,它們通過編譯器又變回了匯編語言或者機器語言;緊接着一個又一個的高級編程語言誕生了,為什么會有這么多編程語言呢?
一個簡單的解釋可以是:不同的領域有不同的需求!
對於科學和工程計算領域,要大量的處理數據的計算,如矩陣的計算,於是FORTRAN語言,就很好的適應了這一點;對於數據需要能夠很好的查詢、修改等操作,可能SQL語言就是一個不錯的語言;對於一些底層操作的需求,c和c++可能就很好的能夠適應這一點……
於是為了適應不同的應用場景,一個一個的編程語言誕生了。
可是又有了另外一個問題:那為什么不去改造一門語言,讓它的功能無所不包,而是不停的創造新的編程語言呢?
一個很好的解釋可以是:創造一門新的編程語言的成本有時候會比改進一門編程語言的成本更低!這里的成本,有一個基本假設:Programmer training is the dominant cost for a programming language。
(1)創造一門編程語言,有時候只是需要幾個人去寫寫編譯器,再考慮一下其他的需求即可;一旦一門新的編程語言誕生了,這門編程語言對於編程人員來說,是一門新的語言,這門語言的語法、API等等都是全新的,編程人員不會有其他的負擔;
(2)而如果改造一門編程語言,需要曾經使用該語言的編程人員重新去適應新的改進,有時為了適應新的應用場景,可能的改變是巨大的。可以試想一下,如果將c++進行更新以適應web網頁開發,必然需要改進很多;同樣對一門語言的重大更新,還可能造成其他的影響。
(3)這也得出一個這樣的結論:那些應用廣泛的編程語言,可能很趨於更少的改變。(如果一門編程語言一直在不停的變來變去,干嘛還要去學它呢)。於是我們也理解了這樣一個現象:對於中國這么大的國家,任何政策的微小變化,影響可能也是巨大的。
所以,與其對一門已有編程語言進行改進,不如重新發明一門編程語言來的清爽。
而開發一門新的編程語言,為了使用者能夠更快更好的學習,往往也會模仿已有語言的一些特性,所以我們看到的編程語言,長得往往都很像。
一旦我們理解了為什么有這么多的編程語言,我們也不會再糾結於這么多的編程語言的選擇,進而能夠專心的根據不同的應用場景,選擇合適的編程語言;剛開始學習不同的編程語言的時候,也許會有些混亂,可是學的多了過了混亂期,也就清楚了。
更重要的一點:有時間再去學學基礎的東西,例如編譯原理、匯編語言、計算機系統、算法等等知識,這些東西學的時候看似無用,一旦學明白了,后面再學習新的東西,會發現自己學的速度飛快。
路漫漫其修遠兮,吾將上下而求索!
(完)
文檔信息
- 版權聲明:自由轉載-非商用-非衍生-保持署名(創意共享3.0許可證)
- 本文為原創文章,歡迎轉載,后續本博客會不斷更新,因此請保留該文檔信息。
- 本文地址:http://www.cnblogs.com/wuguanglei/p/4302813.html