🍄聊聊程式語言——散文篇
聊聊程式語言——散文篇
前言
延續上一篇的小說對話篇,這次我又請 AI 用有名的散文風格呈現我對程式語言的理解。 你能猜到是誰嗎? 他的特色是:集作家、賽車手、導演等多重身分於一身,以尖銳犀利的時事評論、幽默獨特的風格聞名。
武俠篇連結:聊聊程式語言——武俠篇
小說對話篇連結:聊聊程式語言——小說對話篇
《關於那些我們寫過的程式碼,和再也回不去的指針》
這個世界總是喜歡給人分類。就像他們喜歡把人分成成功者和失敗者,把車分成超跑和買菜車一樣,程式語言這個圈子,也被劃分成了三六九等。
今天 讓我聊聊這些語言。 這其實是一件很殘酷的事情。因為聊語言,就像是聊以前愛過的姑娘,或者是聊那些年我們開過的破車。每一種語言背後,都藏著一個時代的妥協,和我們無處安放的青春。
我們從最底層的慾望開始說起。
速度與激情的代價:編譯與直譯
很多人問我,直譯語言(Interpreted)和編譯語言(Compiled)到底有什麼區別?
這就像是在問我,坐公車和開賽車有什麼區別。
Python 就是那輛公車。你上了車,投了幣(寫了程式碼),司機(直譯器)就會慢悠悠地載你去目的地。你不需要知道引擎是怎麼工作的,也不需要擔心輪胎有沒有氣。你甚至可以在車上吃火鍋、唱著歌(動態型別,隨便寫)。它的優點是舒服,是從容,是你在處理大數據和 AI 時,那種「雖然我跑得慢,但我拉得多」的厚重感。但如果你想開著公車去下賽道,去跑紐柏林,那大家只會覺得你腦子壞了。因為它有 GIL(全域直譯器鎖),這就像是公車上規定一次只能有一個人下車,急死你。
而 C++,它是那輛沒有空調、沒有 ABS、甚至連安全帶都可能斷掉的一級方程式賽車。
在 3A 大作的領域,比如《黑神話:悟空》,為什麼他們非要用 C++?為什麼不用那些時髦的語言?因為在那個世界裡,慢一毫秒就是罪過。C++ 允許你直接把手伸進發動機裡去撥弄齒輪(手動管理記憶體)。它沒有 Garbage Collection(垃圾回收),沒有那個在你身後幫你擦屁股的保姆。你 new 了一個對象,你就得負責把它 delete 掉。如果你忘了,記憶體洩漏就會像車禍現場一樣慘烈。
這種語言是給瘋子和天才準備的。它危險,但它快得讓人迷醉。
中產階級的妥協:C# 與 .NET
然後是 C#,這是我的老本行。
如果說 C++ 是亡命天涯的賽車手,C# 就是一個穿著西裝、開著特斯拉的中產階級精英。
它依然很快,有強大的引擎(JIT 編譯),但它加裝了所有能加的安全氣囊。它有垃圾回收,有強型別,有漂亮的語法糖。微軟給了你一個溫室,告訴你:「嘿,別去管那些底層的髒活累活了,專注在你的業務邏輯上吧。」
這是一種成熟的選擇。我們年輕的時候都想開 C++ 去撞牆,覺得那樣才叫搖滾;後來我們年紀大了(雖然我們都拒絕承認),發現有一輛能自動駕駛、內裝豪華的 C# 停在門口,其實挺好的。它體面,高效,適合構建那些龐大的、複雜的、需要養家糊口的企業級應用。
前端的變裝舞會:JavaScript 與 TypeScript
再來談談前端。這是一個光怪陸離的地方。
JavaScript (JS) 就像是那個住在貧民窟但天賦異稟的小混混。它出身低微(當年只花了十天就被設計出來),沒有規矩(弱型別),隨時隨地都能變身。你以為它是個數字,下一秒它就變成了字串。它在瀏覽器裡橫衝直撞,後來 Ryan Dahl 給了它一把槍(Node.js),它突然就能殺進伺服器端了。
Node.js 的出現是一個意外,也是一個奇蹟。它證明了單執行緒(Single Thread)只要手速夠快(Event Loop),也能處理成千上萬的併發。它不適合做數學題(CPU 密集型),但它適合送快遞(I/O 密集型)。
但是,混混終究是要長大的。
於是有了 TypeScript (TS)。
TypeScript 就是穿上了西裝的 JavaScript。它是 Anders Hejlsberg(沒錯,就是 C# 的親爹)對前端世界的一次「招安」。它給那個無法無天的 JS 加上了約束(型別系統)。
這看起來很美好,但本質上是一場巨大的「變裝舞會」。因為瀏覽器根本看不懂 TypeScript。你在開發時寫得道貌岸然,編譯(Transpile)之後,它脫下西裝,還是那個光著膀子的 JavaScript。
但我們都需要這層西裝。因為當專案大到一定程度,沒有這層約束,我們都會在變數型別的混亂中發瘋。這就是成長的代價,我們把自由換成了安全。
那些在陰影裡修車的人:Bash 與 PowerShell
最後,還有那些不常被提起的角色。
Bash 是那個滿身油污、脾氣古怪的老機師。他住在 Linux 的地下室裡,說話從來不超過三個字。你想讓他幹活,得用一串像咒語一樣的符號(awk, sed, grep)。他看不起圖形介面,覺得那是給小孩子玩的。如果你想在伺服器上活下去,你得學會看他的臉色。
PowerShell 則是微軟派來的現代工程師。他拿著平板電腦,講究物件導向(Object-Oriented)。他試圖告訴 Bash:「嘿,我們可以優雅一點,不要總是傳遞一堆爛字串,我們傳遞物件好不好?」
Bash 通常會吐一口痰,然後繼續用 Pipe 傳遞他的字串。
寫在最後
其實,把這些語言擺在一起看,你會發現這就是一個社會的縮影。
C++ 是孤獨的英雄,揹負著性能的極限;Python 是親民的哲學家,連接著 AI 的未來;JavaScript 是靈活的遊俠,佔領了每一個瀏覽器窗口;而 C# 是穩重的建設者,支撐著龐大的帝國。
我們這些寫程式的人,就像是賽車手。我們在不同的賽道上,換著不同的車。有時候是為了快,有時候是為了穩,有時候僅僅是因為,老闆只給了這輛車的鑰匙。
這世界沒有最好的語言,只有最適合當下那段旅程的工具。
只要你的程式碼還在跑,只要那個滑鼠箭頭還在閃爍,你就依然是那個少年。不管你用的是哪種語言,當你在深夜按下 Enter 鍵,看著螢幕上亮起綠色的 "Build Succeeded" 時,那種微不足道的快樂,是相通的。
就這樣吧。我要去寫我的 bug 了。
三國鼎立:語言特性與領域對照表
| 領域 | TypeScript (JS) | C# (.NET) | Python |
|---|---|---|---|
| Web 前端 | 👑 統治者 (React, Angular) | ⚔️ 挑戰者 (Blazor WASM) | ❌ 幾乎不可用 |
| Web 後端 | ⚡ 高併發 IO (Node.js) | 🛡️ 企業級標準 (ASP.NET Core) | 🚀 快速開發 / AI API (FastAPI) |
| 遊戲開發 | 🎮 Web 小遊戲 (Phaser) | 🎮 主流商業遊戲 (Unity) | 🛠️ 資產管線 / 腳本 (Blender) |
| 桌面應用 | 📱 跨平台 UI (Electron) | 💻 Windows 原生 (WPF/WinUI) | 🔧 小工具 (PyQt / Tkinter) |
| AI / 數據 | 📊 視覺化 (D3.js) | 🧠 追趕中 (ML.NET) | 👑 絕對霸主 (PyTorch, Pandas) |
| 執行速度 | 快 (JIT 優化) | 極快 (編譯 + JIT) | 慢 (直譯 + GIL) |
終極比較表:開發語言 vs. 腳本語言
| 特性 | C# (.NET) | Python | TypeScript (Node) | PowerShell | Bash |
|---|---|---|---|---|---|
| 主要定位 | 應用程式開發 (App, Web, Game) | AI & 數據分析 (膠水語言) | 前端 & 高併發 I/O (Web Fullstack) | 系統自動化 (Windows) (DevOps, CI/CD) | 系統自動化 (Linux) (Server Ops) |
| 執行方式 | 編譯 + JIT (需 Build 成 .dll/.exe) | 直譯 (逐行執行) | JIT (V8 Engine) | 直譯 (逐行執行) | 直譯 (逐行執行) |
| 型別系統 | 強型別 (Static) 編譯時檢查錯誤 | 動態型別 執行時才知死活 | 強型別 (Static) (轉譯後變 JS) | 動態型別 (.NET Object) 本質是 .NET 物件 | 無型別 (Untyped) 全部都是字串 |
| 資料傳遞 | 物件 / 記憶體參照 | 物件參照 | JSON / 物件 | .NET 物件 (Pipeline) | 純文字串 (Pipeline) |
| 執行速度 | 🚀 極快 | 🐢 慢 | 🐇 快 | 🐢 慢 (啟動重) | ⚡ 快 (啟動輕) |
| 跨平台 | ✅ 優秀 (.NET 6+) | ✅ 優秀 | ✅ 優秀 | ✅ 可用 (PowerShell Core) | ✅ 優秀 (WSL/Linux) |
| 你的優勢 | ⭐⭐⭐⭐⭐ (主場) | ⭐⭐⭐ (語法簡單) | ⭐⭐⭐⭐ (有型別) | ⭐⭐⭐⭐⭐ (這是 .NET 的親戚!) | ⭐⭐ (語法古怪) |
- first edition time: 2026-02-27
- last edit time: 2026-02-27