欢迎来到程序化思维!

你好!今天我们将探讨程序化思维(Thinking Procedurally)。这是 OCR AS Level 课程中“计算思维要素(Elements of Computational Thinking)”的重要一环。别被这个名称吓倒了——这其实是你每天都在做的事情!

无论是冲一杯茶、规划上学路线,还是在电子游戏中升级,你都在运用程序化思维。在计算机科学中,这意味着将一个庞大且复杂的问题,拆解成计算机能够执行的逻辑指令集合。让我们深入了解吧!

1. 识别问题的组成部分

在写下第一行代码之前,我们需要先了解自己到底要解决什么问题。这就是所谓的分解(Decomposition)——将一个大问题拆解成更小、更易于管理的部分。

类比:想象有人叫你去“筹办一个音乐节”。这听起来简直是不可能的任务!但如果你将它拆解,就能找出各个组成部分
1. 预订乐队。
2. 租用场地。
3. 聘请保安。
4. 销售门票。
突然间,“不可能”的任务就变成了一连串较小的工作清单。

在计算机科学中:如果你被要求建立一个“登录系统”,你需要识别的组成部分包括:获取用户名、获取密码、检查它们是否与数据库中的数据相符,以及处理“忘记密码”的请求。

快速复习:程序化思维始于分解。如果一个问题太大而无法一次解决,请继续将其拆解,直到每个部分都变得简单为止!

2. 识别解决方案的组成部分

一旦掌握了问题的组成部分,你需要决定解决方案的组成部分是什么。这包括识别所需的数据,以及处理这些数据的过程。

逐步解释:
1. 输入(Inputs):程序启动时需要什么数据?(例如:用户名)。
2. 过程(Processes):程序需要对这些数据什么?(例如:检查名称是否在列表中)。
3. 输出(Outputs):程序在最后应该向用户显示什么?(例如:“访问权限已授权”)。

你知道吗?即使是最复杂的人工智能模型或电子游戏,也只是由这些简单的“输入-处理-输出”组件所组成的庞大集合!

重点总结:解决方案不仅仅是一大块代码;它是为了共同解决整体问题而协作的一系列具体任务。

3. 确定步骤顺序

计算机速度极快,但也非常死板。它们会严格按照你指示的顺序执行任务。确定步骤顺序(通常称为序列 Sequence)至关重要。

类比:想象一个“机器人厨师”在做吐司。如果你这样告诉它:
1. 将吐司放在盘子上。
2. 把面包放进多士炉。
3. 开启多士炉。
机器人会先把两片冷面包放在盘子上,然后空转多士炉!因为顺序错了,导致逻辑也错了。

别担心,起初这看起来可能有点棘手!一个好方法是在纸上进行“预演(Dry run)”。想象自己是计算机,逐一审视每个步骤。这样顺序还合乎逻辑吗?

应避免的常见错误:在计算出结果之前尝试使用该结果。例如,在将税款(Tax)加到小计(Subtotal)之前,就尝试打印出总价格(Total_Price)

4. 识别子程序

当你拆解解决方案时,你会发现有些任务足够独立,可以分开处理。这些就是子程序(Sub-procedures)或称子例程(Sub-routines)

为什么要使用子程序?
- 可重用性:只需编写一次代码,即可多次使用。
- 可读性:阅读一个写着 "CalculateTax()" 的程序,比阅读隐藏在主代码中间、长达 50 行的复杂算式要容易得多。
- 测试:你可以测试一个小型的子程序,确保其运作完美,再将其加入主程序中。

现实生活例子:想想你的智能手机。“相机应用”是一个主程序,但“存储照片到相册”就是一个子程序。许多不同的应用程序(如 Instagram、WhatsApp、相机)都使用同一个子程序来存储照片,它们不需要每次都“重新发明轮子”!

记忆法:D.R.Y.
这代表 Don't Repeat Yourself(不要重复自己)。如果你发现自己在写重复的代码,那可能就应该将其变成一个子程序

重点总结:子程序是主程序内的“微型程序”。它们能让代码更有条理且易于重复使用,从而让你的工作更轻松。

总结检查清单

当你在运用程序化思维时,试着问自己这四个问题:
1. 组件(Components):我是否已将大问题拆解成最小的部分?
2. 解决方案(Solution):解决这些部分需要哪些具体任务(输入、处理、输出)?
3. 顺序(Order):逻辑顺序是什么?(什么必须先发生?)
4. 子程序(Sub-procedures):我可以将这些任务归纳为可重用的“微型程序”吗?

做得好!你已经掌握了像程序员一样思考的基础。只要学会拆解问题并保持逻辑顺序,就没有解决不了的难题!