APP下载

程序设计课程教学中计算思维能力的培养

2014-04-25刘远军黄同成谢兵牛莉

计算机教育 2014年3期
关键词:计算思维程序设计能力培养

刘远军 黄同成 谢兵 牛莉

摘要:分析当前程序设计课程教学的现状,研讨计算思维方法的内涵和优点,设计一套旨在培养学生计算思维能力的教学方案,指出该方案能有效提高学生的学习兴趣和思维的活跃度,对学生的程序设计能力的提高起到有益作用。

关键词:程序设计;教学改革;计算思维;能力培养

0 引言

随着社会信息化的日益发展,计算机能力成为所有大学生必须掌握的一项基本能力和技能。几乎所有的高校都开设了大学计算机基础类课程,它包含计算机基础、程序设计语言、数据库基础、办公软件应用、网页设计等多门不同的课程。本类课程的开设旨在为非计算机专业的学生学习计算机的基础知识、掌握计算机的基本技能并运用计算机工具获取知识提供一个入门的指导。而在上述课程中,难度最大、要求最高、对学生影响最大的课程是程序设计课程。

现今,中小学日益提倡素质教育,加强了对信息技术的课程建设,初中、高中都开设了信息技术课程,原本很多应该在大学教授的计算机的基本知识和基本操作,已经前移到了中学阶段。但是,中学阶段的信息技术课程以教授计算机的基本知识和基本操作技能为主,很少涉及程序设计的内容。所以,大学计算机基础类的课程,应该重点加强程序设计类课程的建设。在程序设计课程的教学中,我们不仅要教会学生使用一门程序设计语言(如c语言、c++、C#、VB等),更重要的是提高学生利用计算机思维来解决问题的能力。所以,必须将计算思维引入到程序设计课程的教学中来,实现由单纯的程序设计语言的学习向计算思维能力培养的转变。

1 计算思维的内容

1.1 计算思维的理解

计算思维其实自古既有,并且无所不在。从中国古代的算筹、算盘到近代西方国家的加法器,无不闪烁着计算思维的火花,但是一直缺少一个对计算思维完整清晰的定义。2006年3月,美国卡内基·梅隆大学计算机科学系主任周以真教授首次在权威杂志Communications of the ACM上提出了“计算思维”(Computational Thinking):计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解的思维活动。按周以真教授的解释,计算思维是建立在计算过程的理论上的,但是又超越了计算机本身。计算过程并非一定都是在计算机上完成,也可以在人脑中完成,所以,计算思维最本质的内容是抽象(Abstraction)和自动化(Automation)。

从现实角度讲,计算思维就是将问题引入、归纳、求解、引申的过程,也就是将未知问题归纳成若干已知问题,从而求解的过程。在程序设计语言的课程中,汉诺塔问题(Hanoi Tower Problem)的求解过程,就是对归纳法求解的一个最典型的诠释。

笔者认为,运用计算思维解题时,有一个很重要的问题,就是问题的表述。计算思维最终还是通过数学模型或者逻辑模型来解题的,所以怎样将问题转换成合适的模型表示,关系到问题是否能够得解,是否能够在预期的时间内得出结论。这个建模的过程,涵盖了编码/解码、约简、递归、归化、仿真、推理等多种思维过程和转换模式,是计算思维的一个重要组成部分。建模能力的强弱,直接影响了计算思维能力的高低。

1.2 计算思维的不同层次要求

计算思维不是一个单独的、和其他思维方法毫无关联的孤立方法。计算思维产生于计算机科学,而与计算机科学联系最紧密的思维方法是数学思维、逻辑思维和工程思维。我们可以将计算思维看作计算机科学与数学思维、逻辑思维和工程思维的交集,而它们也代表了计算思维的不同层次要求,如图1所示。

2 引入计算思维的程序设计课程教学改革实践

2.1 计算机能力的3个层次

(1)计算机使用能力(Computer Literary)。就是利用计算机进行各种操作以获取信息或者计算结果的能力,这是最低要求层面的计算机能力。例如,利用Excel进行班级成绩统计分析,利用Intemet查询、下载所需资料,编写小程序实现万年历的显示等。

(2)计算机系统认知能力(ComputerFluency)。这是对计算机系统的理解和应用能力,建立在对计算机系统的全面理解的基础上,它是较高的要求,一般是学习计算机专业的学生所要求的,需要开设很多门计算机专业课程才能达到这个效果。对于非计算机专业学生而言,这种能力毋须做太多关注。

(3)计算思维能力(Computer Thinldng)。计算思维的内涵在上文中已经详细阐述,计算思维能力是适合于所有学生的一种普遍的思维能力。

程序设计课程是大学计算机基础教学中重要的一个环节,其目的是培养学生的编程能力。而编程过程是编写一系列的计算机指令代码,让计算机执行指令以完成特定的功能或者解决规定的问题,所以,编程能力实质上就是利用计算机解决问题的能力。从这一点看,编程能力可以归结于计算机使用能力,而怎样编程,这个过程需要计算思维来诠释,这可以从计算思维能力的高度来加以分析和讨论。所以,我们要培养学生的计算机使用能力,更要培养学生的计算思维能力。

2.2 引入计算思维后的教学组织与实施过程

笔者在2011级担任教学任务的4个班级中,选取了2个班进行了教学改革研究(以下称为实验组),在这2个班中,对授课内容和授课计划进行了调整,引入了计算思维的培养过程,在授课中,采用了“问题引入一问题归纳一建模求解一问题引申”的教学模式。授课方式和课堂语言组织上,重点突出了对学生思维的诱导、指引和总结归纳,使学生从“要做什么”向“要怎么做”转变。另外两个班依然采用“教师讲解一学生练习一教师总结”的传统教学方法(以下称为对照组)。

2.2.1 课堂教学实施过程

笔者以程序设计课程(c语言)中“函数的递归调用”这一内容的授课过程来说明教学过程中计算思维能力的培养。endprint

1)问题的引入。

首先,在投影上给出汉诺塔问题(HanoiTower Problem)的画面,汉诺塔问题是一个源于印度的古老的益智问题:有3个塔(分别为A塔,B塔和c塔)。开始时,有n个圆盘以大的在下,小的在上的次序叠放在A塔上。现要将A塔上的所有圆盘,借助B塔,全部移动到c塔上,且仍按照原来的次序叠放。移动的规则如下:这些圆盘只能在3个塔间进行移动,一次只能移动一个盘子,且任何时候都不允许将较大的盘子压在比它小的盘子的上面。这个问题的提出,马上就引起了学生的兴趣,我们先让学生抛弃程序设计语言本身,仅从数学思维上对这个问题进行思考和讨论,为下一步的教学做好准备。

2)问题的归纳与约简。

计算思维的一个特点就是将要求解的问题归纳、约简为简单、已知的问题。对上述提出的问题,我们引导学生进行归纳和约简,先假设A塔上只有大小2个圆盘,引导学生对这个问题进行思考。因为n个圆盘被简化成只有2个圆盘,这样问题的规模小得多,学生很快就能找到问题的解法,先将A塔上面的小圆盘移动到B塔,再把A塔下面的大圆盘移动到c塔,最后将B塔上的小圆盘移动到c塔(如图2所示)。能找到这个解法,就为下一步的解题打下了理论基础。

3)问题的求解。

根据上一步的工作,学生已经找出了将2个圆盘从一个塔移动到另外一个塔的算法。那么继续进行引导,如果A塔是3个圆盘呢?那么首先要把A塔上面的2个圆盘看作一个整体,将它们移动到B塔,然后把A塔最底下那个最大的圆盘移动到c塔,最后把B塔上的2个圆盘再移动到c塔。也就是说3个圆盘的移动可以分解成上面2个圆盘的移动和下面1个圆盘的移动,而怎样移动2个圆盘的算法在上一步已经得解,所以,3个圆盘的汉诺塔问题得解(如图3所示)。进而继续思考,如果是4个圆盘,那么可以分解成上面3个圆盘和下面1个圆盘的移动,而3个圆盘的解法已经在上一步得出,依此类推,任意,2个圆盘的移动都可以看做上面n-1个圆盘的移动和下面1个圆盘的移动,这样,所有的问题都能逐步简化,最终归纳为2个圆盘从一个塔往另一个塔移动的问题。

4)问题的引申。

解决完上述问题后,我们可以提出一些更深层次的问题来启发学生的思维。例如,我们可以设计一个四柱汉诺塔问题,有A、B、c、D 4个塔,要把A塔上的圆盘全部转移到D塔,可以借助B塔和c塔,规则同三柱汉诺塔。通过让学生自主思考并尝试解答以上问题,能让学生实现更深的思维练习,培养出学生良好的计算思维能力。

2.2.2 实践效果

经过1学年的教学改革实践,采用了计算思维培养模式的实验组与传统操作技能培养为主的对照组相比,具有以下一些区别:

(1)从课堂氛围来看,实验组比对照组明显要思维活跃,回答教师问题更积极,质量更高。学生逃课和开小差的情况明显减少,思维活跃度的差别表现明显。这说明引入计算思维以后,更能激发学生的学习兴趣,使学生开动思维,紧跟教师上课节奏,这具有明显的积极意义。

(2)从考核结果来看,实验组比对照组的成绩有较明显的提高,尤其对于考试中一些教师平时没有讲过的新题型、新题目,实验组的正确率明显要高于对照组。

(3)从对后续学习的影响来看,实验组比对照组更有主动性和自觉性,且效率更高。程序设计课程于6月份结束,4个月后,在10月份,笔者分别抽取了实验组和对照组的10名学生进行回访,实验组中有8名学生在课程结束后,仍然利用网络资源和参考书继续学习程序设计的相关知识,实验组的10人中有7人通过了全国计算机等级考试二级c语言的考试。而对照组的10名学生中只有4名学生继续自学程序设计的相关知识,他们当中只有3人通过了全国计算机等级考试二级c语言的考试。这说明计算思维能力对学生的自学能力的提高也有较大的作用。

3 结语

计算思维自2006年被提出并被明确定义以后,逐渐成为计算机科学领域和计算机教育界最先进、最流行的思想之一。在程序设计课程教学中,着力于学生计算思维的培养,不仅对学生学好程序设计语言本身有积极的作用,更对改进学生思维习惯,帮助学生以计算机科学的概念和方法对问题进行建模求解有非常重要的促进作用。而这种思维,必将会给学生今后的工作和学习带来巨大的帮助。

(见习编辑:刘丽丽;编辑:孙怡铭)endprint

猜你喜欢

计算思维程序设计能力培养
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
程序设计课程中计算思维和应用能力培养问题研究
民族高校C语言程序设计课程教学改革的研究
算法的案例教学探析
浅谈艺术专业学生计算思维能力的培养
数学归纳法在高中数学教学中的应用研究
信息技术教学中学生自主探究能力的培养探析