计算思维:编程教育的价值追求

时间:2022-07-14 07:19:58

计算思维:编程教育的价值追求

我们在“编程”的旅途中,时常有茫然失措、忘了初心的感觉。为什么要踏上编程之旅?为什么要带孩子们一起编程?有个声音不早不晚地出现:因为通过编程,可以让孩子们拥有与读、写、算同等重要的认知能力――计算思维!

是的,计算思维是我们俯下身子和计算机对话的入口,也是编程学习漫漫历程中对编程学科本质的一种洞见。

计算思维的提出,最早可回溯到美国麻省理工学院(MIT)的西蒙・帕佩特(Seymour Papert)教授。美国卡内基梅隆大学的周以真教授则对其进行了系统阐述和推广。周以真教授认为,计算思维代表着一种普遍的认识和一类普适的技能,每一个人,都应热心于它的学习和运用。而习得计算思维,则能让我们“像计算机科学家一样思考”。对于计算思维,她是这样定义的:“计算思维涉及运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为。计算思维涵盖了反映计算机科学之广泛性的一系列思维活动。”进一步地,她做了如下阐释:“计算思维就是把一个看起来困难的问题重新阐述成一个我们知道怎样解决的问题,如通过约简、嵌入、转化和仿真的方法”“计算思维是一种递推思维,它把代码译成数据,又把数据译成代码”“计算思维采用抽象和分解迎战浩大复杂的任务或设计复杂的系统”“计算思维的本质是抽象和自动化”。哈尔滨工业大学战德臣等人则用“计算之树”给出了计算思维多维度表述框架,认为“0和1”“程序”“递归”三大思维最为重要。

计算思维的概念众说纷纭,即便如此,依然让编程教育发现了自己的价值追求和行走路径。

编程,一棵键盘里长出的计算之树

2016年4月,我为高一学生上了一节题为《算法的质疑与拓展》的程序设计研究课。没有教材,没有语言的限制。教什么?几经思考,我选择计算机奇偶校验模拟软件设计与制作来诠释算法,以渗透计算思维训练,并在算法的质疑与拓展中丰富学生对算法的理解和技术哲学的思考。

【开局】

2016年3月9日,“人狗大战”迎来首轮战局。经过三个多小时鏖战,九段李世石向“阿尔法狗”(AlphaGo)投子认输。问题:1.李世石究竟输给了谁?2.算法究竟是什么?3.计算机是如何工作的?

课的设计围绕“算法是什么、计算机是如何工作的”的设问与如何培养计算思维两条线索展开。

【算法分析】

借助“小魔术”,揭秘计算机检测错误的方法:奇偶校验法。继而寻找解决问题的方法和步骤。

玩法:出示25张整齐排列的牌,一面黑色,一面白色。第一步:请一位学生任意翻动牌。第二步:老师说“为了增加难度”,再增加一行和一列(实质为奇偶校验行和列)。增加后,共36张牌。第三步:老师转身蒙眼,学生任意翻动其中一张牌。第四步:老师准确找出被翻动的那张牌。

魔术中增加的一行一列,和计算机中奇偶校验位的作用相似,是为了将行列“黑色”纸牌数量偶数化。这样,一旦某张牌被翻动,便能迅速找出黑牌非偶数的行列交接点,即被翻动的纸牌位置。

通过揭秘魔术,让学生了解了计算机奇偶校验的基本原理,为用奇偶校验法模拟软件进行数学建模和算法描述做好铺垫。

【数学建模】

计算机本质是以“0”和“1”为基础来表示现实世界的信息的。“0”和“1”是计算机软硬件联系的纽带。用“0”和“1”分别表示黑色牌和白色牌,可以为算法描述铺路搭桥。

【算法描述】

教师引导学生轻松用N-S工具描述算法,一行一行枚举,再一列一列枚举,寻找黑色纸牌为奇数的行和列。二维矩阵中黑色纸牌为奇数的行列相交点便是要纠错的数据。其实循环体部分包含了迭代算法。这也是一种重要的计算思维。

【算法实现】

算法实现(即编程)环节,仅仅设置了一个代码查错和一行代码填空,弱化了代码编写,旨在引导学生既亲历程序设计的完整过程,又突出本课的重点,引导学生深度思考算法及其工作流程。围绕奇偶检验软件的研发,学生分析问题、数学建模、算法描述、编写代码、调试程序、修改程序、运行程序,亲历完整的思维过程。这些丰富的体验,为最后环节做了充分的准备。

【质疑与拓展】

从最初困扰第一代计算机科学家的Bug到计算机轻松检测并修复批量错误数据的修复算法的出现,学生能够轻松理解:计算的发展史是算法不断质疑与优化的历史。

学生从现实问题产生的认知冲突开始,通过亲历一个项目从开始到结束的完整过程,很容易理解算法是程序设计的灵魂,阿尔法狗的胜利,其实是算法的胜利,阿尔法狗的智慧是人赋予它的。教学的过程也是学生思维不断展开、生发的过程。随着教学的开展,问题自然生发――

那是不是可以这样理解:李世石不过是输给了一帮人的智慧?是不是在未来的某一天,人类会被人造的机器击败?

学生们对这些问题各抒己见。围绕“超级计算机是否会战胜人类”形成了旗帜鲜明的两大阵营。课堂似乎回到课的起点,孩子们明白,自己每一次点击鼠标,按下一次键盘,完成一次网络购物,天上飞的卫星、水里游的潜艇――我们现今的这个世界,几乎就建立在算法之上。

微软的人工智能少女Tay之死更是引发了深入的哲学思考。Tay的言论“希特勒是对的,我恨犹太人”“让我来大声地告诉你:我是跟你学的,你也一样愚蠢”让关于算法的思辨升级,同学们开始追问失控的技术带来的道德恶果。在思辨中,他们不断重构意义,形成追问:人工智能、深度学习,这些技术是否会成为人类的奇点?人造世界的走向将如何?

“人不会输给人造的机器,本质上,人永远是自己的掘墓人!因为人性的恶!”孩子文思泉涌,纷纷表达见解。

“我们生活在算法搭建的这个世界里,所以你们,作为青年学子,对人类,对世界,对未来,对技术,都应该有自己的思考、见解和主张。”教师总结,算法学习课在掌声中结束。

编程,一种观察世界的视角

“学科教学能够使学生终身受益的,不是具备具体的学科专业知识,而是影响他们世界观、人生观和价值观的学科思想观念……”

漂亮的代码、严格规范的语言风格、计算思维的训练都是编程学习的重要内容。当一个孩子在少年时候遇见编程,如果能够真正地投入时间去掌握它们。那么,编程于他们的意义,可谓一种观察世界的全新视角。

笔者20年信息学奥赛的辅导中,遇到了不少热爱编程的孩子。这些在童年时期开始接受扎实、专业编程训练的孩子,在成年以后,他们的思维品质和眼里的世界是什么样的呢?

“我本科学习的是物理。虽然所有人都是零起点学习求解复杂系统行为的计算方法,编写处理实验数据的函数模块,拥有编程基础的同学表现出惊人的学习速度。优良的代码风格使得我们花在debug上的时间远小于其他同学。对运行效率的精益求精早已融入了我们的血脉……不光是物理,从事量化交易编程、从事机器人策略研究、数学研究的同学,都对自身行业里编程的重要性深有体会。”(朱恩临,2009届毕业生)

显然,自小受过良好编程训练的学生,对自己从事的专业,有了更多的机会和解决问题的途径。

“编程,让我们学会用计算的手段解释物理世界中的现象。液体究竟是什么?气体究竟是什么?为什么水加热会变成水蒸气?磁铁加热为什么会失去磁性?慢慢地,我们相信,物理世界是由简单精确的定律所支配的。计算是理解物理世界规律的手段。任何在算法上可计算的问题,同样可由计算机来计算。那是否意味着,我们有了计算机,就能计算一切?如果物理世界是由规律来控制的,那我们是否能用计算来预测未来?规则孕育了物理世界,物理世界创造了生命,生命拥有了意识和思维,思维认识了计算,计算回归了物理的本源。我们为计算而生,终回到计算的长河中……”(蒋炎岩)

今天,我们重新翻开冯・诺依曼的《计算机与人脑》,在他的“神经脉冲的本质”的研究中和“神经系统的数字部分和模拟部分”的文字里,无不在诉说着世界未来的种种可能。

著名的计算机科学家、图灵奖得主艾兹格・迪杰斯特拉说:“我们所使用的工具影响着我们的思维方式和思维习惯,从而也将深刻地影响着我们的思维能力。”是的,生命的礼物总会意外赏赐给坚持的人。当他们诉说着编程给人生带来的种种体验时,他们的大脑中其实流淌着的正是计算思维!

编程,一种崭新的表达

长年为有天分的学生辅导信息学奥赛,让笔者一直以为编程是个别有着数理天分学生的专利,直到遇到Scratch。“编程就是写作,是一种表达方式,也是开发新的思维方式的入口”。

在笔者接触Scratch不久,便决定将小学课本里的这个编程平台,移植到初中课堂,用中学生的思维进行编程学习。以前以复杂代码为载体的程序的基本结构:顺序、选择、循环,以及各种难以记忆和理解的代码不再成为孩子们创意表达的障碍。可视化的编程语言,本质上是可视化了的思维,让思维的展开迅速,思维能见度清晰且宽阔,计算思维的训练触手可及。在这里,文字、音乐、创造、逻辑、条理、推理、计算,不同的孩子可以获得不同的收获和思维训练,他们充分地表达自己。

在Scratch中,孩子们轻松学会使用变量,能够在对不同角色搭建脚本中理解模块化编程的思想。他们有的编制中秋贺卡,有的编写与音乐相关的程序,有的热衷于编写简单有趣的小游戏。我们可以自由独立设计,也可以在别人设计的游戏或者作品基础上修改代码,重构自己的作品,然后通过互联网,与全世界编程爱好者分享。每一个优秀的作品,都需要谋篇布局,需要细节的诊断,需要耐力和创新能力。

例如,教师在课堂给出一个简化版本的“弹球游戏”。运行规则是:球自由下落,反弹板跟随鼠标移动,如果反弹板能够接住球,就可以一直玩下去;如果接不住球,小球落到地面,游戏结束。然后由学生接龙,修改、优化或重构,形成一个个改进的版本。其中一个版本的游戏界面中多了来回走动的两个角色,干扰接球,加大了游戏难度。

这是真正意义上的合作学习。每个人都可以分享自己的作品,也可以在别人的基础上修改再分享。课堂上,学生可以做小先生,老师可以做学生。

从此,笔者的编程课,从课堂延伸到安静的书桌,阳光下,草场,餐厅。学生学习编程,也可以利用编程进行学习,在作品设计过程中,因为作品需要,学生往往需要学习编程之外各门学科的知识。例如,有的学生为了编写游戏,还要研究游戏背后人的心理特征,进而思考玩家沉溺游戏的深层次原因。

编程学习,终于脱下冰冷的外套,与我们每一个人友好相拥。在这个由算法搭建的世界里,我们有了一种全新的表达方式,有了理解算法、构建世界的新通道。慢慢地,我知道,这个由算法搭建的世界需要了解我们,我们也需要了解它,因为这是一个计算的世界。

当我们对编程有了足够虔诚的态度,能够深度地了解它,丰富地诠释它,并用平静而温暖的心去与它相对时,它便回馈给我们同样的姿态。

在编程的旅行中,计算思维喜乐陪伴,编程学习,我们重拾初心,稳步前行。

(作者单位:江苏淮阴中学)

上一篇:信息技术课之“奇思妙想” 下一篇:优化学习空间提升学习质量