抽象并量化,构造与化简
2022-06-20郭维艳
郭维艳
摘要:本文以一道奥数推理题展开对培养计算思维的讨论与研究,阐述了计算思维发生的基本过程、思维转化的本质与实质,以及对计算思维各种能力的培养。
关键词:计算思维;程序设计教学;高中
中图分类号:G434 文献标识码:A 论文编号:1674-2117(2022)12-0056-03
● 由“包公断案”开始的思考
笔者首先分析如下奥数题目:
国宝被盗,皇上命包拯一个时辰内断案,现有四名嫌犯甲、乙、丙、丁,包公依次进行了审问。
甲说:我没偷。
乙说:肯定是丙偷的。
丙说:我看到是丁偷的。
丁说:丙诬赖我。
经查证,罪犯为一人,四名嫌犯中仅一人说了假话,你能帮包公迅速断案吗?
这道题情境鲜活,正在学习算法与程序设计的高一学生开始了“假如甲是凶手,那么……”的推理,大家都在通过假设,找出矛盾,讨论得非常热烈。谜底最终揭晓,但过程还是有些曲折。當笔者再增加嫌犯数量或者凶手人数,以及证词的复杂程度时,许多学生的推理就开始混乱了。此时,笔者请计算机帮忙解决问题。
● 边解题边看计算思维的发生
这道推理题尚不算复杂,牵涉四个人及四句证词,凶手也只有一个。从计算机处理问题的角度来看,只要能将问题转化为0或1,计算机就能够顺利解决。如何将这种非计算的问题转化为一个数值,首先可以用关系运算来达到目的。
核心思想:依然是以假设为前提,找出口供逻辑上的矛盾。
具体算法:假设某嫌犯是真正的凶手,利用Python中关系表达式的布尔值可对应参与运算的整型值这一规则,将嫌犯的语言转化为对应的关系表达式,再判断说真话即表达式为真的个数是不是3,从而得出假设是否成立。最后通过枚举,重复以上过程,找出真正的凶手。以上算法,对应了利用计算思维解决实际问题的各个步骤,如下页图1所示。
计算思维的核心在于将实际问题抽象为数学上的已知条件,再将其量化为计算机能够理解并执行的表达式,通过问题中蕴含的关系,建立结构模型,从而设计出算法,并编程实现。
就本题而言,首先提炼出嫌犯数量与对应设置、说真话的人的数量等已知条件。然后将嫌犯供词中的“是”与“不是”用关系运算符的“==”或“!=”来代替,将供词量化为关系表达式,得到真假值。再通过说真话的人数这一已知条件建立结构模型,列出判断条件。最后用Python中的循环遍历结合条件判断结构,编程解决问题。
具体算法可对照利用计算思维解决问题的各步骤(如下页图2)。
● 转化思维——让所有问题都变得“可计算”
计算思维是一种问题解决的过程性思维,它的发生可以以数学思维做基础,但两者又在建构模型、数据处理与表达方式上有所不同,二者相辅相成、优势互补。找准实际生活与算法之间的联系,是计算思维训练的重点。许多问题来源于生活,如果将现实中的实际问题进行抽象,提炼出问题的“可计算”部分,利用数学的方法建构,从而转化成计算机可处理的流程,那么接下来的程序实现,就只是时间问题了。这是一个转化与创造的过程,教师需要培养学生分解、抽象、算法构建的能力,即将所有问题都变得“可计算”的计算思维的能力。
● 计算思维的本质与实质——抽象而后“可执行”
思维的本质是抽象,计算思维的抽象包括数量和模型,以及对象的抽象、数据关系的抽象、规则的抽象。
例如,图书管理信息系统的开发,需要在充分分析需求的基础上,利用计算思维,将一个千头万绪、功能繁多的系统进行各种类型的抽象,从而将大问题转化为小问题,再分而治之,具体如下。
对象的抽象:①用户,②图书,③图书的流动(事件);数据关系的抽象:①借书,②还书,③图书馆藏总库与库存现状的关系;规则的抽象:①图书销毁的规则,②图书借阅册数上限的规则,③借阅人超出借阅时间归还的处理规则,④书籍损坏丢失的处理规则。
经过上述抽象,可以找出几个明确的实体和事件,再根据需求分析的结果,确定实体对象或事件对象的属性,这样一来,E-R图这个概念模型就形成了,它可以清楚地描绘现实中图书馆管理的方方面面,再将E-R图这个概念模型转换为关系模型,从而完成数据库的设计。这样就有了数据库的支撑,并与用户界面做好连接,图书管理信息系统的开发就只剩下编程实现了。
由此看来,抽象是计算思维最重要的要素之一,如何将现实中的问题抽象并量化,为建立模型做好准备,是利用计算机解决问题的关键。而计算思维的实质是将问题转化为计算机可执行的方案,要让机器执行人脑的算法思想,则必须与机器中人为预置的已抽象的协议或接口“打交道”。
● 不断实践是促进计算思维发生的“良方”
在实践中锻炼计算思维,不仅要启发学生在解决问题时有意识地运用计算思维,还要着重培养其在实践中运用计算思维解决问题的各种能力。
1.寻找规律的能力
寻找规律,其实就是归纳、概括现实问题的属性和解决方法,然后对比计算机世界,用计算的方式将问题构造与重现。例如,“百鸡百钱”这道经典的数学题,将公鸡、母鸡、小鸡的数量设为X、Y、Z,再将各自的总价描述为3X、2Y、Z/3,这就是对现实世界中的属性用计算机世界表征事件的方式进行了概括。将百鸡化解为X+Y+Z=100,百钱化解为3X+2Y+Z/3=100,这也正是将现实世界中事物的发展规律和问题解决方法用机械计算的方式在计算机世界中进行构造与重现。
2.算法设计的能力
算法设计能力就是针对一个具体的、现实的、待解决的问题,建立一个有效的、确定的、可执行的、有限的操作步骤,让计算机执行,并能给出结果。如果说百鸡百钱之前的描述、概括、构造与重现与数学思维别无二致,那么用循环的思想实施遍历枚举,将数学上两个方程无法求解三个未知数的常规解法用计算机能够执行的成熟算法来代替,就是算法设计的能力,这也是构造能力在计算机学科中的具体表现。
3.程序编写与纠错的能力
算法是解决问题的方法,需要靠程序设计语言去实现,从而完成自动化解决问题的正确构造。这里的正确构造就是正确的程序代码。学生从分析确定公鸡、母鸡、小鸡的数量范围,到通过初步枚举发现需要循环嵌套,再到确定小鸡数量不用枚举,可以直接通过100-X-Y来确定,最后再利用选择结构将“百钱”方程设为条件,让计算机枚举时进行判断,一旦条件满足百鸡百钱,便可输出结果。这正是操作步骤在人脑中的推演过程,因此得到可执行的程序代码,加上程序输出语句的补充,完善了人机对话的功能,提升程序人性化程度。
推演能力在程序设计与调试环节中的作用显著,推演是利用计算思维解决实际问题过程中非常重要的一步,属于思维到实现的“临门一脚”,它依赖于学生对算法的理解程度以及某个程序设计语言运用的熟练程度。加强这两方面的能力,可以帮助学生更快更好地将算法转化为计算机能够实际操作的代码指令,从而实现从“纸上谈兵”到“机器实战”的演绎。
● 重视教师的“帮助度”
计算思维是眼下信息社会要求的基本能力,是作为数字公民的每个学生必须具备的信息技术核心素养。它依然算是新兴思维,看似不易却又可以习得。这就需要教师运用哲学的智慧,因生而变、调整预期、控制变量、贴生而行、适性发展,教学中不断优化教学策略,看透让计算机“可计算”的思维实质,找准计算思维培养的切入点,用有创意又接地气的例子辅助实战训练,进而让计算思维的培养更加有效,并让学生将这种思维能力迁移到解决实际生活中的其他问题上。
参考文献:
[1]王荣良.计算思维教育中的学生能力分析[J].中国信息技术教育,2020(09):49-52.
[2]许憬.问题解决中计算思维与数学思维的比较研究[J].中国信息技术教育,2020(10):52-55.
[3]徐福荫.普通高中教科书信息技术教师用书·必修1:数据与计算[M].广州:广东教育出版社,2019.
[4]费海明.计算归简,分合衍变——计算思维内涵探析与教学创意[J].中国信息技术教育,2020(20):85-88.