序言
哈嘍兄弟萌,很多鐵鐵在剛開始學編程的時候,總是避免不了看到某些嘩眾取寵的博主發的視頻或者文章,說建議同時學好幾門語言,一嘗試發現,同時學好幾個編程語言確實沒有壓力,
但是,這只是在初級階段而言,一開始簡單的東西,當然再多學兩種你也不會有壓力,但是越到后面,越發吃力,最后可能什么也沒學好,
那些嘩眾取寵的博主,可能自己也沒學好,或者正在學,亦或者壓根就沒學過,為了流量瞎嗶嗶,
下面讓我們來看看真正的大佬是怎么說的吧!

大多數程式員在其職業生涯中,接觸到的編程語言不止一種,但主要掌握并運用的多數只有一門,
那么在數量繁多、適用領域各不相同的編程語言中,哪一門更適合你來學習呢?
“老程式員”Eleanor Berger 總結了這些年來他對各種編程語言的看法及其發展歷程,接下來就讓我們一睹他心目中的最佳編程語言是什么,

最近,著名游戲程式員、id Software 創始人之一John Carmack在采訪中表示,程式員應該專心學好一門編程語言,這倒讓我感到有點驚訝,雖然我個人非常贊同這條建議,但在如今的程式員圈子里,這種觀點是有爭議的,
我猜,我就是大家所說的“老程式員”了,我的歲數不小了,一生都在從事編程作業,而且從步入社會之后就一直在從事這項專業作業,有時,我覺得自己是一名編程語言愛好者,親眼目睹了許多編程語言的發展,回顧過去,這是一段激動人心的歷史,我們會不由自主地得出一個(錯誤的)結論:多掌握幾種編程語言總沒壞處,編程語言的歷史發展非常精彩,但如今的發展形勢相對比較平和,
在本文中我想回顧一下曾經的歷史,總結經驗教訓,并看一看究竟哪種編程語言才是最好的標準化語言,

史前階段(50年代~80年代)
隨著計算硬體和計算機科學作為一門學科逐漸興起,計算機編程(除了處理器本身的指令之外)也開始緩慢地發展,在最初的幾十年里,編程語言主要是學術界的研究物件,還俘獲了一小部分研究人員,程式員的選擇很有限,主要取決于領域,
業務編程使用COBOL,科學編程使用Fortran,還有一些其他語言通常用于特定領域、研究或硬體,
對于大多數程式員來說,整個編程生涯或在很長一段時間里,只需專心學習一門編程語言,雖然有人對編程語言的設計感興趣,但彼時該領域還很稚嫩,盡管出現了一些很有趣的創新,但對于如何才能設計一種好的編程語言,人們還沒有很好的理解,
專業化(80年代~90年代)
隨著計算機硬體數量的增加以及用途的日益多樣化,編程語言的數量也開始增長,編程語言的選擇變成了一個流行的話題,人們開始對編程語言進行分門別類,我們可以通程序式員的種類以及他們渴望達到的專業水平,判斷他們會選擇哪種語言,個人計算機編程愛好者使用越來越流行的BASIC,這是一種很荒誕、很原始的編程語言,卻被廣泛使用并成為了一代程式員(包括我自己)的引路人,Pascal引入了結構化編程,并產生了巨大的影響(Pascal與Turbo-Pascal 和 Delphi 建立了一個蓬勃發展的社區,但最終消失了),
起源于UNIX的C成為了系統編程語言,C++成為了C的后繼者,并借鑒了Smalltalk的面向物件編程,成為了專業應用程式和服務開發人員的語言,最終 Visual Basic(與BASIC毫無關系)普及了“可視化編程”,滿足了應用程式開發的需求(隨著 Windows 的出現而迅速增長),并成為大眾的首選,但人們普遍認為,VB程式員是領域專家兼職編程作業,而C和C++才是“專業”的編程人員,
這個階段,人們仍然沒有很好地理解編程語言的設計,導致許多流行的編程語言很多方面的設計都不太理想,C語言簡單而強大,但很難熟練掌握,有可能出錯的地方太多,C++的意圖雖好,但最終的設計不佳,而且使用感不好,Visual Basic既有趣又簡單,但有點兒戲,在當時的技術條件下,優雅與效率都不達標,Smalltalk 和 LISP 都是有趣而優雅的語言,但由于捆綁到了專門的硬體和昂貴的工具,導致最后失勢,
成熟(90年代~2000年)
后來,互聯網興起,互聯網對編程語言的影響究竟有多大也許未可知,但無疑這是一個重大因素,很久以前,編程語言是一個稀有之物,通常誕生于研究實驗室和大型商業公司;但如今似乎任何一個人都可以開發出自己的編程語言,曾有一段時間,PERL成為了流行的通用語言,涵蓋了從系統管理到 Web 編程的方方面面,后來,Python從科學研究語言變成了簡單易學的通用語言,盡管最初發展緩慢,但最終席卷了整個世界,據傳,Netscape 的 Brandan Eich僅用了幾天時間就開發出了JavaScript(作為一種功能十分有限的瀏覽器擴展語言),這不僅證明Eich是一個天才,也證明那個時期人們對編程語言的設計有了很好的理解,
這一時期出現了許多其他的編程語言,其中最有名的是Java,這門語言本身并沒有特別之處,但它提供的JVM是一個通用的運行時環境,實作了“撰寫一次,到處運行”,也就是說該語言十分通用,不受特定硬體、作業系統、或目標環境的限制,嚴格來講,早期的JVM并沒有什么值得炫耀的,但它開創了語言運行時及部署選項日益成熟的時代,
迅速發展(2000年~2010年)
自JVM以后,編程語言就開始朝著一個有趣的方向迅速發展,源自Self語言(Smalltalk的后繼者,雖然優秀但非常失敗)的即時編譯器(JIT)得到了更深入的研究,從而誕生了Java的HotSpot,而微軟為了對抗Java推出了.NET CLR,.NET則更進一步,將 CLR(Common Language Runtime,公共語言運行時)作為了多語言的通用運行時,而不僅僅是C#,事后看來,這是一個分水嶺:編程語言的選擇變得無關緊要,這可能不是微軟做出這個選擇的主要原因(當時他們仍在努力繼續支持流行度非常高的Visual Basic,還有C#),再加上那段時間微軟的封閉式許可,最終CLR未能成為最受歡迎的運行環境,但在千禧年之后的第一個十年中,編程語言的數量越來越多,而且無處不在,
另一方面,程式員的數量也出現了爆炸式增長,隨著軟體的需求快速增長,以及工具和知識的普及,全世界數百萬人都變成了程式員,這些程式員也是人類,他們渴望強烈的群體認同,就像普通人對體育運動團體有著強烈而非理性的看法一樣,程式員也開始在編程語言的選擇問題上站隊,許多程式員迫不得已選擇某種新興、獨特、特殊的編程語言,例如,有人聲稱函式式編程才是王道、Ruby比Python好、Scala將徹底改變資料科學、不選Clojure是你的損失……至此,編程語言從線性發展進入了混亂的達爾文優勝劣汰時期,
超標準化(2010年至今)
原以為,這個時期的人們會意識到某些編程語言過于瘋狂,無法持續發展,然而,實際情況并非如此,相反,情況出現了意想不到的轉變,在“云”計算時代,許多應用程式和服務的部署跨互聯網上的大量分布式節點,使用哪種編程語言似乎已無關緊要,程式員都在開發互相交流的獨立組件,又有什么必要糾結編程語言呢?組件之間并不需要知道彼此是用哪種語言撰寫的,如果程式員喜歡用X語言撰寫組件,那么就用這種語言好了,誰在乎呀,
在不同機器上運行的組件也是如此,隨著Docker的發布,容器得到了普及,無論是在一臺機器上運行的應用程式,還是通過編排軟體在機器集群上協作運行的軟體,都可以使用相同的范例輕松管理,
如今人們仍在開發新的編程語言,其中不乏前途無量且備受期待的語言,有些是特定領域的(移動應用程式使用的Swift、Kotlin 和 Dart,以太坊智能合約使用的Solidity),而有些則比較通用,但每種語言都得益于這幾十年來積累的經驗教訓(面向云編程的Go,面向系統編程的Rust,以及JavaScript的超集TypeScript,等等),
與此同時,編程世界達到了一個新的成熟度,我們不再追逐每一種新趨勢,采用每一種新語言,我們都成長了,
專心學好一門編程語言
毫無疑問,有些編程語言確實更為出色,而有些編程語言則更適合處理某些特定的用例,任何從事過編程一段時間的人都清楚,學習一門新語言一點也不難,大多數程式員只需一個下午,就可以輕松學習一門新語言的基礎知識,使用幾天后就可以多或少地提高作業效率,新手程式員可以從任何一門主流編程語言開始學習,并將學到的編程知識輕松地應用到其他語言中,
然而,頻繁變更編程語言并非好事,原因主要有兩個,首先,學習編程語言有點像學下棋,你可以快速學習規則,但這并不意味著你可以戰勝經驗豐富的玩家,你需要學習策略,而這需要時間和練習,這是一個由最佳實踐、陷阱、優化技術,以及庫、工具和社區組成的生態系統,其次,編程雖簡單,卻容易出錯,即使擁有常見的編程經驗和最好的工具,將想法轉換為計算機代碼也不是一件直覺行為,無論程式員建立了怎樣的直覺,也必須經歷反復使用、即時反饋和糾錯的回圈,每次更換編程語言,你都需要付出代價,所以,根據我的經驗,編程語言的選擇很重要,但是一旦做出了選擇,從長遠來看,就應該堅持下去,
如何選擇編程語言
時至2022年,我們在選擇編程語言時,需要考慮以下幾點,
首先,最關鍵的考慮因素是語言的適用范圍,如果是特定的領域,必須使用一些特定于領域的語言,則最具普遍適用性的語言是首選,值得慶幸的是,自從Java提出“撰寫一次,到處運行”以來,運行時和部署便不再是問題,成本和許可也不再是制約因素,時至今日,所有編程語言、運行時以及各種工具基本都可以免費獲取,如果某種語言不適合某個特殊的場合,只能說它的流行度不夠,沒有普及到所有人;要么是因為一些基本因素,導致該語言確實不適合該任務,
流行度很重要,我們應該選擇擁有強大的社區、豐富的資訊來源、大量其他程式員可供合作或雇傭的語言,任何不受歡迎的語言都不值得選擇,如果遇到特殊情況,則選擇會更困難,沒有任何一種語言能夠適用于所有場景,但在理想情況下,通用的主流語言應該足以應對大多數場景,
最后,我們選擇的編程語言應該優于大多數其他語言,即使在2022年,仍有一些糟糕的編程語言,難以學習和使用,很容易讓程式員陷入困境,
鑒于上面的陳述,我認為實際上我們并沒有太多選擇,下面,就讓我們來看看這些最佳編程語言,
最佳編程語言
JavaScript / TypeScript
編程語言界的JavaScript就像人類交流時使用的英語一樣,它是最流行、最通用的編程語言,適用于許多不同的場景(瀏覽器/前端、系統/后端、作為擴展語言嵌入到許多環境中),JavaScript的運行時(V8 / Node / Deno)非常高效,擁有許多出色的工具和龐大的社區,
TypeScript是JavaScript的超集,引入了強型別和標準工具,正在迅速發展成為JS編程的默認選擇,
Rust
Rust擁有C/C++的所有功能,更易于使用,而且也沒有太多陷阱,Rust的社區和生態系統非常強大且在不斷發展,工具也很好用,如果你需要的功能Rust都提供了,那它絕對是不二之選,以前只能使用C或C++的場合,如今也可以選擇Rust,此外,Rust還在建立自己的WebAssembly通用語言(WebAssembly可以說是終極版的“撰寫一次,到處運行”的運行時),
強有力的競爭對手
Python
我使用Python已經超過20年了,可惜時至2022年,Python依然算不上真正的通用編程語言,原因之一是,Python仍然非常低效,很多注重性能的場合都無法采用Python,還有一個原因是,它未能進入主流的面向用戶環境,比如網路瀏覽器或手機,盡管如此,Python仍不失為一種出色的編程語言,而且在資料工程/資料科學/機器學習中占據了重要位置,所以如果你從事這些領域的作業,那么Python絕對是一門值得了解和熱愛的語言,就目前的情況來看,Python很可能會作為資料科學的通用語言繼續發展下去,但可能無法突破這個領域,
Go
Go是一種非常適合“云”編程的語言,Go語言優雅、易于學習和使用,擁有出色的社區、生態系統和工具,它被廣泛應用于云原生領域的核心產品,因此它會長期發展下去,不幸的是,Go并沒有普遍的適用性,基本無法用于互聯網服務器之外的環境,此外,由于Go設計上的選擇,它在C/C++世界中表現不佳,Go固然好,但如果必須做出選擇,凡是Go能實作的功能Rust都可以實作,隨著時間的推移,Go有可能會被主流系統編程語言取代,
C#/Java
C#及其生態系統非常出色,你可以用它實作很多功能,Java的各個方面都比不上C#,所以我不理解為什么有人會喜歡它,但Java確實很流行,C#的應用很廣泛,不僅是一種系統和“商業”語言,現在更是延伸到了移動應用程式和瀏覽器,強大的運行時,偉大的生態系統,但是,除非你需要C#的一些量身定制的運行時和工具的功能,否則在短期內C#很難與JavaScript和Rust競爭,
C/C++
根據林迪效應,C和C++在未來幾十年內將繼續流行下去,如果你已是這兩種語言的專家,肯定不愁找作業,如果有這方面的需求,則花時間學習二者也是不錯的選擇,否則,選擇Rust更合適,
榮譽獎
Swift / Kotlin / Dart
這幾種語言在特定領域占有一席之地,如果需要移動UI編程,則這些是不錯的選擇,但JavaScript的適用性更普遍,而且也同樣適用于移動開發,因此我們更應該選擇JavaScript,
LISP(Racket / Clojure)
LISP很特別,即使日常作業沒有這種需求,也應該學習一下,Racket 是最先進的、非常復雜的語言(實際上它是一種語言構建工具包),據傳,Clojure的功能很強大,因為它的目標是JVM,可以使用 Java 庫,但我不清楚這個賣點有多大作用,
Haskell / F# / Scala
函式式語言很重要,在某些情況下,它們是更優的選擇,Haskell是函式式編程的代表,F#具有更好的普遍適用性,因為它的運行平臺是CLR,并且可以使用 .NET 庫,Scala不是純粹的函式式,但非常通用,并且在 JVM 上運行,
Julia / R / MATLAB
Julia非常適合數學領域,R和MATLAB都有各自擅長的特定場合,不過,在Python主導的資料工程領域,這些編程語言恐怕很難幸存下來,
PowerShell
如果你從事shell編程,那么PowerShell是迄今為止最好的選擇,它適用于所有作業系統,所以我們沒有理由使用任何其他 shell,PowerShell也算是一種通用編程語言,但實際上在非系統管理之外,沒有人使用它,
遲暮之年
PHP / 紅寶石 / PERL
這些語言也曾有過輝煌的歲月,主要是作為網路“后端”語言,無論你如何看待這些語言,如今都不應該再在它們身上白花力氣,它們都在走向滅亡,
Visual Basic / VBA
VB 改變了世界,但如今卻被淘汰出局了,無論是作為通用語言還是作為對其他程式的擴展,在遙遠的過去可以用VB實作的功能,如今都可以用其他現代語言更出色地實作,
總結
我喜歡編程語言,而且永遠對新語言充滿了好奇,但是,就目前而言,TypeScript是我心目中的C位,而在需要強大的功能和低級訪問權限的情況下,Rust居第二,我相信,2022年幾乎所有程式員都與我有類似的看法,
最后推薦一套Python爬蟲教程給大家:代碼總是學完就忘記?100個爬蟲實戰專案!讓你沉迷學習丨學以致用丨下一個Python大神就是你!
好了,鐵鐵們,今天的分享就到這里,思古白~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/502581.html
標籤:其他
