歡迎來到軟體的世界!

在本章中,我們將探索每一台電腦背後的「大腦」。雖然硬體(Hardware)是你可以觸摸到的實體,但軟體(Software)才是讓這些硬體變得有用的關鍵。想像一下智慧型手機:螢幕和電池是硬體,但應用程式和作業系統才是讓它運作的軟體。
別擔心某些部分聽起來很技術化;我們會透過簡單的類比,把它拆解得清清楚楚!

3.6.1 硬體與軟體:動態拍檔

要了解電腦系統,你必須知道這兩個主要部分之間的區別:

1. 硬體(Hardware): 這是系統中實體的電子組件。如果你能踢它或拿起它,那就是硬體!例如處理器(CPU)、記憶體(RAM)和主機板。
2. 軟體(Software): 這是由硬體執行的一系列指令(程式)。軟體會告訴硬體具體該做什麼。

類比: 想像一台鋼琴。木製琴身、琴鍵和琴弦是硬體。告訴鋼琴家演奏哪些音符的樂譜則是軟體。沒有樂譜,鋼琴就只是擺設;而沒有鋼琴,音樂也無法被聽見。

重點總結: 硬體是實體的機器;軟體是在該機器上運行的指令集。

3.6.2 軟體的分類

並非所有軟體的工作都相同。我們通常將軟體分為兩大類:

系統軟體(System Software)

這類軟體負責管理電腦資源,並為其他程式提供運作平台。它就像汽車的「引擎」。你通常不會直接與它互動來完成工作,但沒有它,你就無法運作。
它包括:
- 作業系統(OS)
- 公用程式(Utility Programs)
- 程式庫(Libraries)
- 翻譯程式(Translators)

應用軟體(Application Software)

這是允許使用者執行特定任務或解決問題的軟體。它就像你工具箱裡的「工具」。
範例: 用於撰寫文章的文書處理軟體、瀏覽網際網路的網頁瀏覽器,或是用來娛樂的電子遊戲。

快速複習盒:
- 系統軟體: 執行電腦(例如 Windows、macOS)。
- 應用軟體: 幫助使用者完成任務(例如 Photoshop、Excel)。

作業系統(OS):總管家

作業系統是最重要的系統軟體。它的主要角色是為使用者和其他軟體隱藏硬體的複雜性。這被稱為抽象化(Abstraction)。你不需要知道硬碟在微觀層面上是如何運作的就能儲存檔案;作業系統會幫你處理這些細節!

作業系統有四個你需要知道的重要工作:

1. 排程(Scheduling): 作業系統決定哪些程式可以使用處理器以及使用多久。它確保每個運行的程式都能公平地分配到「CPU 時間」,這樣電腦才不會凍結。
2. 記憶體配置(Memory Allocation): 當你開啟一個應用程式時,作業系統會在隨機存取記憶體(RAM)中為它找到一個「停車位」。它確保應用程式不會試圖佔用相同的空間,從而導致崩潰。
3. 輸入/輸出(I/O)裝置管理: 作業系統管理電腦與其周邊設備(輸入/輸出裝置)之間的通訊,例如你的鍵盤、滑鼠和印表機。
4. 中斷處理(Interrupt Handling): 「中斷」是一種發送到處理器的訊號,需要立即處理(例如滑鼠點擊或低電量警告)。作業系統會有效率地處理這些訊號。

你知道嗎? 如果沒有記憶體配置,你的電腦將會是一團混亂!一個程式可能會意外覆蓋另一個程式的資料,導致系統不斷崩潰。

其他重要的系統軟體

公用程式(Utility Programs): 這些是「管家」工具,增加了額外的功能來協助維護系統。
範例: 防毒軟體(安全性)和壓縮程式(使檔案變小以節省空間)。

程式庫(Libraries): 這些是預先編寫的程式碼集合,程式設計師可以使用它們來節省時間。與其從零開始編寫複雜的數學函數,程式設計師可以直接從程式庫中「借用」它。

翻譯程式(Translators): 這些將人類編寫的程式碼轉換為電腦硬體能理解的語言(二進位)。我們將在下一節中更詳細地介紹它們。

重點總結: 作業系統管理電腦的資源(排程、記憶體、I/O、中斷),並使坐在桌前的使用者能輕鬆使用硬體。

3.6.3 程式語言與翻譯程式

電腦只理解 1 和 0(機器碼,Machine Code)。人類發現這非常難寫!因此,我們有不同類型的程式語言。

語言分類

1. 低階語言(Low-Level Languages):
- 機器碼: 原始的二進位指令。對電腦來說速度極快,但對人類來說幾乎無法閱讀。
- 組合語言(Assembly Language): 使用助憶符號(Mnemonics)(如 ADD 或 SUB 等簡短文字代碼)代替二進位。它比機器碼更容易,但仍然要求程式設計師精確理解硬體是如何運作的。

2. 高階語言(High-Level Languages):
- 這些語言使用類似英語的單字(如 if、while、print)。
- 它們是指令式(Imperative)的,意味著程式碼描述了電腦完成任務時應遵循的逐步過程。
- 它們學習和編寫起來容易得多,而且同樣的程式碼通常可以在不同類型的電腦上執行。

翻譯程式的類型

由於電腦只說機器碼,我們需要一個翻譯程式來轉換我們的代碼。有三種類型:

1. 組譯器(Assembler):組合語言翻譯成機器碼。
2. 編譯器(Compiler): 一次將整個高階語言程式進行翻譯。它會建立一個目的碼(Object Code)(可執行檔案),隨後可以在不需要原始原始碼的情況下執行。
3. 直譯器(Interpreter): 逐行翻譯並執行高階語言程式。如果第 10 行出現錯誤,它會執行第 1 到第 9 行,然後才會停止。每次你想運行程式時,都需要這個直譯器。

應避免的常見錯誤: 不要混淆原始碼(Source Code)目的碼(Object Code)原始碼是人類編寫的內容;目的碼是由翻譯程式產生的機器碼。

中介語言(位元組碼,Bytecode)的力量

有些編譯器不會直接輸出機器碼。相反,它們會產生一種中介語言(通常稱為位元組碼)。
為什麼要這樣做?
- 可攜性(Portability): 位元組碼可以在任何擁有虛擬機器(Virtual Machine)的電腦上執行。這就是為什麼 Java 應用程式可以在 Windows、Mac 或 Android 上執行的原因!
- 安全性: 在代碼轉換為最終機器碼之前,可以先檢查是否有病毒。
- 效率: 即時(JIT)編譯器可以在需要時,立即將該位元組碼轉換為最適合該特定電腦的機器碼。

重點總結: 高階語言對人類友善,但需要翻譯程式(編譯器或直譯器)才能對機器友善(轉為機器碼)。

軟體總結

- 硬體是物理組件;軟體是指令。
- 系統軟體(如作業系統)管理機器;應用軟體協助使用者。
- 作業系統處理排程、記憶體、I/O 和中斷。
- 編譯器一次全部翻譯;直譯器逐行翻譯。
- 位元組碼使程式具有可攜性,因此它們可以在許多不同的設備上執行。

如果剛開始覺得編譯器和直譯器之間的區別有點模糊,別擔心。只需記住:編譯器就像在任何人閱讀之前將整本書翻譯成新語言,而直譯器就像聯合國的現場口譯員,在每一句話說出時進行同步翻譯!