计算思维:编程的超能力
想象一下这样的场景:周末的下午,阳光透过窗户洒在地板上,你面前摆着一盒刚拆封的全新乐高玩具。盒子里有几百个小零件——红色的、蓝色的、黄色的,各种形状的砖块、齿轮、小人仔,还有一张看起来密密麻麻的组装说明书。你兴奋地打开盒子,却发现里面的零件散落得到处都是,完全不知道从哪里开始。
大多数小朋友可能会随手拿起一块砖就开始往上拼,结果拼到一半发现位置不对,或者发现缺少某个关键零件,整个作品摇摇欲坠,最后不得不沮丧地拆掉重来。但你仔细观察那些拼乐高特别厉害的小朋友,会发现他们做事情的方式很不一样。他们不会急着动手,而是先把所有零件按照颜色和形状分类摆好,仔细研究说明书上的第一步和第二步,找到对应的零件组装好,然后再继续下一步。遇到特别复杂的步骤,他们甚至会先在脑海里或者用笔画出大致的样子,想清楚每个部分之间的关系,再动手去拼。这种做事方法,其实就是计算思维的核心。
计算思维听起来是一个很高大上的词,但实际上它一点都不神秘。我们每天都在不知不觉中使用计算思维,只是以前没有人告诉过你,这套思考方法还有这么好听的名字。简单来说,计算思维就是用计算机的方式来思考问题和解决问题的方法。注意,这里说的“计算机的方式”并不是让你变成一台冷冰冰的机器,而是学习像程序员和科学家那样,去系统化地分析问题、拆解问题、找出规律、制定计划,最后把解决方案变成清晰的步骤。
为什么计算思维这么重要呢?因为我们生活的这个世界正在被数字技术深刻改变。无论你将来想做什么——成为科学家、医生、艺术家、运动员,还是自己创业开公司,都需要一种能力:面对复杂问题时,能够冷静分析、找到关键、一步步解决。而计算思维正是培养这种能力的最好方法。著名计算机科学家周以真教授在2006年首次系统提出计算思维这个概念时,她打了个比方:计算思维是每个人都应该掌握的第三种基本技能,就像所有人都需要学习阅读、写字和算术一样重要。第一种是读写能力,让你能够理解书面文字和表达思想;第二种是计算能力,让你能够处理数字和进行逻辑推理;第三种就是计算思维,让你能够像计算机科学家一样思考问题。
现在让我们来具体看看计算思维的四个核心技能。第一个技能叫做分解问题,英文叫Decomposition。你有没有遇到过这种情况:老师布置了一个大作业,要求写一篇关于你最喜爱的动物的文章。一看到“文章”两个字就懵了,不知道从哪里开始。这种时候,分解问题的方法就能帮到你。你可以把“写一篇关于动物的完整文章”这个大任务,拆分成几个小任务:先想想要写哪种动物,是熊猫、企鹅还是小狗?然后去收集这种动物的资料,比如它长什么样、喜欢吃什么、生活在哪里、有什么有趣的习惯。接着列一个大纲,想想开头怎么写、中间介绍哪些方面、最后怎么结尾。最后才是真正动笔写,或者在电脑上打字。拆成小任务之后,你是不是感觉任务没那么可怕了?而且每完成一个小任务,你都会有成就感,这种成就感会推动你继续前进。
乐高拼装的过程也是分解问题的好例子。看看那些复杂的乐高套装,盒子上印着漂亮的成品图,看起来超级酷。但你仔细研究会发现,所有的复杂作品都是由一个个小的模块组装起来的。说明书通常会分好几个阶段:第一步组装底盘,第二步组装主体结构,第三步添加细节装饰,第四步安装可动部件。如果你一次想把所有零件都拼上去,肯定会手忙脚乱。但按照说明书的顺序,一步一步来,最后就能拼出那个超酷的作品。分解问题的精髓就在这里:把一个看起来无法完成的大任务,变成一个个可以轻松搞定的小任务,然后一个一个解决。
第二个技能叫做发现规律,英文叫Pattern Recognition。人类的大脑特别擅长发现规律和模式,这种能力在很久很久以前就帮助我们的祖先在自然界中生存下来。当原始人看到天空变暗、乌云聚集,他们能发现“乌云来了可能要下雨”这个规律,于是赶紧找地方躲雨。这种发现规律的能力,在现代社会同样重要,而且计算机科学家特别擅长利用规律来简化问题。
举个生活中的例子。假设你的妈妈让你帮忙整理衣柜里的衣服。她把春夏秋冬四个季节的衣服全混在一起扔给你,说:“把这些衣服整理好,按季节分类放好。”你看着堆成小山的衣服,如果一件一件地检查、判断是哪季的衣服、再放到对应的箱子里,会花很长时间。但如果你仔细观察一下,就会发现规律:夏天的衣服一般比较薄、颜色浅、面料轻;冬天的衣服比较厚实、颜色深、可能是毛衣或羽绒服;春秋的衣服厚度中等,有些是外套。而且衣服上通常会有标签写着材质,袖子的长短也能提供线索。发现这些规律之后,你整理衣服的速度就会快很多——看到薄的就先挑出来,问问妈妈或自己判断一下是夏装还是春秋装,厚的就先放一边,等最后再处理。
在数学和编程中,发现规律更是至关重要。比如老师让你计算“1+2+3+4+5+...+100”等于多少。如果你老老实实地从1开始加,加到100需要做99次加法运算,既费时间又容易出错。但如果你仔细观察这个数列,会发现一个有趣的规律:1+100=101,2+99=101,3+98=101……一直到50+51=101。这样的组合一共有50对,所以答案是101×50=5050。这就是发现了数列的规律,然后利用规律来简化计算。大数学家高斯小时候就用了这个方法快速算出了这道题,震惊了他的老师。
第三个技能叫做抽象建模,英文叫Abstraction。这个词听起来比较抽象,但其实不难理解。抽象的意思是,从复杂的事物中提取出最重要的本质特征,暂时忽略那些不重要的细节。就像画一幅简笔画:真实的人有毛孔、细纹、痣、雀斑、各种颜色的头发,但简笔画只需要画出最重要的部分——圆圆的头、长长的四肢、基本的五官位置,人们一看就知道这是一幅人物的画,而不会被那些细节干扰。
让我们通过一个游戏来理解抽象建模。想象你在设计一款最简单的迷宫游戏。你需要决定:迷宫有多少条路?起点在哪里?终点在哪里?路上有没有障碍物或者奖励物品?怎么判断玩家赢了或者输了?这些是迷宫游戏的“本质”——没有它们,这个游戏就不存在。至于墙壁是什么颜色、地板是什么花纹、背景音乐是什么风格,这些是“细节”,可以根据喜好随意更改,但不会影响游戏能不能玩。抽象建模的能力,就是让你能够区分什么是本质、什么是细节,把精力集中在最重要的部分。
科学家和工程师每天都在做抽象建模的工作。设计一座桥梁的工程师,不会去考虑桥梁的每一颗螺丝钉具体长什么样、是什么材质,他们关心的是桥的整体结构能不能承受重量、跨度有多大、选用什么主要材料。至于螺丝钉、焊接点这些细节,会有专门负责这些部件的工程师去处理。程序员写程序也是在做抽象建模:他们需要决定程序要做什么、有什么功能、用户怎么交互,这些是本质;但程序界面用什么字体、什么颜色、动画效果多炫酷,这些是细节,可以后续调整。一个优秀的程序员,一定是个抽象建模的高手。
第四个技能叫做设计算法,英文叫Algorithm。算法就是解决问题的详细步骤和方法。就像做菜有菜谱一样,算法就是给计算机看的“菜谱”。只不过菜谱的读者是人类,可以含糊地说“加适量盐”、“火候适中”,但算法的读者是计算机,必须精确到每一步做什么、怎么做、做到什么程度。
设计算法听起来很专业,但其实我们从小就在学习设计算法。还记得你是怎么学会系鞋带的吗?一开始你可能需要大人手把手教你:先把两根鞋带交叉,然后把左边那根从下面穿过去,拉紧,接着打个结,再把两根鞋带分别弯成兔耳朵的形状,交叉,再从下面穿过去,拉紧。好,现在你已经掌握了一个系鞋带的“算法”。这个算法可以教给其他小朋友,让他们也学会系鞋带。如果算法写得清楚正确,任何人按照步骤做都能系好鞋带;如果算法写得不清楚或者有错误,别人照着做就会失败。
著名的“鸡块问题”能帮助我们理解算法优化。假设快餐店卖鸡块,6块鸡块卖9元,问你有60元最多能买多少块鸡块。一种方法是直接算:60元能买6份6块鸡块,所以是36块。但你发现没有,如果你把“6块”看成“一份”,那就是简单的除法:60÷9=6份...6元余6元,所以答案是6×6=36块。更聪明的算法可能还会考虑:有没有什么方式能更省钱?比如有些店会推出促销活动?但在这个简单问题里,我们用到的算法就是简单的除法。算法的本质就是:用最少的步骤、最简单的方法,得到正确的答案。
计算思维的这四个技能——分解问题、发现规律、抽象建模、设计算法——不是孤立存在的,它们往往需要配合使用。解决一个复杂问题,通常需要先分解成小问题,再在每个小问题里发现规律、抽象出关键信息,然后设计算法来解决,最后把所有小问题的解决方案组合起来得到最终答案。听起来有点复杂?别担心,我们通过一个完整的例子来练习一下。
让我们想象这样一个挑战:你的学校要举办才艺大赛,你想用编程做一个“自动计分系统”。参赛选手表演完,评委打分(1到10分),系统自动算出平均分,去掉一个最高分和一个最低分,然后排出名次。这个任务看起来不简单,但用计算思维来拆解,就变得可以完成了。
首先是分解问题:我们可以把这个大任务分成几个小部分。第一部分:接收评委的分数;第二部分:找出最高分和最低分;第三部分:计算去掉最高分和最低分后的平均分;第四部分:比较所有选手的平均分排出名次;第五部分:显示最终结果。分解之后,每个小任务看起来都不太难了吧?
其次是发现规律:在“找出最高分和最低分”这个问题上,我们可以发现一个规律:要找最高分,可以先把第一个分数假设为最高分,然后一个一个和其他分数比较,如果发现更大的就更新。再比如算平均分,数学上有公式:总和除以数量 = 平均值。发现这些规律后,我们就有了解决问题的思路。
接着是抽象建模:我们不需要考虑评委是男是女、选手穿什么衣服、比赛在哪个教室进行这些细节。我们只需要关心几个关键信息:选手的名字或编号、每个评委打的分数、最后算出来的分数和名次。这就是抽象——提取本质,忽略无关细节。
最后是设计算法:现在要为每个小问题设计具体的步骤。比如找最高分的算法可以这样写:第一,把第一个分数设为当前最高分;第二,依次检查其他分数,如果比当前最高分大,就更新;第三,检查完所有分数后,当前最高分就是最高分。这个算法清晰明确,计算性能也很好——只需要把每个分数看一遍就够了。
看,通过计算思维的四步走,一个看起来很复杂的问题被拆解成了可以解决的小问题,而且解决的方法是系统化、可重复的。下次遇到类似的计分任务,你甚至可以直接复用这个思路。
现在你可能会想:计算思维听起来很有用,但我真的要学编程才能掌握它吗?其实不然。计算思维是一种思维方式,可以在很多不需要编程的场景中练习。但如果你想更深入地掌握计算思维,编程是非常好的练习工具。因为编程要求你把模糊的想法变成精确的步骤,把心里的意思变成计算机能理解的指令,这种训练能极大地锻炼你的计算思维能力。
说到编程,就不得不介绍我们这本书的两个重要伙伴:Scratch和Python。
Scratch是由美国麻省理工学院(MIT)媒体实验室专门为青少年和编程初学者设计的一种编程语言。它的最大特点是用“搭积木”的方式来编程。你不需要记忆复杂的英文单词和语法,只需要把不同颜色、不同形状的代码块拖拽到一起,就能让程序运行起来。就像搭乐高一样,只不过拼出来的不是玩具,而是动画、游戏、故事等数字作品。
Scratch的界面设计得非常友好和直观。在Scratch里,你可以创建角色(叫做“小猫”、“小精灵”等),给它们添加造型和声音,然后用代码块控制它们的行为。比如你想让小猫从左边走到右边,只需要几个简单的代码块:先设置小猫的初始位置,然后重复执行“移动10步”和“等待0.1秒”这两个动作,小猫就会平滑地从左边移到右边。如果你学过前面的计算思维知识,你会发现这就是一个简单的“循环”算法:重复执行相同的步骤,直到到达目标位置。
Scratch特别适合作为编程的入门工具,原因有几点:第一,它完全免费,在任何电脑上打开网页就能用;第二,它把复杂的编程概念用可视化图形表示出来,降低了学习门槛;第三,它有强大的社区,全球几千万用户在分享自己的作品,你可以学习别人的创意,也可以把自己的作品展示给世界。在Scratch上,你会学到变量、条件判断、循环、事件、消息传递等编程基础概念,这些概念在所有编程语言中都是相通的。
等你掌握了Scratch的基础,对编程有了一定的感觉,就可以开始学习Python了。Python是一种真正的“专业”编程语言,全世界有数百万专业程序员在使用它,从网站开发到人工智能,从数据分析到科学计算,到处都有Python的身影。但Python同时也是公认的最适合初学者的专业语言之一,因为它语法简洁、逻辑清晰、可读性高,入门比很多其他语言容易得多。
如果把Scratch比作乐高入门套装,那Python就像是工业级的精密零件。乐高能让你快速搭建出有趣的作品,培养空间思维和动手能力;但如果你想建造真正的建筑、桥梁、汽车,就需要更专业、更精密的工具和材料。Python就是这样的工具:它功能强大,但学习曲线平缓;它应用广泛,但语法简单。
Python的代码看起来像什么呢?让我们看一个简单的例子,用Scratch和Python分别实现“让小猫说'你好'"这个功能:
在Scratch中,你需要把一个“说'你好'”的代码块拖到代码区,然后点击它,小猫就会说话。
在Python中,你需要写: ```python print("你好") ``` 然后运行程序,屏幕上就会显示"你好"。
这就是Python的风格:简单、直接、不多余。用更少的代码,做更多的事。而且Python的代码读起来很像英语,比较容易理解。等你学了变量、循环、条件判断等概念之后,Python会让你感受到编程的强大能力。
为什么要同时学习Scratch和Python呢?因为它们有不同的作用。Scratch让你在轻松愉快的环境中理解编程的基本概念,培养计算思维,通过拖拽和组合来建立“程序是怎么工作的”的直观感觉。Python则让你接触真正的编程语法和更强大的功能,为以后深入学习打下基础。打个比方,Scratch像是学游泳时的浮板和浅水区,让你在安全的环境中练习动作;Python像是真正的泳池和江河湖海,让你在更广阔的世界里畅游。两者结合,既能保护学习兴趣,又能扎实掌握技能。
我们再来看几个生活中的计算思维例子,看看它到底有多实用。
第一个例子是如何整理自己的房间。很多小朋友觉得整理房间是个大工程,无从下手。但如果用计算思维来思考,就会清晰很多。首先分解问题:整理房间可以分成几个区域——书桌、床铺、衣柜、地面、书架。发现规律:你会发现物品通常有自己的归属位置——书应该在书架上、衣服应该在衣柜里、玩具应该在收纳箱里。抽象建模:不需要考虑每本书的具体摆放角度,只需要保证它们在书架上;不需要考虑衣服叠得多整齐,只需要保证它们在衣柜里。设计算法:可以从一个角落开始,从上到下、从里到外,依次整理每个区域。整理完一个区域就检查一遍,确认达标后再进入下一个区域。这样一来,整理房间就变成了一个可以执行的任务清单,不再那么可怕了。
第二个例子是如何安排一周的学习计划。首先分解问题:把一周需要完成的所有学习任务列出来,包括各科作业、复习任务、预习任务、兴趣班等。发现规律:你会发现有些任务是每天都要做的(比如练字、阅读),有些任务是每周几次的(比如某科补习),有些任务是一次性的(比如完成某个项目)。抽象建模:不需要精确到每分钟的安排,只需要确定每天要完成哪些任务。设计算法:可以按重要程度和紧急程度来安排——又重要又紧急的先做,重要但不紧急的合理分配时间,不重要也不紧急的最后看情况处理。这样安排出来的计划既全面又不会手忙脚乱。
第三个例子是玩数独游戏。数独是一种数字填字游戏,需要在9×9的方格中填入数字1到9,使得每行、每列和每个3×3的小宫格内的数字都不重复。高手玩数独的策略正好体现了计算思维。分解问题:先把数独分成9个小宫格,分别解决每个小宫格。发现规律:如果发现某行已经填了8个数字,那么缺失的那个数字必然是唯一没出现的。抽象建模:不需要记住每个格子的历史,只关心当前每个行、列、宫格里有哪些数字。设计算法:常用策略包括“排除法”(根据同行列宫已有的数字排除不可能的选项)、“唯一法”(找到某行某列某宫中唯一能填某数字的格子)等。
通过这些例子,你会发现计算思维不只是一种“编程专用”的思维方式,而是一套可以应用于生活、学习、游戏各个方面的通用方法。掌握了它,你就拥有了一把打开难题大门的万能钥匙。
最后,让我们把目光投向未来。计算思维为什么在今天这个时代特别重要?因为我们正处于一个被称为“数字化转型”的历史进程中。人工智能、大数据、物联网、区块链……这些听起来很酷炫的科技概念,正在深刻地改变我们工作、生活、社交的方式。而这些技术的背后,都离不开程序和算法。换句话说,理解程序和算法的人,就掌握了理解未来世界的钥匙。
这不是说每个人都要成为程序员,就像不是每个人都要成为作家,但我们都需要有读写能力。计算思维就是这样一种基础能力——它让你能够理解数字世界是如何运转的,让你在面对技术问题时不会感到害怕和无助,让你在解决问题时多一套系统的思路和方法。无论你将来从事什么职业,这种思维方式都会帮助你更高效地工作、更聪明地思考、更创造性地解决问题。
而且,学习编程和计算思维还有一个额外的好处:它会让你变得更加有耐心、更加注重细节、更加擅长逻辑推理。写程序的过程需要你非常精确地表达意思,不能有任何含糊——因为计算机不会“猜”你想要什么,你必须把每一步都说清楚。这种精确表达的训练,对其他学科的学习和日常生活中的沟通都大有裨益。
好了,关于计算思维我们就聊到这里。你已经知道了计算思维是什么,它包括分解问题、发现规律、抽象建模、设计算法四个核心技能,也了解了Scratch和Python两位编程伙伴。你已经为接下来的学习之旅做好了准备!
在接下来的章节中,我们将正式进入编程世界。你会学会用Scratch创建自己的动画和游戏,体会编程的乐趣;同时也会学习Python的基础知识,打下坚实的技术基础。每学完一个知识点,你都可以动手实践——编程不是看的会的,是做出来的!
记住,学习编程就像学习任何新技能一样,需要耐心和练习。遇到困难是正常的,犯错误也是学习的一部分。每一个厉害的程序员,都是从写不出程序开始的。你要做的就是:保持好奇、敢于尝试、不断练习。相信我,当你看到自己创作的程序成功运行的那一刻,那种成就感是无与伦比的。
让我们一起踏上编程探险之旅吧!下一章,我们将正式认识Scratch这个有趣的工具,开启我们的第一个编程项目。期待在那里见到你!
深入理解计算思维的四个核心技能
现在我们已经对计算思维有了初步认识,接下来让我们更深入地探讨它的四个核心技能。理解这些技能的深层原理和更多应用场景,会帮助你在面对各种问题时更加游刃有余。
分解问题:化繁为简的艺术
分解问题是计算思维中最基础也最重要的技能。它的本质是什么?就是把一个复杂的、模糊的、不知道从哪里下手的问题,拆分成几个小的、清晰的、可以分别解决的部分。这种思维方式之所以强大,是因为人类的大脑在处理复杂问题时