搜尋
首頁後端開發Python教學一位國外老程式設計師的反思:C、Python、Java 不可兼得,專心學習好程式語言就好!

一位国外老程序员的反思: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刪除
Python:自動化,腳本和任務管理Python:自動化,腳本和任務管理Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

Python和時間:充分利用您的學習時間Python和時間:充分利用您的學習時間Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python:遊戲,Guis等Python:遊戲,Guis等Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python vs.C:申請和用例Python vs.C:申請和用例Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時的Python計劃:一種現實的方法2小時的Python計劃:一種現實的方法Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python:探索其主要應用程序Python:探索其主要應用程序Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

您可以在2小時內學到多少python?您可以在2小時內學到多少python?Apr 09, 2025 pm 04:33 PM

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。