B05 · 跨語言 CRUD 比較 詳細 ROADMAP
計畫文件,不會被 Quartz 渲染。
回主 roadmap → backend/ROADMAP.md
章節目標
同一個功能(簡單 CRUD)用不同語言實作,對比語法 / 樣板量 / 生態成熟度 / 效能 / 工程體驗。這章不教語言(那在 backend/language/{name}/ 深入),而是選型視角——讓讀者在「Go / Python / Node / Java / PHP / C# 要選哪個」時有依據。
🌱 基本介紹
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 01 | 跨語言 CRUD 比較是什麼 | 01-what-is-cross-language-crud | 🌱 | 為什麼用「CRUD」這個最小共同分母比較語言;控制變因、公平性 |
❓ 為什麼需要
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 02 | 為什麼不能只看語言 benchmark 選型 | 02-why-not-benchmark-only | 🌱 | benchmark 場景太單純、生產環境的瓶頸通常在 IO / DB / network、CRUD 比較暴露的是「樣板量 / 開發速度 / 維護性」而非純效能 |
| 03 | 為什麼 CRUD 是好的比較單位 | 03-why-crud-as-comparison | 🌱 | CRUD = Route + ORM + Validation + Auth + Error handling,涵蓋後端最常見操作;小到可一頁讀完、大到能看出生態差異 |
🕰️ 演進
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 04 | 後端語言 CRUD 範式演進 | 04-crud-paradigm-evolution | 🌱 | Java 繁瑣 → Rails Convention-over-Configuration 顛覆 → Node.js 快速原型 → Go 走回顯式 → Rust 型別嚴謹 |
🧠 知識型
F05-A 五語言 CRUD 總覽(既有)
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 05 | CRUD 跨語言總覽 | ⛔️ micro-service/09-crud-overview | 🌿 | 跨系列 |
| 06 | Go CRUD | ⛔️ micro-service/10-go-crud | 🌿 | 跨系列 |
| 07 | Node.js CRUD | ⛔️ micro-service/11-nodejs-crud | 🌿 | 跨系列 |
| 08 | Python CRUD | ⛔️ micro-service/12-python-crud | 🌿 | 跨系列 |
| 09 | JVM(Java / Kotlin)CRUD | ⛔️ micro-service/13-jvm-clr-crud | 🌿 | 跨系列 |
| 10 | Laravel PHP CRUD | ⛔️ micro-service/14-laravel-crud | 🌿 | 跨系列 |
F05-B 新增比較軸
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 11 | C# / .NET CRUD | 11-dotnet-crud | 🌱 | ASP.NET Core + EF Core + minimal API,跟 JVM 心智模型對比 |
| 12 | Rust CRUD(Axum + SQLx) | 12-rust-crud | 🌱 | ownership 在 web handler 的表現、? operator、async trait 限制 |
| 13 | 語言選型決策樹 | 13-language-decision-tree | 🌱 | 團隊人數 / 性能要求 / 招募難度 / 生態成熟度 / 心理負擔,6 維度評分 |
🎯 語言觸發清單(backend/language/{name}/)
不屬於 B05 章節子題——是預計觸發的子系列清單。目錄不預先建,寫到 5+ 篇才 mkdir。
| 優先度 | 語言 | 子目錄 | 預計子題 |
|---|
| 🔴 | JS / TypeScript | backend/language/nodejs/ | ~15(Event Loop / Stream / Worker / Typing / monorepo / package manager 戰爭) |
| 🔴 | Python | backend/language/python/ | ~15(GIL / asyncio / typing / packaging / __slots__ / free-threading 3.13+) |
| 🔴 | PHP | backend/language/php/ | ~10(FPM / PSR / Composer / OPcache / Swoole / 8.x 新特性) |
| 🟡 | Java(跨層級完整) | backend/language/java/ | ~20(JMM / GC / JIT / classloader / concurrency / Project Loom / Kotlin coroutine) |
| 🟡 | Go | backend/language/go/ | ~12(Goroutine / Channel / Context / sync package / generics 2022) |
| 🟡 | C# / .NET | backend/language/dotnet/ | ~12(CLR / GC / async-await / LINQ / Kestrel / .NET 8 AOT) |
| 🟢 | Rust | backend/language/rust/ | ~15(Ownership / Borrow / Lifetime / async / tokio / error handling) |
🔧 小實作注意事項
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 14 | 用 7 語言各實作一個 Health Check endpoint | 14-healthcheck-7-languages | 🌱 | 最小可跑的 HTTP endpoint,對比 framework 啟動成本、樣板 |
| 15 | 7 語言打相同 DB + 壓測 | 15-7-languages-benchmark | 🌱 | 控制變因的 benchmark;暴露瓶頸在哪(CPU / GC / DB pool / JIT warmup) |
💣 Anti-pattern
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 16 | 選型 Anti-patterns | 16-selection-antipatterns | 🌱 | 只看 TIOBE / StackOverflow survey、只看 benchmark 不看生態、跟風選新語言但團隊沒人熟、用熟的語言做不該用的場景(Python 跑 CPU 密集沒考慮 multiprocess / Rust) |
🧰 對應檢查工具
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 17 | 跨語言工具生態 | 17-cross-language-tooling | 🌱 | OpenAPI codegen 多語言、protobuf / gRPC、LSP、Docker multi-stage 跨語言 build、k6 / Vegeta 壓測 |
📎 補充
| # | 主題 | Slug | Stage | 大綱 |
|---|
| S01 | Polyglot 團隊的後端選型 | s01-polyglot-team | 🌱 | 大公司多語言共存的經驗、服務邊界怎麼拆、共用 contract 怎麼管 |
| S02 | 新語言(Zig / Gleam / Mojo)後端展望 | s02-new-languages | 🌱 | 2024–2026 興起的 new kids;什麼時候值得關注 |
章節進度統計
- 章節子題:17 + 2 補充 = 19 項(不含觸發清單)
- 觸發子系列:7 個語言(~99 子題,另計)
- 🌿 growing:6(跨系列)
- 🌱 seed:13
跨系列連結
- →
backend/framework/ B06(同語言內的 framework 選擇)
- →
backend/concepts/ B01(語言之下的共通概念)
- →
micro-service/ 09–14(五語言 CRUD 既有)
- →
micro-service/37-framework-selection-methodology、38-framework-selection-cases
- →
standards/02-good-backend-framework