歡迎來到程式開發的世界!

在本章中,我們將從「像電腦一樣思考」轉向真正的實作!程式開發是電腦科學的核心。在這裡,你的創意將轉化為實際運作的應用程式和軟體。無論你是立志成為專業開發者,還是只想在考試中取得佳績,這些技能就像是你解決難題的超能力。別擔心,有些部分看起來可能像是在學習一種新語言,我們會一步一步為你拆解!

1. 解決大難題(分解與抽象化)

在輸入第一行程式碼之前,你需要一個計畫。電腦並不聰明,它們需要非常具體的指令。

分解(Decomposition):拆解問題

分解是指將複雜的問題拆解成更小、更容易處理的部分的過程。 類比:如果有人叫你「籌辦音樂節」,你一定會愣住!但如果你把它拆解成「預約樂團」、「租借舞台」和「販售門票」,處理起來就會容易多了。

抽象化(Abstraction):化繁為簡

抽象化是指移除不必要的細節,將重點放在重要的部分。 類比:想像一張倫敦地鐵圖。它不會顯示每一條街道或每一棵樹,只會顯示車站和路線。這就是抽象化!

快速回顧:
- 分解 = 將大型任務拆解為微型任務。
- 抽象化 = 忽略與解決方案無關的細節。

重點總結: 使用這兩個工具能幫助你分析問題,讓你解決難題時不再感到手足無措。

2. 從計畫到程式

在考試中,你可能會拿到一個演算法(例如流程圖或虛擬碼),並被要求將其轉換為實際的程式碼(對於 Edexcel 學生來說,通常是 Python)。

閱讀與精進程式碼

程式開發不僅僅是編寫,還包括閱讀精進。 - 閱讀:你能看懂一段程式碼並解釋它的功能嗎?
- 精進:你能將一個運作中的程式改進得更好、更快或更容易閱讀嗎?

轉換演算法

當將流程圖虛擬碼轉換為程式時:
1. 找出輸入(Inputs)(例如:「詢問姓名」),並將其轉換為程式碼:name = input()
2. 找出選擇(Selection)(流程圖中的菱形),並使用 if/else 語句。
3. 找出重複(Repetition)(迴圈),並使用 whilefor 迴圈。

你知道嗎?虛擬碼(Pseudocode)並非一種嚴格的程式語言。它只是用英文(或中文)編寫的「模擬代碼」,用來幫助你在考慮特定程式語言規則之前先規劃好邏輯。

重點總結:練習用紙筆進行程式「追蹤(tracing)」,這能讓你準確理解程式如何從開始運行到結束。

3. 編寫「簡潔」的程式碼

程式碼不僅僅要能「運作」就夠了,它還必須具備可維護性。這意味著如果六個月後你回頭看,或者其他程式設計師看到這段程式碼,他們都能輕鬆理解。

「專業碼農」檢核清單:

- 有意義的識別碼:使用合乎邏輯的變數名稱。使用 score 而不是 s,或 player_name 而不是 p1
- 縮排(Indentation):使用空格或 Tab 來顯示哪些程式碼屬於 if 語句或迴圈之內。在 Python 中,這是強制要求的!
- 註解(Comments):使用 # 符號來寫下筆記,解釋一段複雜的程式碼在做什麼。
- 空格(White Space):不要把所有東西都擠在一起。使用空行來分隔不同的程式碼「段落」。

記憶法:記住 C.I.M. - Comments(註解)、Indentation(縮排)、Meaningful names(有意義的名稱)。這能讓你的程式碼閱讀起來非常簡單(SIM-ple)!

重點總結:清晰的佈局和良好的命名能讓你的程式碼在日後更容易除錯與更新。

4. 捕捉蟲子(錯誤類型)

每個人都會犯錯!竅門在於知道如何找到並修正它們。你需要知道三種主要的錯誤類型:

1. 語法錯誤(Syntax Errors)

這些是「文法」錯誤。你違反了程式語言的規則。 範例:忘記在 if 語句末尾加上冒號 (:),或是將 "print" 拼寫成 "prnt"。程式甚至無法啟動。

2. 邏輯錯誤(Logic Errors)

程式運作得非常完美,但結果卻是錯的!這是一種「思考」上的錯誤。 範例:你想將兩個數字相加,卻不小心用了減號 (-)。電腦完全按照你的指示執行,但你的指示給錯了!

3. 執行時期錯誤(Runtime Errors)**

程式開始運行,但隨後突然崩潰。 範例:指示電腦將數字除以零,或是要求它開啟一個不存在的檔案。

要避免的常見錯誤:不要搞混邏輯錯誤語法錯誤。如果程式啟動了但給出錯誤答案,那是邏輯錯誤。如果程式立刻跳出紅色錯誤訊息,那就是語法錯誤

重點總結:辨識、定位並修正這些錯誤,是成為優秀程式設計師的關鍵一環。

5. 你的程式是否合用且快速?

當你的程式可以運作後,你需要評估它的適用性(Fitness for purpose)效率(Efficiency)

適用性(Fitness for Purpose)

程式是否真的執行了使用者要求的功能?如果你被要求製作一個加法計算機,但它只能做減法,那麼它就不是「合用」的。

效率(Efficiency)

兩個程式可以解決同一個問題,但其中一個可能因為更有效率而「更好」。我們透過以下方式測量:
- 比較次數:電腦需要詢問「A 是否等於 B?」多少次?
- 執行次數:它需要經過迴圈多少次?
- 記憶體使用:它佔用了多少電腦 RAM 空間?

快速回顧:
為了測試程式是否適用,我們使用測試數據(Test Data)。這包括:
- 正常數據:程式預期會接收到的東西(例如:輸入年齡「15」)。
- 邊界數據:允許範圍的最極端數值(例如:「0」或「100」)。
- 錯誤數據:應該被拒絕的東西(例如:在年齡欄輸入「香蕉」)。

重點總結:一個出色的程式不僅是能運作,它還必須高效地運作,並且能處理意外輸入而不會崩潰。