1程序设计与计算思维
计算思维的本质是抽象(Abstraction)和自动化(Automation)[5].同济大学的龚沛曾教授等将计算思维培养进一步细分为计算思维意识、计算思维方法和计算思维能力3个维度培养,为程序设计课程教学提供了更为明确的指导[6].在程序设计课程中,各种问题的求解方法和算法,如排序法、递归法、遍历法、二分查找法等,都是计算思维方法在程序设计课程中很好应用的体现[7],与计算思维能力培养的主要内容相吻合.当然一门课程并不能包含计算思维的所有内容,需要一系列计算机应用课程共同完成计算思维能力的培养.因此,在程序设计课程中注重对计算思维能力的培养,对学生后续专业方面的学习和实践能力的提高具有重要意义.
2将计算思维融入程序设计课程教学内容
计算思维涵盖了计算机科学的各个核心思想,不可能在程序设计一门课程中把计算思维全部体现出来,那么程序设计课程重点应该着重讲述哪些内容以培养计算思维呢?结合程序设计课程的特点,笔者认为有3个最基本的计算思维,即抽象、递归和模块化.抽象是从事物中抽取出的共同的、本质性的特征,而舍弃其非本质的特征[8].例如实数、整数、字符、字符串是不同的数据,得出数据类型的概念,不同数据在计算机内存中的存放形式也不一样,就是一个抽象的过程.计算思维中的抽象是指用这种抽象的方法表达实际的问题.递归是指函数在运行过程中直接或间接调用自身而产生的重入现象.递归是计算机科学的一个重要概念,采用递归编写程序能使程序变得简洁和清晰,是解决问题的一个有效的程序设计方法[8].模块化教会学生如何把复杂的问题分解成若干个小问题,即使用分而治之的方法解决实际的问题.计算思维是信息思维,它不同于传统的数学思维,不关注逻辑关系、推理演算的严谨程度,而是强调问题解决的操作过程和应用实践.因此在理论知识的讲解上要注重教学方式和方法,将复杂的概念简单化描述,让学生理解概念的来龙去脉,理解如数据存储、数据类型、函数等重要的概念,为后期讲授程序设计中比较难的部分如数组、指针、数据结构埋下伏笔.另一方面,还要注重培养学生解决科学问题能力,以及将这种思维和模型转换为程序的实践能力.(1)如何讲授数据类型.数据类型是一个抽象的概念,学生在无法看到“内存”的实体时,要理解数据类型是很困难的.这时可以先借助图片、音乐、视频文件的容量大小对字节的概念进行阐述,再引入不同基本类型的数据在内存中的存放方式,使学生建立完整的计算机数据存储的概念,才能牢靠掌握不同数据类型的存储特点.使学生在后续的数据类型的转换及构造数据类型的学习过程中可以较为平滑地过渡.(2)如何讲授递归.在讲解递归函数时,首先“n!=n(n-1)!”为例介绍递归的概念,并以“老和尚讲故事的‘无穷故事’”为例说明什么是无穷递归,如何让递归在有限次数内终止.以计算Fibonacci数列和实现十进制与其他进制的转换为例,说明编写数值与非数值问题的递归程序,最后以汉诺塔的例子介绍递归的实现[5].(3)如何讲授函数.要理解函数的作用,首先要理解函数出现的意义,函数可以将一些重复出现的计算逻辑独立出来,从而增强程序的合理性和健壮性,实现程序的模块化.这时可以举一个例子,如生活中我们在享受别人提供的服务,但是我们并不关心是谁提供的这种服务,来让学生明白函数的独立性以及封装性.只有函数和模块在程序设计中的重要性解释清楚以后,学生才有兴趣和愿意去进一步了解如何定义和使用函数,以及如何调试程序.函数的另外一个重要的概念是C语言的函数参数传递机制是单向值传递,很多书上认为指针作为参数时,传递的是地址,从而独立出地址传递这个概念.由于地址也是一类特殊的值,这样的传递方式并没有破坏C语言参数单向传递机制,因此地址传递本质上也是一种值传递,当学生对函数参数传递机制建立起一种统一的概念以后,就很容易理解指针作为函数参数时是如何运作的[3].(4)如何形成知识脉络.围绕内存的变化,使学生理解用指针作函数参数传递地址,实参与形参本质上占据同一内存空间,通过形参的改变来改变实参,达到带回多个不同类型的函数返回值的目的.从而把数组、指针、函数、结构体这些知识脉络形成了一条清晰的教学主线,帮助学生突破C语言的教学难点与重点[3].
3翻转教学法
学习金字塔理论表明,被动听讲的教学方法学习效果最低,在“做中学”知识吸收能达到75%,而“马上应用或者教别人”学到的知识能达到90%.爱德加戴尔提出,学习效果在30%以下的几种传统方式都是个人学习或被动学习,而学习效果在50%以上的,都是团队学习、主动学习和参与式学习.由此看出,学习方法不同,学习效果大不一样.因此教师要学会调整甚至改变教学方法,学生要努力转变学习方法,要由被动听转到主动学.在教学中,要大力提倡小组合作学习,在参与中掌握知识,生成能力,从而真正实现从知识到能力的转化.教师应当充分尊重学生在学习中的主体地位,在程序设计课程中可以引入翻转教学法,颠倒课堂上的学习流程,化被动学习为主动学习,提高课堂教学的有效性.所谓的翻转课堂,就是教师创建视频,学生在家中或课外观看视频中教师的讲解,回到课堂上师生面对面交流和完成作业的这样一种教学形态[9].“翻转课堂”特点有:(1)教学视频短小精悍,通过网络发布的视频,具有暂停、回放等多种功能,可以自我控制,有利于学生的自主学习.(2)教学信息清晰明确,把内容集中在屏幕上,配合讲解的画外音.每一个视频都针对一个特定的问题,有较强的针对性;视频的长度控制在在学生注意力能比较集中的时间范围内(10min内),符合学生身心发展特征.(3)重新建构学习流程.教师提供了视频,在课前对学生进行“信息传递”,在课堂上通过互动来完成“吸收内化”,教师在课堂上给予有效的辅导,教师更多的责任是去理解学生的问题和引导学生去运用知识,学生之间的相互交流更有助于促进学生知识的吸收内化过程.(4)复习检测方便快捷,学生观看了教学视频之后,是否理解了学习的内容,视频后面紧跟着的4~5个小问题,可以帮助学生及时进行检测,并对自己的学习情况做出判断[10].程序设计知识点繁杂、概念抽象,因此视频教学和翻转教学也非常适合程序设计的教学.有效实施翻转教学法的前提是根据教学内容和教学大纲,划分出各个章节的知识点,如if语句、switch语句、for循环语句、while循环语句、数组、函数、指针等,将每个知识及其典型案例用屏幕录像软件录制成10min左右的微视频,上课前提前发布给学生在课外观看,上课时通过师生互动辅导学生完成上机编程作业,解答学生在编程中遇到的问题.先看录像后讲课,这是“翻转课堂”的教学视频与传统的教学录像最大的不同之处.一个最显著的变化将是,翻转课堂从以教师为中心真正转变为以学生为中心,这实际上是一种传统与现代的结合体,但其效果远好于传统教学,并且翻转教学这种主动学习的方式有利于计算思维的训练与形成,是培养计算思维很好的一种教学方式.
4基于计算思维的C程序教学设计原则
培养学生的计算思维能力,除了把程序设计的重点放在讲解思路、问题分析和对问题进行抽象以外,在教学过程中还要注意4个原则:(1)采用案例法和任务驱动.选择计算学科中的一些趣味性强的典型实例引导学生进行程序阅读和思考,体会其中解决问题的思想和方法.相关知识点在案例中一并讲解,激发学生的学习兴趣和求知欲,避免学生因枯燥的程序语言语法规则而失去学习兴趣;以项目为驱动组织实施程序设计的教学,这样有利于学生计算思维能力和自学能力的培养[11].(2)注重学生的自主学习.将课堂教学、上机实验、翻转教学、慕课、教材及其他资源相结合,创设线上与线下立体学习环境使学生成为学习活动的主体,让学得好的学生上机辅导差一些的学生,充分训练学生的思维与语言表达能力.(3)以实践教学促进理论教学.通过上机实践环节加强和训练程序设计的计算思维模式,学生在对程序进行不断调试的过程中,理解和领悟程序设计问题求解的思想方法和思维模式[12].(4)引导学生参加合作学习.采用的方式是上机实验时将3~4个学生作为一组进行考核.每个人在解决问题中所能贡献的能力是不一样的,合作方式可以很快提高自身所缺乏的能力;其次,小组之间形成竞争关系,小组成员会尽力提高自己小组的竞争力,这种竞争机制能够激发学生的积极性,在提高学生解决问题的能力的同时也培养了团队合作精神.
5结束语
计算机技术更新极快,在程序设计的教学中不能只满足于教会学生编程技能,还要注重学生的自学能力、思维能力和创新能力的培养.教师还要教给学生归纳总结、触类旁通的学习方法,教会学生观光农业论文归纳和总结,在多门编程课程中触类旁通,将会使学生在将来的工作中立于不败之地.
作者:丁海燕 单位:云南大学信息学院