B01 · 跨語言共通概念 詳細 ROADMAP

計畫文件,不會被 Quartz 渲染。 回主 roadmap → backend/ROADMAP.md


章節目標

這章刻意不綁語言。講後端工程師換語言時不會變的概念——變數 / 錯誤處理 / 並行模型 / 記憶體管理 / 型別系統 / IO 模型。本章建立「跨語言心智模型」,讓讀者切換 Go / Python / JS / Java 時知道不同語法背後解的是同一類問題


🌱 基本介紹

#主題SlugStage大綱
01後端跨語言共通概念是什麼01-what-is-language-common-concept🌱為什麼後端要有「跨語言」視角;同一個問題在不同語言的形狀

❓ 為什麼需要

#主題SlugStage大綱
02為什麼後端一定要懂多種語言02-why-multi-language🌱單一語言舒適圈的風險、招募現實、跨語言讓你更看清抽象、debug OSS 要能讀多語言 source
03為什麼跨語言概念比語法重要03-why-concepts-over-syntax🌱語法是皮毛、變化快;並行 / IO / 錯誤 / 記憶體 幾十年沒變;學概念比背語法 ROI 高
04為什麼要分「共通概念」跟「語言特定」04-why-separate-concept-from-language🌱本章(B01)vs backend/language/{name}/ 的分工邏輯:共通講模型,語言講實作

🕰️ 演進

#主題SlugStage大綱
05後端語言演進史05-backend-language-evolution🌱CGI + Perl → PHP/Java 時代 → Ruby on Rails / Python Django → Node.js → Go(2009)→ Rust(2010+)→ 多 runtime(Bun / Deno)
06並行模型演進06-concurrency-model-evolution🌱fork/exec → Thread → Thread Pool → Event Loop → async/await → Coroutine / Goroutine → Actor(Erlang/Akka)
07型別系統演進07-type-system-evolution🌱動態 vs 靜態、duck typing 興起、TypeScript / Python typing / Flow 潮回頭、Rust 型別革命

🧠 知識型

F01-A 變數與記憶體

#主題SlugStage大綱
08變數 / Scope / Closure(跨語言比較)08-variable-scope-closure🌱var / let / const(JS)vs Python nonlocal vs Go := vs Rust let mut;closure 在各語言的形狀
09記憶體管理模型09-memory-management🌱GC(Java / Python / Go / JS)vs 手動(C)vs Ownership(Rust);各自的權衡與成本
10Heap vs Stack 跨語言10-heap-vs-stack🌱各語言怎麼決定東西放 heap 還 stack;escape analysis(Go / Java)

F01-B 並行與 IO

#主題SlugStage大綱
11Thread / Coroutine / async/await / Actor11-concurrency-primitives🌱四大並行 primitive 比較:OS thread(Java)vs goroutine(Go)vs async(JS/Python/Rust)vs actor(Erlang / Akka)
12IO 模型:Blocking / Non-blocking / Async / Event-driven12-io-models🌱select / poll / epoll / kqueue / io_uring 演進;Node.js 怎麼用、Python asyncio 怎麼用、Go runtime scheduler 怎麼包
13為什麼有 GIL、為什麼沒 GIL13-gil-or-no-gil🌱Python GIL、Ruby GVL、JavaScript 單執行緒、Node.js worker_threads、Go / Java 真 parallel
13-2並行資料衝突與合併策略13-2-concurrent-conflict-resolution🌱多執行緒 / 多程序 / 多服務同時處理同一筆資料造成不一致:Last-write-wins、Version vector、CRDT、Application-level merge、DB 層鎖(跟 B03 #22 連動);為什麼「最後誰 commit 誰贏」常常不夠

F01-C 錯誤處理

#主題SlugStage大綱
14錯誤處理模式比較14-error-handling-patterns🌱Exception(Java / Python / JS)vs Result / Option(Rust)vs Error value(Go if err != nil);各自優缺
15錯誤包裝(wrapping)15-error-wrapping🌱Go errors.Wrap / %w / errors.Is / errors.As、Rust thiserror、Python chained exception、JS cause
16Panic / Crash / Recover16-panic-crash-recover🌱什麼時候該讓程式直接死(fail-fast)vs 優雅降級;Go recover、Rust panic vs Result、Java Error vs Exception

F01-D 型別系統

#主題SlugStage大綱
17靜態 vs 動態型別17-static-vs-dynamic🌱各自的權衡;Python + type hints / TypeScript 作為中間方案
18Structural vs Nominal typing18-structural-vs-nominal🌱TypeScript structural(duck typing)vs Java/C# nominal;Go interface(structural)vs Rust trait(nominal + structural 混合)
19Generics 跨語言19-generics-cross-language🌱Java generics(erasure)vs C# generics(reification)vs Go generics(2022+)vs Rust generics(monomorphization)

🔧 小實作注意事項

#主題SlugStage大綱
20用 3 語言實作同一個 Debounce20-debounce-3-languages🌱JS / Python / Go 實作 debounce,對比並行原語的差異
21用 3 語言實作 Worker Pool21-worker-pool-3-languages🌱Python ThreadPoolExecutor / Go goroutine+channel / Node.js worker_threads 對比

💣 Anti-pattern

#主題SlugStage大綱
22跨語言 Anti-patterns22-cross-language-antipatterns🌱用一種語言的腦寫別的語言(Python 寫 Java 味、JS 寫 Go 味)、追新潮語言學皮毛沒學模型、GIL 無視做多執行緒、Go 濫用 goroutine 沒想 context 取消

🧰 對應檢查工具

#主題SlugStage大綱
23跨語言相關工具23-cross-language-tooling🌱LSP(Language Server Protocol)、tree-sitter(跨語言語法樹)、Protobuf / gRPC 作為跨語言契約、OpenAPI codegen 跨 7 語言

📎 補充

#主題SlugStage大綱
S01為什麼 Erlang / Elixir 並行模型特別s01-erlang-actor🌱BEAM VM、Let it crash 哲學、Phoenix LiveView;為什麼 WhatsApp 單機百萬連線
S02為什麼 Rust 的 borrow checker 對後端重要s02-rust-borrow-checker🌱data race 編譯期禁止、Send / Sync trait、無 GC 達到 Java 等級生產力

章節進度統計

  • 知識主題:23 + 2 補充 = 25 項
  • 🌿 growing:0
  • 🌱 seed:25

跨系列連結

  • backend/language/{name}/ — 每個概念落到具體語言怎麼寫
  • backend/network/ B02 — 網路 IO 跟並行模型連動
  • backend/os/ B04 — OS 提供並行 / IO 原語
  • system-design/ — 系統設計面試常考這些基礎模型