基礎:機器模型
應用程式設計 vs 系統程式設計
想像一間餐廳。把菜擺盤上桌的廚師在做「應用」的工作——解決顧客真正的問題(一頓飯)。而蓋廚房、接瓦斯管線、裝冷藏設備的人做的是「系統」的工作——他們造出了「能下廚」這件事得以成立的地方。兩者都是程式設計,只是與底層機器和終端使用者的距離不同。
應用程式設計把程式對準人類的問題:試算表、聊天程式、結帳頁面。程式設計師大多使用高階工具與函式庫,並信任「開檔案」或「送訊息」就是會動。系統程式設計則對準那些工具所依賴的機械:透過跟作業系統與磁碟對話,讓「開檔案」真正發生。應用程式碼為開發速度與清晰功能而最佳化;系統程式碼為效能、可預測性與對資源的精確掌控而最佳化,代價則是要為低階細節擔起更多責任。
這條界線之所以重要,是因為它決定了你必須在意什麼。應用程式的錯誤可能只是螢幕上顯示了錯誤的總計;系統程式的錯誤卻可能搞壞每個程式的記憶體,或讓整台機器當掉。知道自己站在界線哪一側,就知道要多小心、哪種語言合適、以及你得理解機器到什麼程度。實務上許多工程師會在兩者之間往返,而最有價值的人,正是懂得足夠的系統層知識,能在抽象「漏水」時把自己的應用程式除錯出來。
為購物網站寫 React 前端是應用程式設計。而寫出那個讓瀏覽器能快速繪製頁面的記憶體配置器,則是系統程式設計。
螢幕上是同一個頁面,背後卻是兩層截然不同的程式碼讓它出現。
這是一道光譜,不是一堵牆。許多真實工作橫跨兩者;這些詞描述的是你的焦點落在哪裡,而不是某種資格或固定的職涯框框。
又称
另见