一位國外老程式設計師的反思:C、Python、Java 不可兼得,專心學習好程式語言就好!

王林
發布: 2023-04-30 15:01:06
轉載
1027 人瀏覽過

一位国外老程序员的反思:C、Python、Java 不可兼得,专心学好一门编程语言就行!

最近,著名遊戲程式設計師、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年幾乎所有程式設計師都與我有類似的看法。

以上是一位國外老程式設計師的反思:C、Python、Java 不可兼得,專心學習好程式語言就好!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!