欢迎来到软件工程!

在本章中,我们将探讨建立计算机程序的“宏观愿景”。你已经学会了如何编写 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),即混乱且难以修复。永远记得先计划!
在最后才进行测试:不要等到整个程序完成后才进行测试。在开发过程中分小部分进行测试(增量测试)。

快速回顾:核心概念
软件工程是一种构建程序的结构化方法。它包括收集需求设计编写代码测试部署。虽然它们看起来像是直线步骤,但我们通常会以迭代周期来工作,使软件变得越来越好!