基于计算思维的程序设计课程教学改革

2015-05-30 03:02葛欣席景科李政伟刘厚泉
大学教育 2015年6期
关键词:思维训练计算思维

葛欣 席景科 李政伟 刘厚泉

[摘 要]“高级语言程序设计”课程是一门知识点繁多、实践性较强的课程。它面向计算机所有本科专业开设,是学生灵活运用所学知识,培养和训练软件开发能力的基础和关键。计算思维作为一种应对信息时代的普适能力,得到了广泛的关注和认可。计算机课程是培养学生计算思维的最好课程。以技能培养和能力培养为目标的“高级语言程序设计”课程,需要摆脱传统的教学内容和教学方法,以计算思维为主线,开展教学活动,使程序设计思维成为学生自身的技能组成部分。

[关键词]计算思维 高级语言程序设计 思维训练

[中图分类号] G423.07[文献标识码] A[文章编号] 2095-3437(2015)06-0089-02

“高级语言程序设计”课程是一门知识点繁多、实践性较强的课程。它面向计算机所有本科专业开设,是学生灵活运用所学知识,培养和训练软件开发能力的基础和关键。它不仅是对C++语言的学习,也是软件开发的启蒙和软件开发技能的初步训练。可以说,它是计算机专业的入门课程,不仅决定着今后的课程学习情况,也直接影响着学生学习计算机知识的兴趣和动力。

根据多年的教学实践,以及学生在课程设计、毕业设计中暴露出的问题,笔者发现“高级语言程序设计”课程虽然课时量很大,但教学效果与学习效果均不理想,学生普遍不会用面向对象的思想解决实际应用问题,在后续的软件开发工作中感到无从下手。

“计算思维”作为三大科学思维之一,旨在培养思维方式和提高创新能力,将其应用在“高级语言程序设计”课程中,能够有效地提高教学效果,使该课程不再仅仅讲授程序编写,而是成为思维训练和能力培养的平台,真正发挥其在课程体系中的作用。

一、引入计算思维的必要性

(一)计算思维的特质

“计算思维”(Computational Thinking)2006年由美国卡内基梅隆大学计算机科学系主任周以真教授提出,是运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为。[1]其本质是抽象(Abstraction)和自动化(Automation),即在解决实际问题时,首先通过分析、提取、类比、替代等一系列方法将问题抽象成计算机世界中的问题描述;其次利用形式化语言,将问题进行离散的符号化处理,建立模型;最后设计算法和编程实现,在实际的计算机中运行并求解。

当前,计算机领域的研究成果不断丰富和完善,它与其他学科的交叉也越来越深入,计算思维有利于解决计算机科学家和领域专家之间的知识鸿沟所带来的困惑。计算思维虽然具有计算机的许多特征,但是计算思维本身并不是计算机的专属。计算思维是属于人类的一种思维方式,它给出了求解问题的一条途径,而不是让人类像计算机那样思考。[1]因此,计算思维是一种基本技能,是每一个人必须掌握的技能。

(二)计算思维的作用

长期以来,学生们在很多课程中被动地学习,导致思维固化,缺乏解决具体问题的能力。计算思维在培养认知能力和锻炼思维方式上有其独特之处,得到了国内众多院士和教授的一致认可。

计算大师戴克斯特拉曾说过:“我们所使用的工具影响着我们的思维方式和思维习惯,从而也将深刻地影响着我们的思维能力。”计算机以及计算机科学的发展催生了智能化的思维,周以真教授更是把这种思维提升到与“读、写、算”同等的重要地位,成为适合于每一个人的“一种普遍的认识和一类普适的技能”。[2]

计算思维将计算机从工具发展成一种思维方式,使计算机科学中的经典方法潜移默化地应用到分析问题和解决问题中,巧妙地实现了多领域知识的融合。在解决具体问题时,它使用计算机科学中的抽象、分解、嵌入、转化和仿真等方法,把一个看起来困难的问题重新阐释成一个已有解决方案的问题;利用复杂度计算的思想充分估计解决方法的空间和时间代价,同时借鉴系统设计的简洁和优雅,在解决问题时兼顾对美学的考量。

二、基于计算思维的“高级语言程序设计”教学模式

“高级语言程序设计”课程的最终目标是培养学生程序设计的思维,即解决具体问题的思维方式,这和计算思维的目标相一致。因此,应结合计算思维对课程的教学内容和教学方法进行改革。

(一)教学内容的改革

1.结合实际生活设计教学实例

传统的教学内容中也会包含许多实例,但这些实例与生活脱节,学生虽然掌握了这些实例的解题方法,但遇到和实际相关的题目时仍无从下手。例如,比较两个整数的大小,输出较大的值。对于这个经典的比较大小的题目,大部分学生都能理解和掌握。但如果改成“桌子上有两个大小不同的苹果,请编程实现找出大的苹果”,那么很多学生就会感觉问题简单到不知如何去做。导致这个情况的原因是,传统的教学实例基本上都是经过了抽象、提取、细化等处理后的产品,学生在学习这些实例时只锻炼了语法知识的理解和组织,而前期的思维训练都被省略,但这部分恰恰是整个程序设计思维的主体,也是计算思维的本质之一——抽象。

实际生活中的问题会包含大量的信息,在处理这些问题时,首先需要明确目标,对信息进行过滤,保留需要的信息。这就是抽象与提取的过程。以“比较苹果”为例,题目中要求找出较大的苹果,那么就可以确定比较的条件是苹果的大小,而不是外观、产地、品种等条件。其次,什么值能够代表苹果的大小?如果往简单地想,重量从一定程度上可以代表大小;如果往复杂地想,设定苹果是一个圆体,那么体积可以代表大小;这样问题就抽象成给定两个值,进行比较。最后,落实到编程语句上,要根据实际情况确定两个值的数据类型,比较的过程则对应到选择结构的语法。这个过程是计算思维的本质之二——自动化。

2.注重实例间的关联与组合

思维训练的另一个重要方面是问题的分解与组合,因此在设计教学实例时,除了要结合实际生活,还要注重实例间的关系,让每个实例不仅能单独解决一个问题,而且能够通过多个实例的组合来完成更高难度的问题。例如在讲解数组和指针内容时,对应的知识点会有关于数组的输入、输出的实例,基于冒泡、选择等多种算法的数值排序的实例,折半查找的实例……这些实例独立存在时是针对某一个问题的解决方法,如果把这些实例组合在一起,就实现了一组数据的输入/输出、排序、查找、插入、删除等多种功能的结构,这正是《数据结构》中讲解的队列结构,应用到实际生活中,可以用来模拟实现超市排队结账、火车票售票、旅游路线规划等多种具体问题。

3.提高实例的实用性

“高级语言程序设计”课程在进入面向对象的程序设计时,实例的规模一般都会变大,因为面向结构的程序设计阶段中每个实例解决的只是一个知识点,而面向对象的程序设计本身就包括类、对象、属性、方法等多个因素,实例的内容为了覆盖这些因素就需要设计得复杂一些。但常用的实例,如日期类、时钟类、图形类等在实际中的可用性并不大,学生通过这些实例确实理解了类的结构,但遇到具体问题时却不能根据需要设计出一个新类。因此,在设计教学实例时需要结合后续课程的内容,设计一些在以后学习中经常会遇到或能够用到的、具有延展性的实例,例如string类、堆栈类、队列类等。

(二)教学方法的改进

1.教学以组为单位

学生按照两到三个为一组进行划分,教学过程中,对于问题的求解按照组内讨论的方式开展。每个组内的学生,不设组长,轮流讲解该组讨论后的结论。遇到结论不同的情况,先由组与组之间进行辩论,结论仍不明确时,每个小组选择本组所支持的结论进行编程验证,最后由教师结合各组实验结果,给出具体说明和讲解。这种方法能够有效地调动学生学习的积极性,同时也避免了教师一个人的思维局限性,让教学碰撞出思想的火花。

2.以实例安排教学单元

教学单元不再按照章节进行,而是根据教学实例进行设计。每个实例作为一个教学单元,先给出问题的描述,学生分组后,组内进行讨论;然后教师对实例中涉及的知识点进行详细的讲解和延伸,并根据每组反馈回来的结论,给予对比和分析;最后学生通过对知识点的理解和消化,对本组的结论进行调整和细化,并在计算机上编程实现。

3.随堂上机实践

蒙台梭利曾说过:“我看到了,我忘记了;我听到了,我记住了;我做过了,我理解了。”所以,实践对知识的掌握具有关键作用。传统的“满堂灌”和少量的学生问答,很难获得理想的教学效果。学生只有在思考后,付诸于实践,在实现过程中总结经验教训,才能把知识内化,最终转化成行为习惯的一部分。

三、结束语

“计算思维”随着计算机的普及和计算机技术的发展演化而来,提出了面向问题解决的系列观点和方法,指出了计算机科学与其他领域融合、创新的途径。计算机课程不是培养计算思维的唯一课程,但却是最好的课程。[3]以技能培养和能力培养为目标的“高级语言程序设计”课程,需要摆脱传统的教学内容和教学方法,以计算思维为主线,开展教学活动,使程序设计思维成为常识,成为学生自身的技能组成部分。

[ 注 释 ]

[1] J.M.Wing.Computational Thinking[J].Communications of ACM,2006(3):33-35.

[2] Fei?鄄Yue Wang.Toward a Paradigm Shift in Social Comput?鄄ing[J].The ACP Approach,IEEE Intelligent Systems,2007(5):65-67.

[3] 战德臣,聂兰顺,徐晓飞.计算之树——一种表述计算思维知识体系的多维框架[J].工业和信息化教育,2013(6).

[责任编辑:覃侣冰]

[收稿时间]2014-12-19

[基金项目]中国矿业大学2013青年教师教改项目(2013Y45);中国矿业大学计算机学院2012精品课程培育项目。

[作者简介]葛欣(1980-),女,江苏徐州人,博士,副教授,研究方向:信息处理。

猜你喜欢
思维训练计算思维
深入挖掘,妙笔生花
逻辑学在语文学习中的作用
生活化的数学有效融入思维训练的尝试
加强语言表达训练提升小学生数学思维能力
基于计算思维的软件类研究生高级算法课程教学研究
基于计算思维程序设计的军事案例研究
程序设计课程中计算思维和应用能力培养问题研究
民族高校C语言程序设计课程教学改革的研究
算法的案例教学探析
浅谈艺术专业学生计算思维能力的培养