欢迎来到计算思维的世界!
你有没有试过面对一个巨大的难题——比如兴建一座摩天大楼,或是编写下一个热门电子游戏——然后心想:「我到底该从哪里开始?」别担心,即使是世界上最顶尖的程序员也有过这种感觉!
计算思维(Computational Thinking)是一套像「大脑工具」一样的方法,能帮助我们像电脑一样解决复杂的问题。在本章中,我们将探讨其中两个最重要的工具:分解(Decomposition)和抽象(Abstraction)。读完这些笔记后,你会发现你其实每天都在运用这些技巧!
1. 分解(Decomposition):化整为零
分解就是将一个庞大且复杂的问题,拆解成若干较小且更易于处理的部分。
把它想像成一个巨大的拼图。你不会试图一次拼好所有 1,000 块碎片;你会把工作拆成较小的任务,例如「找出角落的碎片」、「挑出天空的蓝色碎片」以及「拼好边框」。
为什么分解很有用?
- 减少压力:解决几个小问题远比处理一个超级大难题容易得多。
- 团队合作:不同的人可以同时处理问题的不同部分。
- 可重用性:一旦你解决了其中一个小部分,你可能可以在另一个问题中重复使用该解决方案。
现实生活中的例子:策划生日派对
如果你只说「策划一个派对」,很难知道从何入手。如果你运用分解,你会得到一张检查清单:
1. 拟定宾客名单。
2. 选择场地。
3. 预订食物。
4. 发送邀请函。
处理这些细项可比直接面对「整个」派对简单多了!
快速复习:分解
定义:将问题拆解成较小的子问题。
核心重点:它能让复杂的任务更容易管理、测试及分配给他人处理。
2. 抽象(Abstraction):专注于重点
抽象就是移除不必要的细节,让你能够专注于问题中最关键的部分。
在计算机科学中,我们运用抽象来建立一个现实世界的「模型」,这个模型只包含我们程序运行所必需的部分。
地图的类比
想想看伦敦地铁(Tube)的地图。
它能 100% 准确地呈现伦敦吗? 不能!它没有显示树木在哪里、天气如何,也没有显示路轨实际的弯曲程度。
这就是抽象的实际应用。制图者移除了「不必要」的细节(如建筑物和山丘),只保留了核心信息(车站和路线),以协助你从 A 点到达 B 点。
为什么要使用抽象?
- 降低复杂度:忽略无关紧要的细节,问题就会变得更简单。
- 节省时间:你不必浪费精力去编写不必要的代码。
- 提高效率:当程序不会被无用的数据拖累时,运行起来会更顺畅。
避免常见错误
学生经常会混淆分解与抽象。只需记住:
- 分解 = 将大东西拆解成更小的部分。
- 抽象 = 移除额外的细节。
快速复习:抽象
定义:移除不必要的细节,以专注于核心特征。
核心重点:它让我们能为复杂的系统建立简化的模型。
3. 子程序(Subprograms):迷你程序的力量
在编程时,一旦我们将问题分解成较小的部分,我们通常会使用子程序来编写这些部分的代码。这些是能执行特定任务的独立代码块。
使用子程序的好处
对程序员来说,使用子程序是一种「专业级操作」。原因如下:
1. 避免重复:不需要将同样的 10 行代码写五次,你只需写一次子程序,然后在需要时「调用(call)」它即可。
2. 更易于测试:你可以一次测试一个子程序,确保它完美运行后,再将其加入主程序中。
3. 提升可读性:阅读写着 calculate_score() 的程序,肯定比阅读中间隐藏了 50 行复杂数学运算的程序容易得多。
你知道吗?
你会用到两大类主要的子程序:
- 过程(Procedures):执行一项任务(例如「在屏幕上显示文字」)。
- 函数(Functions):执行计算并返回(return)一个值(例如「计算总金额」)。
核心重点:子程序
子程序协助我们实现已分解的解决方案。它们使代码更具模块化(modular),意味着代码是由独立且可重用的「组块」所构建的。
章节总结与记忆小撇步
如果这些术语起初让你觉得有点「学术感」,别担心。只要记住这个简单的记忆技巧:
「建筑师法则」
- 分解:建筑商将「房屋项目」拆解为「水管工程」、「电路工程」和「砌砖工程」。
- 抽象:建筑师关注蓝图(核心线条),而不是花园里花的颜色。
- 子程序:水管工每次看到水槽时都会使用标准的「管道连接」技术,而不是每次都发明一种新的连接方法。
考试快速检核表:
- 你能定义分解吗?(将问题拆解)。
- 你能定义抽象吗?(移除不必要的细节)。
- 你能说出子程序的一个好处吗?(可重用性/可读性)。
- 你能解释地图如何作为抽象的例子吗?(专注于路线,忽略建筑物)。