B.1 计算思维:明确界定问题与成功准则

欢迎来到这一章!你有没有试过按照一份只写着“烤至熟透”,却没有说明烤箱温度或所需时间的食谱来烘焙?这样一来,你几乎不可能知道自己到底会成功还是失败。在计算机科学中,我们也面对完全相同的挑战。在编写任何一行代码或设计算法之前,我们必须确实知道自己要解决什么问题,并且精确掌握衡量成功的标准。

本章是整个计算思维过程(computational thinking process)的基石与第一步。掌握这些概念,不仅能助你在卷二(Paper 2)(属于课题 B:计算思维与问题解决)中夺取高分,对于你的校本评估:计算解决方案(internal assessment: the computational solution)同样至关重要。

注:计算思维过程的后续阶段,例如将问题拆解(见“分解与抽象化”)、设计逐步执行的程序(见“算法思维与算法设计”),以及检查运行结果(见“测试与评估解决方案”),全部都直接依赖你在本阶段所订立的规格与成功准则。

---

1. 计算思维过程概览

根据 IB DP 计算机科学课程大纲,计算思维过程包含四个环环相扣的实践阶段:

1. 根据计算背景明确界定问题并制定成功准则(Specifying problems in terms of their computational context and determining success criteria)(即是本章内容!)
2. 将复杂的现实世界问题分解为更易于管理的小问题(Decomposing complex real-world problems into more manageable problems)
3. 将问题抽象化并进行泛化,以支持算法思维并构建解决方案(Abstracting problems and generalizing them to enable algorithmic thinking and to develop solutions)
4. 测试并评估解决方案以作持续改进(Testing and evaluating solutions for improvements)

请注意,所有事情都是从明确界定问题开始。如果基础不稳固,最终的解决方案便无法按预期运行。

---

2. 在计算背景下明确界定问题

在现实世界中,问题往往混乱、模糊,而且通常只是随口描述。客户可能会说:“我们学校图书馆的借还书系统太慢、太混乱了。”这只是一句日常的抱怨,并不是一个可以直接着手处理的计算机科学问题。

要从计算的角度界定问题,你必须将模糊的人类需求转化为具体的工程技术现实。你需要厘清三个核心计算元素:

• 输入(Inputs):哪些数据必须进入系统?涉及什么格式、数据类型和来源?(例如:以整数形式输入的学生证编号、以字符串形式输入的书籍条码)。
• 处理过程(Processes):必须对这些数据执行什么运算、操作或逻辑判断?(例如:检查学生是否有逾期罚款、更新数据库记录、计算归还日期)。
• 输出(Outputs):系统必须产生或显示什么结果?(例如:更新后的账户状态、确认收据、错误消息)。

理解限制条件与计算背景

计算背景所涵盖的不仅仅是输入和输出;它还包括系统必须在其内部运行的限制条件(constraints)与环境(environment):

• 硬件限制:系统是在低功耗的手持条码扫描枪、手机,还是专用服务器上运行?
• 数据限制:需要处理的数据量有多大?是否有特定的数值范围或格式要求?
• 时间限制:该程序必须实时(real-time)运行,还是可以在夜间批处理(batches)?
• 用户环境:谁会使用这个系统?他们是否需要无障碍、简单易用的用户界面?

生活比喻:想象一下你叫承包商“帮我盖一栋漂亮的房子”。最后你可能会得到一间小木屋,或者是一座摩天大楼!明确界定问题的意思就是具体告诉承包商:“建造一间双卧室的木屋,最高 6 米,配备自来水和太阳能供电。”这样他们才会清楚项目的范畴、材料以及边界所在。

重点复习:界定问题是指清楚定义其输入、处理过程、输出以及限制条件,好让计算机能够有系统地解决该问题。

---

3. 制定成功准则

当你明确界定问题后,你怎样才知道系统何时才算大功告成?你又如何证明你的计算解决方案确实有效?这正是成功准则(success criteria)发挥作用的地方。

成功准则是用来判断计算解决方案是否已成功解决问题的具体、可衡量的标准。

什么是良好的成功准则?

成功准则必须具备可衡量性(measurable)且明确无误(unambiguous)。如果准则带有主观色彩,两个不同的人审视同一个程序时,就可能会在它究竟是“通过”还是“失败”上产生分歧。

让我们比较一下模糊的陈述与可衡量的成功准则:

• 模糊:“程序运行应该要快。”
• 可衡量:“搜索算法必须在 1.0 秒内从包含 10,000 条记录的数据集中返回结果。”

• 模糊:“系统必须能处理错误的用户输入。”
• 可衡量:“如果用户在年龄字段输入负数,系统会显示错误消息‘年龄无效’并提示重新输入,而不会发生程序崩溃。”

• 模糊:“程序应该要计算成绩。”
• 可衡量:“系统会计算出介于 0 至 100 之间的整数最终百分比分数,并根据预设的成绩等级分数线评定相应的等级字母,同时在屏幕上显示两者。”

记忆法:成功准则的 3 大“必备”检查

无论在考试还是撰写校本评估时,每当你拟定或评估一项成功准则,都要问问自己:

1. 是否可观察(Must it be observable)? 你能否亲眼看见、读取或捕获到该结果?
2. 是否可测试(Must it be testable)? 你能否使用测试数据编写具体的测试用例来验证它?
3. 是否精确(Must it be precise)? 它是否明确指出了确切的数值、阈值或结果,而不是定性的主观意见?

核心要诀:成功准则绝对不能使用“容易”、“良好”、“快速”或“美观”等字眼。请以具体数字、特定行为模式和可验证的结果来取代它们。

---

4. 将问题规格与解决方案链接

起初拟定精确准则时觉得要求严格?不用担心!设定清晰的规格与成功准则,实际上会直接引导你后续的所有开发工作:

• 指导算法设计:当你的输入、处理过程和输出都界定清楚后,编写算法或选择逻辑结构就会变得轻松得多。
• 建立测试策略:每一项成功准则都会转化为测试计划中的一个项目。如果准则列明“系统接受 8 个或以上字符的密码,并拒绝较短的密码”,你的测试计划便会立即衍生出两个测试用例:一个 7 字符的字符串和一个 8 字符的字符串。
• 评估最终成果:当解决方案完成后,你便可以直接对照这些初始准则进行评估,从而找出系统的不足之处或需要改进的地方。

---

5. 应避免的常见错误

• 混淆“解决方案”与“问题”:声称“问题是我们需一个 Python 字典(dictionary)”是错误的。字典只是潜在解决方案中会用到的一种数据结构。真正的问题是现实生活中的困难(例如:“现有系统通过学生唯一的学生证编号来查询紧急联系人记录时耗时过长”)。
• 撰写主观的准则:写下“用户界面看起来很吸引人”是无法进行客观测试的。相反,应该写成:“界面在单一菜单屏幕上显示所有导航选项,并采用高对比度的文本显示。”
• 忽略限制条件:忘记列明硬件、软件或数据边界,会导致解决方案在实际部署到目标环境时运行失败。

---

本章总结与复习

• 课题 B 背景:明确界定问题与制定成功准则是整个计算思维过程的起始阶段。
• 界定问题:包括定义计算背景——具体识别出清晰的输入、必要的处理过程、预期的输出以及运行上的限制条件。
• 成功准则:客观、可衡量的指标,用以确立解决方案必须达到什么要求才算成功。
• 在评估中的角色:清晰的成功准则是计算解决方案所有结构化测试及最终评估的重要基础。