為什麼會有這麼多的程式語言?
寫在前面的話:偶爾聽到有人為哪門程式語言孰優孰劣爭辯;有時也聽到有人為了選擇用哪門程式語言而困惑。有的人可能會告訴我們:“不要去糾結哪門哪門程式語言了,有那個時間還不如去學習一下那門語言。”可是仍然覺得這樣的回覆無法讓人內心平靜,為了能夠從心底裡不去糾結這些問題,我認為應該理解一個基本的問題:為什麼會有這麼多的程式語言?恰好最近看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)這也得出一個這樣的結論:那些應用廣泛的程式語言,可能很趨於更少的改變。(如果一門程式語言一直在不停的變來變去,幹嘛還要去學它呢)。於是我們也理解了這樣一個現象:對於中國這麼大的國家,任何政策的微小變化,影響可能也是巨大的。
所以,與其對一門已有程式語言進行改進,不如重新發明一門程式語言來的清爽。
而開發一門新的程式語言,為了使用者能夠更快更好的學習,往往也會模仿已有語言的一些特性,所以我們看到的程式語言,長得往往都很像。
一旦我們理解了為什麼有這麼多的程式語言,我們也不會再糾結於這麼多的程式語言的選擇,進而能夠專心的根據不同的應用場景,選擇合適的程式語言;剛開始學習不同的程式語言的時候,也許會有些混亂,可是學的多了過了混亂期,也就清楚了。
更重要的一點:有時間再去學學基礎的東西,例如編譯原理、組合語言、計算機系統、演算法等等知識,這些東西學的時候看似無用,一旦學明白了,後面再學習新的東西,會發現自己學的速度飛快。
路漫漫其修遠兮,吾將上下而求索!
相關文章
- 程式語言這麼多,為什麼建議選擇Python?Python
- 為什麼Julia語言這麼棒?
- 沒想到吧!Google 排名第一的程式語言,為什麼會這麼火?Go
- 這麼多程式語言,為何Python深受喜歡?Python
- IT程式設計師必知!TCP/IP為什麼會有這麼多的致命漏洞?程式設計師TCP
- 為什麼中國人沒有自己的程式語言?
- Python這麼火,它與其他程式語言有什麼區別?Python
- 學習Python有什麼好處?Python語言為什麼這麼受歡迎?Python
- 何為程式語言?為什麼要學C語言?C語言
- 常見的程式語言python怎麼樣?各程式語言有什麼區別?Python
- 為什麼那麼多人要學習go語言?go語言有什麼特點?Go
- 程式設計師為什麼討厭這些語言程式設計師
- 為什麼 Go 語言能在中國這麼火?Go
- 六星教育:Python為什麼這麼火?未來它將會被什麼語言取代?Python
- 為什麼程式設計師會有最喜歡與最討厭的程式語言?(earthly)程式設計師
- 什麼是Go語言?Go語言有什麼特點?Go
- 為什麼自制指令碼語言是程式語言的最高境界?指令碼
- 【譯】你的程式語言能做到這個嗎?(為什麼要學函數語言程式設計)函數程式設計
- “Go語言”有什麼用途?有什麼優勢?Go
- 為什麼“敏捷”會浪費這麼多時間? - Reddit敏捷
- 中文程式語言——易語言,到底是用來幹什麼的?易語言值得學習嗎?易語言的優勢有什麼?
- 多語言ASR?沒有什麼聽不懂,15種語言我全都要
- python語言與其他語言有什麼不同?Python
- Python和其他流行的程式語言有什麼區別?Python
- python有什麼特性?為什麼這麼火?Python
- MySQL:為什麼lsof會看到這麼多臨時檔案MySql
- Python是什麼語言?有什麼優劣勢?Python
- Java語言有什麼特點Java
- Python能幹什麼?為什麼會這麼火?Python
- Python是什麼型別語言?為何Python這麼多人學習?Python型別
- 跑批為什麼會這麼難?
- 用python語言寫程式有什麼好用的編輯器?Python
- 為什麼機器學習會選擇Python語言?機器學習Python
- 為什麼程式設計初學者會選擇 Python 作為入門語言?程式設計Python
- 為什麼 Go 語言沒有三元運算子Go
- Python為什麼會成為人工智慧開發的首選語言?Python人工智慧
- 好你個C語言,原來還有這麼多副面孔!C語言
- Python語言怎麼樣?為什麼學Python?Python