輝煌的過去:中國軟體先驅的 C/C++ 時代
求伯君 (WPS)、嚴援朝 (CCDOS)、吳曉軍 (2.13)、王志東 (四通利方)、朱崇君 (CCED)、鮑岳橋 (UCDOS)……這些名字代表了 90 年代中國軟體業的巔峰。他們用 C/組合語言在 DOS 時代構建了國產辦公軟體、作業系統增強、中文平台的基石。**那時「會 C/組語就能走天下」是真理。**
時代變遷:Windows 與網路重塑格局
- DOS 退場,Windows API 複雜度爆炸(訊息迴圈、GDI、COM、MFC/ATL)。
- 網際網路興起,瀏覽器/伺服器架構主導,跨平台、腳本語言、執行階段環境成為主流。
- Visual Basic、Delphi、後來的 C#、Java、Python、JavaScript、Go、Rust……工具鏈極大豐富。
核心爭論:C/C++ 仍是「必修」嗎?
支持論點
- **系統軟體基石**:Linux/Windows 核心、資料庫引擎、瀏覽器渲染引擎、遊戲引擎、嵌入式韌體、高效能運算庫(BLAS、TensorRT)核心均為 C/C++。
- **效能上限**:零開銷抽象、手動記憶體佈局、SIMD/GPU 直接控制,無 GC 停頓,適合極致效能場景。
- **互操作通用語言**:所有語言(Python, C#, Java, Rust, Go, Node.js)呼叫底層庫最終都經過 C ABI(
extern "C")。
- **訓練基礎思維**:指標、記憶體佈局、編譯鏈接、未定義行為、RAII、模板元編程,建立「計算機如何運作」的心智模型。
反對/修正論點
- **應用層開發效率低**:記憶體管理、建構/解構、模板錯誤訊息、長編譯時間、缺乏現代套件管理(雖有 Conan/vcpkg),不適合快速迭代業務邏輯。
- **安全風險高**:緩衝區溢位、使用後釋放、資料競爭,現代語言(Rust, C#, Java, Go)在語言層面消除大類記憶體安全漏洞。
- **領域專用語言更優**:Web 後端用 Go/Java/C#,資料科學用 Python,前端用 TypeScript,腳本自動化用 Python/PowerShell,嵌入式新專案評估 Rust。
- **招聘與維護成本**:資深 C++ 工程師稀缺昂貴,代碼庫易因風格不一、模板濫用、宏濫用難以維護。
現代定位:C/C++ 是「專業選修」而非「必修」
| 角色/目標 | C/C++ 必要性 | 建議學習深度 |
| 作業系統/編譯器/引擎開發者 | 核心必修 | 精通:ISO 標準、記憶體模型、無鎖程式設計、編譯器內部 |
| 高效能計算/圖形/遊戲引擎 | 核心必修 | 精通:SIMD、GPU 互操作、資料導向設計、Profiling |
| 嵌入式/韌體工程師 | 高度推薦 | 熟練:裸機/RTOS、暖存體映射、中斷、交叉編譯工具鏈 |
| 一般應用/企業級後端/全端工程師 | 選修/了解即可 | 理解:智慧指標、RAII、標準庫、與主流語言互操作基礎 |
| 資料科學/AI 研究員 | 選修 | 了解:Python/C++ 邊界、擴充套件開發、ONNX/TensorRT 部署 |
| 學生/轉職新人 | 建議學習 | 入門:指標、記憶體、建構/解構、標準容器、CMake、基本除錯 |
給學習者的建議
- 別因「必修」焦慮:先掌握一門高生產力語言(Python/Go/C#/TypeScript)解決實際問題,建立信心。
- 以專案驅動學 C++:寫一個簡單遊戲、HTTP 伺服器、影像處理工具、編譯器前端,遇到問題再深究語言特性。
- 現代 C++ (C++17/20/23) 才是標準:忘掉
new/delete、char*、#define、NULL,擁抱 std::string, vector, unique_ptr, string_view, optional, concepts, modules。
- 工具鏈先行:CMake + Clang/GCC/MSVC + Sanitizers (ASan/TSan/UBSan) + Clang-Tidy + CTest + CPack + Conan/vcpkg。
- 閱讀優秀開源碼:LLVM, Folly, Abseil, Boost, nlohmann/json, spdlog, fmt, imgui, Dear ImGui, WebRTC, TensorRT, ONNX Runtime。
總結
C/C++ 不是每個程式設計師的「必修」,但它是**理解計算機系統本質**的最佳窗口,也是**構建世界運轉基礎設施**的主力語言。若你志在系統軟體、高效能計算、嵌入式核心、編譯器工具鏈,請深耕 C++;若你專注業務應用、Web、資料、AI 應用層,選擇更高生產力語言並在邊界處與 C++ 共舞。**工具無貴賤,適合才是王道。**
- 上一篇文章: C/C++ 字串指標陣列與指向指標的指標:記憶體佈局圖解與實戰
- 下一篇文章: 《挑戰 30 天 C++ 入門極限》序言:給初學者的心法與路線圖
Copyright ©
程式碼之家 All Rights Reserved