當前位置:
首頁 > 科技 > 一圖看懂編程語言遷移模式:終點站是Python、Go、JS

一圖看懂編程語言遷移模式:終點站是Python、Go、JS

新智元報道

來源:apenwarr

編輯:元子

【新智元導讀】有著20年編程經驗的資深程序員,以自己多年來的經歷,總結出程序員的編程語言切換規律,做了一個主流編程語言的進階流程圖,展示不同編程語言之間的承接關係、程序員選擇編程語言的方向和路徑。

鐵打的程序員,流水的編程語言。時代在發展,編程語言也與時俱進,不斷有新的、更好或者更時髦的語言出現,程序員也會或主動、或被動去學習一門新的、」更好「的編程語言。

Tailscale_io聯合創始人Avery Pennarun,一位有著20年編程經驗的資深程序員,以自己多年來的經歷,總結出程序員的編程語言切換規律,做了一個主流編程語言的進階流程圖,展示不同編程語言之間的承接關係、程序員選擇編程語言的方向和路徑。

Avery這個人,很像是小說、人物報道里的典型程序員,有點偏執,喜歡搞怪。曾經做過7年的Debian開發,或許這段經歷能夠說明一些問題。因為Avery資歷深涉獵廣,我們也能夠從這篇文章中,了解到編程語言發展過程的一些有趣的歷史傳承。

註:本文觀點帶有強烈的主觀傾向,新智元的讀者中,可能有人會持有不同意見,贊同也好反對也好,歡迎大家留言提出自己的看法!

我們看到,圖中總共有4條主線,分別是:

低級語言,即彙編和C那一支

商用或者教學用語言,即BASIC那一支

專為數學和科學開發的語言,即R那一支

腳本、膠水語言,即Shell那一支

或許有人會說這張圖裡缺少了HTML、CSS、Haskell和Lisp,這不重要,因為Avery並沒打算展開去講它們。

Avery提到,最初的時候,4類語言有一個比較明確的邊界。低階語言編程的程序員使用C,彙編或者Turbo Pascal,商用大型程序員使用VB(當然那個時候的「大型」,和現在的「大型」完全不在一個量級),數值計算人員使用Fortran,R或MATLAB,膠水編程使用Shell或Perl。

程序員不會用Perl來寫操作系統,也不會用VB寫大數相乘。現代語言則模糊了相互之間的邊界,很多R寫的程序,也可以用Python實現。語言之間的轉換主要在於挑選不同的風格。

低級編程語言

先來看看傳說中的彙編。用彙編寫程序是相當困難的,但即使在人工智慧蓬勃發展的今天,某些場景下彙編仍然是不可替代的最佳編程語言,而且,所有編譯語言的代碼都會被轉成彙編或者機器語言。

從彙編開始出現了3個分支,在風格上有明顯的差異,不過我們先看C這一支。Pascal特點是有"begin...end";而C是用{}。花括弧的風格影響了後世很多語言,雖然討厭花括弧的程序員群體也不在少數。

而且C有一種魔力,一旦你開始使用就很容易形成一種習慣,不管最終的效率高低,你總會想用C去實現一切。而且C也是為數不多的能合理實現所有上述四類編程問題的語言之一,而且速度也還可以。

C再往下,是C 和Python 2。C 雖然名字看起來好像是C的進階,然而風格卻大不相同。Avery吐槽」用C 是因為很多做商用大型程序開發的程序員別無選擇「。

而膠水編程就好辦多了,直接上手Python 2。雖然Python很慢,同時代的Perl也有不少簇擁。但作為一名C語言選手,Avery認為Perl的語法風格只能用怪誕來形容。相比之下,更接近C的Python顯然是更好的選擇。

不需要花費太多精力就能很快適應Python的語法;在Python里調用C函數的成本比Java以及其他語言低多了!唯一的缺點就是慢,但你可以調用C模塊來緩解啊。

後來Java出現了,大批C和C 程序員迅速投入Java懷抱,以至於很長一段時間Java都霸佔著編程語言No 1的位子。

Java的缺點是運行時很慢,然而相比C 超慢的編譯速度、讓人頭大的header文件、超弱的跨平台性…這點缺點不算什麼了。

Go剛出現的時候,有人稱其為C 和Java的終結者,結果並沒有。Avery說,想當年Go最輝煌的那陣子是因為Python 2程序員發現它跑的比Python快,RAM佔用比Python少,寫代碼的難度相當。

雖然現在認為Go是一門「系統」語言,但Avery認為本質上,Go其實還是一個膠水兒語言。

商用編程語言

BASIC是基於讓「新手能夠輕鬆掌握」的目的開發的,但是學院派發現有BASIC編程經驗的學生,很難教好他編程,這實在是有點諷刺。當然他們也沒選擇C,而是選擇了更適合教學用的Pascal。

後來微軟將BASIC轉變成Visual Basic,這可能是JS出現之前最受歡迎的編程語言了。選擇我們仍然在Excel中使用VB,只不過它改名叫宏。

後來Turbo Pascal的作者創建了一門新的語言Delphi,口碑很不錯,再後來還開發了C#。相反,VB.NET則可以說是非常失敗了。

Avery還不忘給出很有殺傷力一擊:我其實很想在VB後面再加一個箭頭,但不好意思,我的確不知道這幫程序員後來去哪兒了。可能轉行做網頁了?或者去搞Excel的宏?

膠水編程語言

Avery說,膠水語言的鼻祖要數Unix的Shell。Unix的設計哲學倡導一次只做一件事,並將其做到極致。這些功能單一、但是極致好用的小模塊,通過pipeline鏈接起來,就能合力完成一件複雜的「大任務」,頗有點螞蟻群的味道。

理想雖然美好,無奈敗給了現實,這樣看成完美的小程序模塊很難實現。於是有了awk,一個和C語法相似的解釋語言。

接下來有了Perl,Perl對互聯網的興起起到了非常大的推動作用,同時也藉助互聯網Perl收穫了超贊的口碑。人們使用Perl來運行web的CGI腳本,接受HTML請求,然後進行解析。

你知道Perl最讓人印象深刻的是什麼嗎?讓人眼花繚亂的標點符號!

當然,你之砒霜可能是他人之良藥。有人覺得Perl語法醜陋(比如Avery),那麼他可能之後會選擇使用Python;相反,有人愛死Perl的風格,那麼可能會選擇Ruby。

所以,如果你還在用Perl寫Web CGI腳本,那麼請繼續吧;或者,你可以考慮一下「全世界最好的語言」PHP。

前端編程語言

JavaScript是一門編程語言,現在應該已經是一個不爭的事實了。然而,Avery指出,正因為JS是一個大雜燴,把HTML、CSS、面向對象、函數式編程、動態語言、JIT等等所有涉及到HTML請求的概念,統統囊括進來,導致這個語言特別

而且你能相信一門在20多年前,僅僅花了10天時間就做出來的語言嗎?顯然它存在著很大的缺陷和一些無法修復的嚴重錯誤。

我們回頭再看這張圖,注意一下右下角Python 3和JS:

你會看到Python和JS形成了一個循環。為什麼會這兩個會出現糾纏反覆呢?Avery說因為用JS久了容易變得不正常,需要通過Python治療一下。(hmmmm...)

接下來的TypeScript,可能因為作者是Delphi的開發者,Avery對TypeScript給予了很高的評價。

在node.js出現之前,JS被認為就是一門前端語言。而現在成為了一門前端 後端 命令行的一條龍語言。

最後,Avery也沒放過Python 3。他說在Python 3中編寫系統程序,你會發現自己經常搞亂unicode轉換,甚至連文件名都會搞亂!

善有善報,惡有惡報。

所有,親愛的新智元讀者們,你們怎麼看呢?請留言表達你們對Avery這個路線圖的態度。

參考鏈接:

https://apenwarr.ca/log/20190318


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 新智元 的精彩文章:

GitHub超2.7萬星,最全Python入門演算法來了
獵戶星空CSO王兵出席上交會:三大AI優勢助力服務機器人產業升級

TAG:新智元 |