歡迎來到軟件工程!

在本章中,我們將探討建立電腦程式的「宏觀願景」。你已經學會了如何編寫 Python 程式碼和創建算法,但專業的程式設計師是如何構建像 Instagram 或 TikTok 這樣龐大的應用程式呢?他們並不會直接開始敲鍵盤!他們使用的是軟件工程 (Software Engineering)

你可以把軟件工程想像成建造摩天大樓的藍圖。你總不會在沒有計劃的情況下就開始疊磚塊,對吧?軟件工程提供了必要的架構,以確保程式穩定、實用且易於修復。

2.6.1 程式開發的 5 個階段

軟件開發通常遵循一個特定的流程。即使你只是製作一個簡單的計算機,遵循這些階段也能讓你省去很多麻煩!

階段 1:收集需求 (Gather Requirements)

在寫下任何一行程式碼之前,你需要知道程式應該做什麼。這個階段涉及與用戶溝通,以了解他們的需求。

例子:如果你要建立一個「功課規劃」應用程式,你需要知道:它需要日曆嗎?它應該發送通知嗎?它需要將數據保存到文件中嗎?

關鍵目標:定義輸入 (Inputs)輸出 (Outputs)(正如我們在 2.1 節中學到的)。

階段 2:設計解決方案 (Design Solutions)

現在你已經知道要構建什麼了,接下來就是計劃如何構建它。這是你創建流程圖或偽代碼等「藍圖」的地方。

類比:這就像廚師在烹飪前寫下食譜。在紙上修改錯誤比修復一個烤焦的蛋糕要容易得多!

階段 3:編寫程式碼 (Write Code)

這是大多數學生最喜歡的部分!你將設計轉化為實際的 Python 程式碼。由於你已經有了設計,這個階段應該會順利得多,因為你不必再去「猜測」接下來該輸入什麼。

階段 4:測試與優化 (Test and Refine Code)

沒有程式第一次就能完美運行。在此階段,你運行程式以查找「臭蟲」(Bugs/錯誤)。你將使用測試案例(正常、錯誤和邊界條件)和追蹤表 (Trace Tables) 來確保一切運作正常。如果發現問題,你便需要「優化」(修復和改進)程式碼。

階段 5:部署程式碼 (Deploy Code)

這是「盛大開幕」的時刻!部署意味著將軟件安裝到用戶的電腦上,或讓應用程式上架供大眾下載和使用。

記憶法 (Mnemonic):
Great Dogs Will Treat Dads
(Gather 收集, Design 設計, Write 編寫, Test 測試, Deploy 部署)

快速回顧箱:
1. 收集:問題是什麼?
2. 設計:規劃邏輯(流程圖)。
3. 編寫:用 Python 編碼。
4. 測試:查找並修復錯誤。
5. 部署:交給用戶使用。


2.6.2 線性開發與迭代開發

你可能會認為我們總是按直線從階段 1 到階段 5。這稱為線性 (Linear) 順序。然而,在現實世界中,情況很少那麼簡單!

什麼是迭代開發 (Iterative Development)?

迭代開發意味著以「週期」或「循環」的方式經歷這些階段。如果一開始覺得困難也不用擔心——只需將其想像為「反覆改進」軟件的過程。

有時,當你在測試程式碼(階段 4)時,你會意識到你的設計(階段 2)可能有誤。這時你需要回到設計階段,進行修正,然後再次編寫程式碼。這種「回頭」的過程就是迭代流程的一部分。

為什麼要使用迭代開發?

1. 需求變更:有時用戶會改變對他們想要什麼的主意。
2. 發現問題:你可能會在進行到一半時發現技術問題,迫使你重新設計程式的一部分。
3. 持續改進:你可以先發佈應用程式的「基礎版本」,然後在後續週期中不斷添加功能。

你知道嗎?
你最喜歡的大多數應用程式(例如 WhatsApp)都是迭代開發的。它們從基本的訊息功能開始,然後通過開發階段「循環」回來,稍後再添加視訊通話、貼圖和狀態更新等功能!

關鍵點:開發並不總是一條從頭到尾的直線。它通常是一系列圓圈,我們在其中進行測試、學習,然後回到原點改進我們的工作。


應避免的常見錯誤

跳過設計階段:許多學生會直接開始編碼。這通常會導致「意大利麵式代碼」(Spaghetti code),即混亂且難以修復。永遠記得先計劃!
在最後才進行測試:不要等到整個程式完成後才進行測試。在開發過程中分小部分進行測試(增量測試)。

快速回顧:核心概念
軟件工程是一種構建程式的結構化方法。它包括收集需求設計編寫程式碼測試部署。雖然它們看起來像是直線步驟,但我們通常會以迭代週期來工作,使軟件變得越來越好!