C 語言只是「寫字的筆」,軟件工程才是「寫文章的法」
很多初學者以為學會 C 語言語法就能寫出軟件。**現實是:C 語言只解決「怎麼表達邏輯」,不解決「怎麼構建系統」。**
目標不同,技術棧天差地別
| 目標軟件類型 | 核心技術棧 | 關鍵能力 |
| Windows 桌面程序 (GUI) | Win32 API → MFC / WTL / Qt / wxWidgets → .NET (C#) / Electron | 事件驅動、消息循環、GDI/GPU 繪圖、COM 組件、安裝包製作 |
| Linux/Unix 系統程序/服務/守護進程 | POSIX API (文件、進程、線程、網絡、信號) → systemd / Docker | 系統調用、並發模型、I/O 多路複用、日誌/監控、部署運維 |
| 嵌入式/單片機/裸機/RTOS | 寄存器操作、外設驅動、FreeRTOS/Zephyr、通訊協議 (I2C/SPI/UART/CAN/以太網) | 硬體手冊閱讀、中斷管理、內存優化、功耗控制、燒錄調試 |
| 高性能服務端/中間件/數據庫內核 | C/C++17/20、epoll/io_uring、鎖自由數據結構、內存池、協程庫、分佈式一致性協議 | 極致性能調優、並發控制、穩定性保障、架構設計 |
| 編譯器/解釋器/虛擬機 | 詞法/語法分析、AST、類型檢查、中間代碼生成、優化、代碼生成 (LLVM/GCC 後端) | 形式語言理論、靜態分析、優化算法、目標機器指令集 |
Windows 桌面開發的「漸進式」學習路線 (經典回答精華)
- 先「看」懂 Win32 API 概念: 窗口、消息、DC、資源、註冊表、進程/線程/同步對象。不求精通,只求建立心智模型。 推薦《Windows 核心編程》(Jeffrey Richter) 或《Windows 程序設計》(Charles Petzold) 選讀核心章節。
- 直接上手 MFC / Qt / C# WinForms/WPF: **只學怎麼用**,用封裝好的類庫快速構建 UI、綁定事件、調用業務邏輯。別一上來鑽 MFC 源碼,會劝退。
- 實戰積累半年以上後,回頭深究: 這時你對「窗口怎麼繪出來」「消息怎麼分發」有具體感知,再讀 Win32 API、MFC 源碼、.NET CLR 原理,會有「原來如此」的頓悟。
- 數據庫必修: SQL 標準、關係模型、索引原理、事務 ACID、MySQL/PostgreSQL/SQLite 實戰、ORM 框架。
別忘了軟件工程通識
- **版本控制 (Git)**、**構建系統 (CMake/Make/Ninja)**、**單元測試 (Unity/CppUTest/GoogleTest)**、**靜態分析 (Clang-Tidy/Cppcheck)**、**CI/CD (GitHub Actions/GitLab CI/Jenkins)**。
- **設計模式**、**架構原則 (SOLID/DRY/KISS/YAGNI)**、**領域驅動設計 (DDD)**——這些與語言無關,決定系統壽命。
**C 語言是地基,框架是骨架,業務邏輯是血肉,工程規範是神經系統。** 缺一不可。