基礎:機器模型

系統程式設計(systems programming)

想像開車和打造引擎之間的差別。多數程式設計師是在「開車」:他們寫應用程式、網站和遊戲,這些都建立在別人早已造好的大量機械之上。系統程式設計則是打造底下那套機械——作業系統、裝置驅動程式、資料庫、編譯器與執行期環境,也就是其他程式所依賴的基礎。它寫的是「讓其他軟體得以站立」的軟體。

具體來說,系統程式是直接管理電腦資源的程式——CPU 的時間、記憶體的每個位元組、磁碟上的檔案、從網路抵達的位元——並把這些資源提供給其上的一切。因為肩負這個任務,系統程式碼非常在意硬體究竟如何運作:記憶體如何排佈、CPU 如何執行指令、作業系統如何分配資源。它通常用 C、C++ 或 Rust 這類能讓你精確掌控這些細節、而非把它們藏起來的語言來撰寫。

為何重要:系統程式設計是速度、記憶體用量與正確性都不容妥協的地方,因為這裡的一個錯誤或一次變慢,會被上層每一個程式繼承下來。它獎勵對機器有精確心智模型的人,懲罰含糊的假設。另一面是:讓系統程式碼強大的那份低階掌控力,同時也使它危險——語言往往會讓你做錯事卻不吭一聲,這正是為什麼這個領域有那麼多內容,是在弄清楚機器到底在做什麼。

Linux 核心、SQLite 資料庫引擎、Python 直譯器本身,以及你網路卡的驅動程式,全都是系統軟體。而你寫的那個 import SQLite、跑在 Linux 上的 Python 遊戲,則是應用軟體——它騎在這三者之上。

同一台機器同時跑著這兩層;系統軟體是其他一切所依賴的那一層。

兩者沒有明確界線——同一個程式可以同時有系統層級與應用層級的部分。這個標籤描述的是一段程式碼扮演的角色(替別人管理資源),而不是一種不同的電腦。

又称
systems software development低階程式設計