关键词:计算思维;能力培养;实验教学改革
程序设计类课程的主要教学任务是学习使用一种或多种程序设计语言,通过介绍用计算机解题的详细过程,训练学生编写和调试程序的基本技能,为其他后续课程的学习打下基础,是计算机及其相关专业学生最早接触的专业基础课程,也是计算机及其相关专业的核心课程。
但通过课题组多年来教育教学的实际经验显示,目前大部分学生对程序设计类课程存在普遍的认知误区:①语法规则复杂琐碎、易忘难记,学习难度较大;②课程内容枯燥乏味,不容易激发学生的学习热情;③程序编写难上加难,久而久之会产生畏难情绪。如何培养学生正确的程序设计思维习惯,提高学生的计算思维能力,探索有效的实践教学模式,是从事程序设计类课程实践教学的老师亟待解决的问题。
一、计算思维的提出
什么是计算思维?计算思维有怎样的作用?计算思维对未来社会将会有怎样的影响?
计算思维在2006年,由周以真教授在《ComputationalThinking》一文中提出。其本质概念,最早可以追溯到中国古代的算筹计算,周教授在此基础上对其进行了清晰化和系统化的总结和整理。
计算思维涵盖了包括计算机科学在内的一系列思维活动,使运用计算机科学的基础概念进行问题求解、系统设计和人类行为的理解,周教授提出以此来探索计算机学习的教育价值。[1]它强调的是如何求解问题和如何用计算机实现这个问题,其本质是抽象和自动化,其特征是可行和构造。2011年,ISTE和CSTA对计算思维进行了“操作性定义”,将其阐释为6个步骤的问题解决过程。
2010年5月,中国高等学校计算机基础教学指导委员会提出“要将计算思维融入到计算机基础课程中传授,以此培养高素质的研究性人才”,而在7月的C9会议上发表的《九校联盟计算机基础教学发展战略联合声明》的核心要点则提出将“培养学生的‘计算思维’能力”作为计算机基础教学的核心任务。
二、程序设计类课程中计算思维的标志性概念
计算思维与理论思维、实验思维仪器并称为推动人类社会文明进步和科技发展的三大科学思维,它由计算学科抽象而来,所以,计算科学的基础概念自然也就是计算思维的最好体现。
在CC1991中,将核心概念定义为具有普遍性和持久性的重要思想、原则和方法。按照CC1991的定义,它必须是在数学、科学和工程中定义的概念,在学科中多次出现,在技术上有高度独立,在各分支领域及抽象、理论和设计的各个层面上都有很多应用。结合CC1991概括的12个核心概念,并根据课题组多年的教育教学实践经验,将程序设计类课程中计算思维的标志性概念概括如下:
如上图所示,可知,程序设计类课程是对学生进行思维训练的一个最直接、最具操作性的平台。
三、探索在程序设计类实验课程中对学生进行计算思维能力培养的途径
计算机科学体系庞杂,本身并非仅仅是编程那么简单,其能力分为计算机使用能力、计算机系统认知能力和计算思维能力。最低要求层面的计算机使用能力,就是利用计算机进行各种操作以获取信息或者计算结果的能力;中层的计算机系统认知能力,是对计算机系统的理解和应用能力,建立在底层使用能力的基础上,是对计算机系统全面理解的较高要求;最顶层的计算思维能力,是计算机科学与数学思维、逻辑思维和工程思维的交集,并不是单独的、与其他思维方法毫无关联的独立思维方法。
通过对计算思维特征的分析,我们可以清晰地看到,要想在程序设计类课程中对学生进行计算思维能力的培养,就需要解决任务抽象和分解、启发式推理、知识体系重构、思维能力训练等基本问题[2]。
按照ACM/ICPC的解释,编程解题的思维过程一般可以分解为三个阶段,即一观察、二联想、三变换。在这个过程中编程者先通过观察,对问题进行深入的认识和理解;再进行联想,寻找一个切入点将该问题同编程者已有的知识和经验进行联结;最后通过变换,将一个问题转化为另一个或分解成另几个容易解决的新问题,以达到解决原问题的目的。基于此,课题组尝试对目前程序设计类实验课程所采用的问题驱动、项目分解、启发式教学等方法进行完善,对学生在程序设计过程中通过“观察――联想――变换”培养和引导其计算思维方法,潜移默化地培养学生的计算思维能力。
以“C语言程序设计”课程为例,课程中的许多知识点都为计算思维的培养提供了生动的案例。第一堂实验课上,实验教师主要以展示经典案例为主,提出一些经典问题,结合生活中的实际应用过程,形象直观地向学生们展现C语言程序设计的魅力所在。从分析问题,到抽象成数学模型,再进行算法设计,然后变成与调试,最后生成可应用于实际的程序,这个过程是对计算思维最好的诠释。例如,实验教师可以从“猜数游戏”入手,在课堂上用游戏的方式激发学生对语法、语义、算法、设计的学习兴趣,从游戏引入知识点,用知识点带动学生对语法的掌握、对算法的理解、对设计的熟悉,是学生加深对计算思维的理解。这种传授知识、技能和计算思维的一体化教学模式,摒弃了原有的“重语法、轻方法、不谈思维”的错误教学方法,而是使教学目标从“知识和技能”的传授上升到“思维”的教学,即指导学生提炼出知识和技能背后所包含的具有普适性的本质思想――计算思维。
课题组还尝试着将“轻游戏”,也就是教育游戏引入到程序设计类实验课程中,将枯燥乏味的语法规则,利用电脑游戏的形式展现在学生面前,将游戏娱乐融合进程序设计类实验课程的教学实践中,在激发学生学习兴趣和学习动机的同时,使其形成自主学习的心理,主动进入到知识学习的情境当中,提高学习者对程序设计语言语法规则的熟练度,帮助学习者内化计算思维方法,从而达到培养学习者计算思维能力的目的。
四、进一步设想
计算思维的形成是一个长期的过程,仅通过一门或几门课程的学习就构建起成熟的计算思维方式是不可能的。但“不积跬步,无以成千里”,只要我们能够在教育理念、教学方法、实验教学模式等方面进行相应的改革,并对学生进行耐心指导并担负起应有的引导职责,就会为他们今后的“计算思维”成长打下坚实的基础、提供必要的条件。
参考文献:
关键词:课程整合;程序设计基础;教学内容;教学方法;能力培养
一、引言
大学非计算机专业的公共计算机基础课程均在大学一年级开设,共开设两门必修课,即第一学期开设《大学计算机基础》、第二学期开设一门计算机程序设计课程。《大学计算机基础》属于入门性的课程,主要介绍计算机的基本知识,掌握OFFICE等常用软件的操作和使用,使学生具备操作和使用计算机的基本技能。计算机程序设计课程属于提高性的课程,目的是使学生初步具备计算机编程的能力,这种课程体系、教学内容与教学方法已经沿用多年。随着社会信息化水平的不断提高和建设创新性国家、培养创新性人才的需要,公共计算机基础教学也面临着改革与发展的必然要求。大连民族学院是国家民委直属的一所民族院校,也是唯一一所设在沿海开放地区、以工科和应用学科为主的民族院校,历年来,学校高度重视学生计算机应用能力的培养,鼓励和支持教师针对民族院校的特点大胆进行公共计算机基础教学的改革与实践,截至2008年,《大学计算机基础》获得了辽宁省精品课程,还获得一项辽宁省教育教学改革成果二等奖等标志性成果。在此基础上,2009年开始,我校又开始实施新一轮的计算机基础教学改革工程,其主要内容是:①调整原有的课程体系。即将第一学期开设的《大学计算机基础》和第二学期开设的《计算机程序设计基础》两门课程进行合并、整合为一门课程;②改革教学内容。整合后的教学内容以“程序设计”为主线,将原《大学计算机基础》课程的内容进行取舍和提高,并融合到《计算机程序设计基础》课程的相关内容之中,将原定于第二学期开始学习的程序设计内容提前到第一学期开始学习;③以能力培养为导向,改革教学方法与手段。经过两年的实践,已经取得了明显的效果。本文根据作者面向部分专业讲授VB程序设计基础课程的经历介绍改革中遇到的主要问题、采取的措施和实践的效果。
二、改革中遇到的主要问题
1.民族院校的新生入学时计算机水平参差不齐,给教学带来很大困难
民族院校是为少数民族和民族地区服务的,是培养少数民族高素质人才、传承和弘扬各民族优秀文化的重要基地。全国现有民族院校15所,在校大学生20余万人。我校有来自56个民族的学生,来自民族地区和西部地区的学生占81.26%,少数民族学生占65%,生源个体差异大,有的学生入学时刚刚接触计算机,有的学生中文基础比较差。表1是大连民族学院2010级学生入学时计算机水平测试结果,可以看出学生的计算机知识和技能差异很大,其中,40分以下来自西部民族地区的学生占62%,而成绩较好的学生大部分来自东部地区。
表1大连民族学院2010级学生入学计算机水平测试情况
2008年以前,按照原来的课程体系是第一学期先开设一门《大学计算机基础》课程,使学生具备操作和使用计算机的基本技能,之后在第二学期开设“程序设计基础”课程,这种课程体系对基础较差的部分同学有益,但存在的主要矛盾是有一定基础的学生吃不饱,而且由于课程内容的起点比较低,已经落后于现代信息社会对大学生计算机应用能力的更高要求,因此,改革也势在必行。2009年以后,按照整合后新课程体系的要求,提高了起点,且程序设计基础课程调整到第一学期就开设,使得基础较差的部分同学面临着比较大的困难,也给老师的教学提出了新的挑战。
2.传统的课程教学定位不适于学生计算机程序设计能力的培养
程序设计基础课程的教学目标是培养学生具备利用一种计算机的程序设计语言编写出正确的程序进行问题求解的基本能力;课程的特点是程序设计语言的理论知识是格式化的记忆性知识,且内容多而散,而编程序时则需要学生能够根据所求解的不同问题进行灵活运用;教学的重点是程序设计能力的培养,难点是求解问题的计算思维能力的建立。传统的教学方法侧重于对格式化的语言知识的理解和记忆,教师和学生忙于对大量语言知识单元的教与学,实验教学也是主要针对知识单元设置相应的实验项目,侧重消化和吸收,期中或期末布置一个综合性的大项目,让学生综合运用所学知识完成程序的设计。在多年的教学实践中,我们意识到这种教学方法存在的问题,一是在平时的教学中,学生只关注知识单元的理解和单一功能的实现,把本来具有前后联系的知识割裂开来,往往是学了后面忘了前面,等到期末做综合性大项目时缺乏整体观念而感到茫然,根本达不到期待的效果。二是由于课程内容较多,教师总想尽可能多的布置实验项目,形成一种以量取胜的导向,且总埋怨学时不够。三是实验项目的设置以实现单一功能为目的,重在训练学生理解所学的格式化命令运行的结果是什么,缺乏训练学生灵活应用的能力,仍然停留在一种操作技能性的能力培养层面。学生普遍认为枯燥难学,难以形成整体的逻辑思维,其结果是只要题目稍作改变就不知所措。因此,应该将课程教学的定位调整到培养学生的计算机程序设计能力上来,重点应该是如何训练学生建立求解问题的思维能力。
三、采取的措施
1.实施强化辅导,帮助基础较差的学生跟上正常的教学进度
1)计算机程序设计类课程体系设置不够合理
目前,不少高校计算机专业程序设计类课程的设置,大一新生一进校,第一学期就开设C语言程序设计,或者C++程序设计,其理由是认为学生在中学阶段进行过信息技术教育和简单的程序设计基础训练。而结果呢,由于中学阶段的信息技术教育在很多地区特别是农村地区得不到重视,或者没有全面的开展实施,学生刚入大学时对计算机的认识和理解不够深入,就进入了C语言或者C++语言程序设计的学习,其教学效果很不理想。因此,学生对后续课程如《数据结构》、《Java程序设计》等课程的学习也将受到很大影响,显得很吃力,而且学习效果也比较差。
2)教育理念和教学方式不够恰当
程序设计类课程的教学,如C语言程序设计或者C++程序设计,很多教师注重基本概念和语言的语法规则的教学,在相应的课程实验中也只是对基本语法的训练,而忽略了对学生分析问题的方法、思想的培养,学生的创新能力不强。因此,学生在学完一门程序设计类课程后,往往感觉到能阅读程序,能读懂程序,能理解别人写的程序,可让自己动手来编写一个稍微复杂一点的程序,却显得很茫然,无从下手。
3)教学内容的组织和安排不够符合学生的认知规律
学生对程序设计类课程的学习,很大一部分同学是:翻开教材,课本中的程序个个都会,能看明白;闭上书,自己来重写一下这些程序,错误百出。其原因还是由于教师在教学过程中没有把握住学生的认知规律,学生对课程知识理解不够牢固[2-3]。如《C语言程序设计》课程的教学过程中,指针这一部分知识是安排在教学内容的靠后章节讲授,学时短,应用少,但指针却是这门课程的重点,后续课程中的应用很多,学生对这一知识掌握不好,势必影响后续《数据结构》等课程的学习效果。
4)教材建设缺乏针对性,系统性
目前,很多普通高校计算机专业都还没有编写适合自己学生的教材,基本上都是使用高校计算机专业规划系列教材,而程序设计类课程的教材很多,每本教材都有作者自己的内容安排和章节设计方案,而且教材的选用也不固定,不同的授课教师常会选用不同的教材,这样往往会有在程序设计类课程群的教材使用中,出现知识点和讲授内容的重复、教材的难度与学生的知识水平不符等问题,教材建设针对性和系统性差。
2计算机程序设计类课程教学改革方法及措施
1)调整计算机程序设计类课程体系
针对在现行的课程体系中,学生由于C语言或者C++程序设计的学习效果不理想,而导致对后续课程的学习受到很大的影响,应将计算机专业程序设计类课程教学体系和课程设置进行调整。在大一第一学期开设《计算机导论》课程,目的是让学生对计算机学科和计算机领域的研究内容有初步的认识,了解并掌握如数据在计算机中的存储与表示、计算机工作原理、计算机基础知识,计算机硬件系统,计算机软件系统,多媒体技术基础,通信与网络基础等方面的知识。[4]在此基础之上,大一第二学期开设《程序设计基础》课程,讲授内容可以是C语言程序设计或C++程序设计,目的是进行程序逻辑训练,让学生掌握程序的基本结构和程序调试基本技能。在学生掌握了基本的程序设计基础之后,再开设《高级程序设计技术》课程,重在培养学生程序设计方法和思想,其教学内容是程序设计中的一些高级处理技术,如数据类型、指针的高级应用,文件的操作,图形界面与动画设计,键盘与鼠标操作,以及一些典型算法应用。在学生掌握了程序设计能力和程序设计思想方法基础上,再先后开设《数据结构》、《Java程序设计》课程。《数据结构》课程是培养学生根据实际问题的要求有效地组织、存储、处理数据的能力;《Java程序设计》贯穿面向对象程序设计新理念,让学生掌握面向对象程序设计思想和技术。在高年级,针对不同的专业方向,还可开设VC++、C#、LINX等程序设计类选修课程,提高学生的编程水平和实践能力,以满足社会对软件人才的不同需求。这样,就形成了“基础训练+方法培养+提高能力+拓展层面+实践应用”的程序设计教学新模式和程序设计类课程新体系。
2)改革教育理念和教育教学方式
程序设计类课程的课堂理论教学中,采用案例教学法可以取得较好的教学效果,可将一个较复杂的项目分解到各章节去讲授介绍。如在《程序设计基础》课程教学过程中,我们使用了一个学生成绩管理程序项目案例,在讲授数组这一部分知识时,就可以将这个案例引入进来,介绍为什么要使用数组来存储多个学生的成绩,要对学生成绩排序应该怎么办;当课程进行到函数这一章时,引入了案例中的模块设计思路,介绍为什么要将项目分解为成绩录入、成绩排序、成绩查找、成绩统计等多个模块,模块之间如何去调用;当课程继续进行到结构体这一章时,让学生分析理解案例中,学生的信息不仅包含成绩,还包含姓名、学号时应该怎样处理;讲授到文件这一章时,让学生理解要将案例中的学生成绩等信息存储到一个文件中去,怎样去实现。这样,通过这一个完整的案例贯穿到整个课程的学习,不仅能使学生掌握课程中的基本知识,也能让学生直观的感受到一个复杂项目的设计过程。
3)改善教学内容的组织和安排
在程序设计类课程的教学过程中,我们将教学内容进行了调整和重新组织。在《程序设计基础》课程的教学过程中,将指针这一部分知识分散到各个章节去讲授,在讲到变量定义时,就引入地址和指针的概念,讲到数组和函数部分时,将指针的应用也同时在案例中进行讲授,这样,同学们也很容易接受和消化理解。在《高级程序设计技术》课程教学中,不讲授语言的基本知识,只讲授指针、文件、图形界面、动画、键盘、鼠标等的高级应用操作和设计。《数据结构》课程中,讲授各种抽象数据类型的定义,及相应的算法设计。在《Java程序设计》课程教学中,重在培养学生面向对象程序设计思想和编程技术,对教材中的基础知识部分如常量、变量、数据类型、数组等进行略讲或不讲,只是在应用中进行简单介绍该注意的问题,这样,就可以将更多地学时放在对学生面向对象编程思想的培养上。
4)加强课程和教材建设
在程序设计类课程群教材建设方面,应该有区别的选取具有系统性的、适合自己学生水平的高质量教材,或者课程群相关教师合作编写出版教材或讲义,这不仅使课程群中的课程教学内容具有系统性,也适合自己学生的认知水平,具有较强的针对性,同时,授课教师也能熟练驾驭教材和授课内容。近年来,我校计算机专业程序设计类课程群教师编写出版了《程序设计基础》、《数据结构》教材和相配套的习题册,教学效果有了明显提高。
3结束语