每日最新頭條.有趣資訊

一圖看懂編程語言遷移模式:終點站是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

獲得更多的PTT最新消息
按讚加入粉絲團