欢迎来到“展望未来”(Thinking Ahead)!

在本章中,我们将探讨计算思维 (computational thinking) 中最重要的一环。在程序员动手编写程序之前,他们必须先进行规划。展望未来的精髓在于预视程序的发展,理清它需要什么才能启动、它将产生什么结果,以及如何提升其效率。

如果起初觉得这些概念有些抽象,别担心!其实你日常生活中已经在运用这些思维,只是自己没察觉而已。让我们深入了解吧!

1. 识别输入与输出

每个计算机程序本质上都是一个“处理机器”。它接收一些东西、进行处理,最后吐出结果。

输入 (Inputs):这是系统解决问题所需的数据。它们可以来自用户(例如输入密码)、传感器(例如温度计)或其他文件。

输出 (Outputs):这是系统处理完输入后,最终产生的结果或资料。

现实生活中的比喻:制作水果冰沙

想象你正在为一部果汁机“编写程序”来制作冰沙:
输入:香蕉、牛奶、冰块,以及按下“开始”按钮的信号。
处理:刀片旋转并搅碎食材。
输出:一杯冰凉的液体冰沙,以及完成后“哔”的一声提示。

逐步教学:如何识别输入与输出

在考试遇到问题时,试着问自己这两个问题:
1. “计算机在开始执行前需要知道什么信息?”(这就是你的输入)。
2. “用户在最后期望看到或收到什么?”(这就是你的输出)。

例子:货币转换器
输入:金额、当前的汇率。
输出:转换后的金额。

快速回顾:
输入 = 进入系统的资料。
输出 = 从系统产出的信息。

重点总结:在开端清晰地识别输入与输出,能防止你开发出的程序“忘记”索取关键信息,或是无法提供用户所需的结果。

2. 确定前置条件 (Preconditions)

前置条件是指在程序或特定函数成功执行前,必须满足的需求。如果前置条件未达到,程序可能会崩溃或产生错误的结果。

可以这样想:在开车之前,一个“前置条件”是你必须拥有车钥匙和有效的驾驶执照。如果这些条件不满足,驾驶这个“过程”就无法进行。

为什么要使用前置条件?

安全性:确保程序不会尝试执行不可能的任务(例如除以零)。
效率:如果程序知道前置条件已满足,就不必在主代码中不断浪费时间检查错误。
清晰度:清楚告知其他程序员,程序运作所需的基本条件。

例子:计算平方根

如果你编写了一个函数来计算数字 \( x \) 的平方根:
前置条件: \( x \geq 0 \)(在大多数基础编程中,你无法求负数的平方根)。
• 如果用户输入 \(-5\),则违反了前置条件,程序应该在尝试计算之前就处理这个错误。

要避免的常见误区:不要混淆输入前置条件。输入是你给予程序的资料;而前置条件则是该资料必须遵守的规则

重点总结:前置条件就像一份“契约”。它们的意思是:“只要你给我正确类型的输入,我就保证给你正确的输出。”

3. 可重复使用的程序组件

在计算机科学中,我们讨厌做白工!展望未来意味着要识别出程序中未来,或在目前项目其他部分中可以再次使用的部分。

可重复使用的组件 (Reusable components) 是指设计用于许多不同程序中的代码块(例如函数、过程或库)。

重复使用的好处:

节省时间:你不必为常见任务(如排序列表或验证电子邮件地址)重复编写代码。
更容易测试:如果一个组件之前已经使用过且运作良好,你就不需要再次调试。
可靠性:热门的库(例如 Python 中的 math)已经过成千上万人的测试,非常可靠。

“乐高”比喻

将可重复使用的组件想象成乐高积木。你不会每次想盖城堡时都重新制作一块塑料砖;你会使用标准化的积木,因为你知道它们能完美契合。之后,你还可以用这些相同的积木来盖一艘太空船!

记忆法:重复使用的“T.E.D.”原则

可重复使用的代码应该是……
Tested(已测试:你知道它能运作)。
Efficient(高效率:节省编码时间)。
Distinct(明确:它能出色地执行一个清晰的任务)。

你知道吗?现代大多数软件中,高达 70% 到 80% 的代码都是使用库中可重复使用的部分!专业的程序员很少“从零开始”。

重点总结:通过“展望未来”并建立模块化、可重复使用的代码,你会让工作变得更轻松、更快速,也更专业。

总结检查清单

在进入程序化思维 (Thinking Procedurally) 之前,请确保你能够:
• [ ] 列出简单情景(如自动取款机)的输入输出
• [ ] 解释什么是前置条件并举例说明。
• [ ] 解释为什么使用可重复使用的组件(库/子程序)比从零开始编写更好。

做得好!你现在已经具备计算规划者的思维了。继续加油!