王苏明 江苏省南京市龙江小学
如果要推选近年来信息技术学科的“网红”词汇,“计算思维”当选一定是当仁不让。中科院徐志伟总工指出,“计算思维是一种本质的、所有人都必须具备的思维方式,就像识字、做算术一样。”他更提出了“在2050年以前,应该让地球上的每个公民都具备‘计算思维’能力”的愿景。美国卡内基·梅隆大学计算机科学系主任周以真(Jeannette M. Wing)教授在接受专访时解释说,“计算思维就是像计算机科学家一样思考。”然而对于一线教师而言,知易行难,这些听起来很美好的想法,想要在小学信息技术课堂上呈现,似乎仍缺少切实可行的途径。
在刚刚进行的一次主题为“基于计算思维的儿童编程教学研讨”的区内教研活动中,教师的发言很能说明现状:
师1:我觉得我们的教研活动的主题不应该哗众取宠,写“小学编程教学实践”就行了,不要老是追热点,动不动就计算思维,说半天,我就觉得还是原来的编程课嘛!
第一位发言的教师是一位资深的信息技术教师,从开设信息技术课开始,他就一直教这门学科,在编程竞赛方面获得过很多成绩。他的发言马上获得了不少教师的赞同。
师2:李老师说得没错,热点热点,总是来得快去得也快,追热点追名词没有意义,重要的还是把课上好。老是炒作热点,一点儿新意都没有,就像计算思维的概念解释,我都能背了,但谁能把“计算思维”说得能让学生都懂?还让小学生“像计算机科学家一样思考”,真的离得太远了!
师3:是的,是的。不单单是计算思维,还有什么“抽象”“建模”这些概念,能有几个学生是真正明白的?我看老师都说不清楚!
师4:刚才几位老师的意见,我不是完全赞同,计算思维之所以能有这么长时间的热度,说明它一定有值得思考的地方,要不去年发布的高中新课程标准也不会把它列为学科核心素养之一。但是很多课,确实如大家所言,只是冠以“计算思维”的名字,实际和原来的课并没有大的改变,或者说没让我们一下子就感觉到,这节课里确实能看到“计算思维”的影子。
一场主题为“计算思维”的教研活动,最后差点演变成了一场批判“虚无浮躁”主义的挞伐会。笔者恰巧即将承担下一期区教研活动,主题是“体验程序设计 落地计算思维”,看来今天的“球”必须要接下了。
不能免俗,概念还是要从源头理起。2006年3月,周以真教授在美国计算机权威期刊Communications of the ACM杂志上给出并定义了计算思维(Computational Thinking)。周以真认为,计算思维是运用计算机科学的基础概念进行问题求解、系统设计,以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。问题来了,这种“硬科学”的描述方式是不是在某种程度上成为了师生理解“计算思维”的一种“障碍”?我们再来看看,陈国良院士在《计算思维与大学计算机基础教育》一文中对“计算思维”中的几个明确观点做的更进一步的说明:①是概念化,不是编程化;②根本的,不是刻板的技能;③是人的,不是计算机的思维;④是思想,不是人造品;⑤数学思维与工程思维的互补与融合;⑥面向所有的人,所有地方。这样一解释,清晰了不少。再简单地说,“计算思维”应该是人类所应具备的一种思考方式,一种运用计算机科学的基础概念解决问题的思路。同时,根据人类和机器各自擅长的领域,计算思维对问题解决做出了“分工”:人类负责思考,机器负责求解。再直白一点地表述就是:人类负责把实际问题转化为可计算的问题,并设计算法让计算机去执行,计算机负责具体的运算任务。这一过程完成了思考和求解之间的链接,这也正是我们要带给学生的,体现计算思维最核心的两个特征:抽象(Abstraction)和自动化(Automation)。那么,抽象是什么?简单一点地说,做三件事:一是对问题做分析和描述,找到一种数学上的表达;二是在数学表达的基础上,找到解决的方法,这就是常说的算法;三是通过编程,把这个算法告诉计算机。计算机根据算法,一步步执行指令,求出结果,就是自动化求解。
到此,概念基本厘清了,也基本能回答本次教研活动时诸位教师的质疑了。但又如何在小学Scratch教学中实施呢?这还需要听得见看得着的课堂实践。笔者设计了《有趣的概率》一课,具体实施过程做以下阐述。
《有趣的概率》是Scratch“数值与逻辑运算”单元的综合应用课,是学生应用Scratch模拟求解生活中实际问题的拓展课,引导学生根据不同场景有效运用Scratch解决实际问题,体验“抽象”到“自动化求解”的计算思维实践路径。本课的主要学习目标如下:①如何在计算机中表达生活中的“事与物”;②能够应用随机数模拟实际生活中发生的概率事件情境;③搭建脚本尝试通过条件判断进行求解。
本课我们选择了学生熟悉的场景进行导入:“同学们,你们知道在足球、篮球等球类比赛项目,裁判员是用什么方式决定哪一方先开球的吗?这个人们约定俗成的规则是否公平?有办法证明吗?”大多数学生认为这种方法是公平的。教师再请学生小组讨论,能否设计一个实验来支持验证自己的结论。学生都通过抛硬币记正反的方法进行小组实验。各小组汇报后,发现了问题:在10组实验中,有的组硬币正面达到了8次,有的组反面也有7次,各组数据差异较大,很难支持之前的结论。学生一致认为:次数有限的实验很难证明自己的结论,可能需要“成千上万”次实验才有说服力。教师适时提出要请计算机帮忙,模拟这样的概率事件,从而引出第一个问题:如何在计算机中表示硬币的“正”与“反”?计算机显然更擅长处理数字,学生很快就能说出用0/1或1/2等数字表示。这个过程就完成了最简单朴素的抽象,用数字0和1表示硬币“正”与“反”两种状态,将人工记录“正”“反”转换成了计算机得到0或1的次数。
经验1:链接生活。将现实问题转换成数学问题,是计算思维实践的第一步,这也使得计算机介入问题求解成为可能。比如,我们运用百度地图进行出行路线规划,其前提是所有物理存在的建筑或地点都在地图里坐标化了;我们用美团外卖进行点餐,各类美食或商家活动都被货币化了;我们去医院体检,看到的各项生理机能的描述也被指标化了。这些我们在终端上的所见,都是科学家们做了大量的工作后,用户所能看到的结果,这些工作的第一步就是将生活中的“事与物”用数字表示,以便让计算机可以处理。那么,如何让小学生“像科学家一样思考”呢?链接生活,选择一个简单可理解的生活现象进行“数学化”尝试,就是一种切实可行的选择。
在本次“抛硬币”的模拟实验中,学生很快会想到这样的问题:计算机如何模拟不确定的结果?在该实验中,硬币只有两种状态,因此,我们只需要获得0或1两个数字即可。需要获得有范围又不确定的数字,选择随机数也就顺理成章了。随机数是不确定的数,我们需要建立变量“模拟”来记录每次随机数控件获得的值。每得到一个值,通过条件判断,计算机就会给正的次数或是反的次数进行累加,累加的结果也需要呈现,因此,还需要建立变量“正的次数”和“反的次数”记录整个模拟实验最后的结果。有了以上分析,再用自然语言描述计算机模拟“抛硬币”实验的过程就不再是难事了。这样可清晰描述的问题解决方法其实就是算法。
真实世界中的“事与物” 计算机处理的方式 Scratch中对应的功能块硬币的正反面 数字表示:0/1不确定的结果 随机数条件判断正与反的次数累加多次实验 重复运行
经验2:鼓励表达。Scratch和其他编程语言有所区别的是,它有着和自然语言相似的表达结构,一定要鼓励学生尝试用自然语言描述清楚问题的解决方案,这样的梳理过程就是算法产生的过程。而且,Scratch允许时刻进行“自下而上的修补(bottom-up tinkering)”,这就更符合小学生的心智特点:往往不能一次说全,需要一定的“容错”空间。这样,学生在发现自己方案不足时,可以随时修补,其实正是这种看似“随意”的过程,却给学生带来了更友好的算法体验,让小学生更能理解算法的本质。
有了明确的算法,接下来就是脚本搭建了。这一过程就是学生经历了任务分析、指令选择之后的编程组织,是人类完成思考,将解决问题的方案传递给计算机的过程。这一过程的完成也就意味着计算思维中“人机分工”的完成,这一过程也是帮助学生逐步形成“任务—指令—序化”程序设计思想的必要途径。那么,如何有效有序地帮助小学生来完成这一过程呢?我们提供了下列转换表(见上表),学生对照表格再去完成搭建,较为轻松地全部完成了“抛硬币”的实验脚本搭建任务。
经验3:提供支架。Scratch虽然有着众多适合小学生学习的优点,但从算法变为程序,对小学生而言仍然是一种挑战。如何分层化解这些挑战?使用学习支架,是一种很好的辅助方式。学习支架帮助学生梳理计算机解决问题的过程,完成从自然语言描述向Scratch脚本转换的过程。这种支架可以帮助学生转换获得的信息,使所学知识更为清晰、易于理解。在学生初学阶段进行这种转换练习,可以很好地锻炼学生的逻辑分析能力。实际上,这种将真实世界中的“事与物”表示为计算机可以处理的方式,再向Scratch脚本转换的过程,也就是抽象与建模的过程。
在随后的教学中,我们又给学生提供了两种变式情境。第一种问题情境如下:投掷常见的六面骰子。问题解读如下:如何在计算机中表示骰子不同的面?又如何模拟每次获得的不同结果?如何记录某一面的次数?有了“抛硬币”的例子,绝大部分学生都能很好地完成“色子”问题。第二个问题是经典的“车羊游戏”:有3扇关闭着的门,其中两扇门后面各有一只羊,另一扇门后面有一辆车。游戏中有一位游戏者和一位主持人,主持人事先知道各扇门后的物品,游戏者不知情。游戏过程如下:①游戏者随机选定一扇门;②在不打开此扇门的情况下,主持人打开另一扇有羊的门;③此时面对剩下两扇门,游戏者有一次更改第一次选择的机会。问题如下:如果想选到车的概率更大,游戏者是否应该改变第一次的选择?请学生说说自己的选择,并用Scratch编程验证自己的推论。面对这一经典问题,学生仍然可以“扶着架子过河”,只是在“过河”的过程中,多跨一道坎,在抽象建模时,规则会有一定的变化,比如,门和羊在符号映射是可以一一对应的,但在统计时,又会变成打开两扇门都会触发选到羊的次数的累加。这个问题设计有一定的难度,原来是打算放在课后完成,但前两个问题较圆满地完成,也给了学生当堂尝试的时间和信心,完成情况也大大超出预期,每个小组也都有学生搭建成功!
经验4:梯度设计。在一堂课中,围绕目标达成设计的任务一定要有梯度,本节课的两个问题情境,“色子”问题的目的是为了验证与巩固刚刚建立的计算思维实践路径,让学生学会运用支架完成转换,学生的达成度很高,也证明了这是一条切实可行的问题解决路径;“车羊问题”,从模式识别来说,仍然是聚类问题,但又有了较大坡度的提升,学生在面对这样的变式情境时,既能体会到计算思维确实是“看得见”的,又能帮助学生加深对计算思维中抽象的理解,达到思维训练上的提升。
一节课下来,教学的思路,学生的表现,都得到了听课教师的一致认可。李老师在评课时说:“这堂课,虽然教师课堂上没有提到‘计算思维’四个字,但是,我看到了学生解决问题的过程,看到了学生看到计算机执行后得到数据时的兴奋,体会到了学生的成长,我想这样的课堂才是真正意义上的基于‘计算思维’的课堂。”王老师说:“我曾经听过微软刘康平博士讲计算思维的演讲,感觉今天课堂的设计和刘康平讲的例子有异曲同工之处,也让我本人对计算思维有了更直观的理解。”郭老师说:“这节课,给我最深的影响是对‘学会学习’四个字的理解:学生从将硬币正反面抽象成0/1到将车、羊抽象成1/2/3,从自然表达到利用支架转换,从简单情境的处理到复杂变式的应对,都让我体会到了‘学会学习’的重要性,也让我感觉到‘计算思维’在课堂落地是切实可行的。”大家的认同,也是笔者“作文以记之”的最初动力,后面笔者作为主持人又和几位志同道合的教师成功立项了计算思维应用于小学Scratch教学的市级规划课题,这是后话。
“计算思维”被确立为信息技术学科核心素养之一,对于信息技术课程的发展无疑有着深远的影响,但课程的实施归根到底还是依靠一线教师去推动。因此,一线教师如何在课堂渗透、实践“计算思维”,使得“计算思维”能够被学生“看见”,必然成为学生发展的关键。本文仅从学生立场出发,对“计算思维”在小学Scratch课堂的实践落地做了粗浅的思考,探究了运用“计算思维”解决实际问题的可行路径,带领学生认识了计算思维的核心特征——“抽象”和“自动化”,以期抛砖引玉,引起一线教师的重视与思考,为“计算思维”落地小学信息技术课堂带来更多的可行性和可能性。