公务员期刊网 论文中心 正文

计算思维的程序设计课程改革研究

计算思维的程序设计课程改革研究

摘要:通过分析程序设计课程教学现状,提出了基于计算思维的程序设计课程教学改革方向。探讨将计算思维引入程序设计课程教学,并进行强化训练的教学方法与实践。教师从计算思维的角度重新审视和组织程序设计基础的课堂和实践教学,可以让学生树立用计算机求解问题的意识,实现教学由传授知识到培养能力的转变。

关键词:程序设计课程;计算思维;教学改革;教学方法与实践

0引言

程序设计课程属于高校非计算机专业的必修公共课,主要基础课程有“C语言程序设计”、“VisualBasic程序设计”、“VisualFoxPro程序设计”、“VisualC++程序设计”等,对于培养大学生的逻辑思维、抽象思维、创新精神与创新能力,以及提高综合素质起着十分重要的作用。在我校,非计算机专业学生占全体学生比例约为90%,其程序设计课程一般采取大班上课,学生刚开始对程序设计课程颇有兴趣,但随着知识点的增多,难以理解和记忆的新概念、新术语、新规则大量出现后,逐渐感觉课程难度加大,且认为与后续专业课程结合不够紧密,未正确认识到计算科学在本专业领域中的重要作用,所以学习的主动性、自觉性不断下降,学习效益低。最终导致学生实践能力不足,综合分析能力及创新能力欠缺,难以满足当今社会对人才的要求。因此,程序设计课程的教学改革势在必行。

1计算思维

目前,计算思维的培养成为国际和国内计算机教育界关注的热点。计算思维概念的提出,国际上广泛认同的是2006年美国卡内基•梅隆大学计算机系主任JeannetteM.Wing教授在ACM上发表的《ComputationalThinking》(计算思维,简称CT),她提出:“CT是运用计算机科学的基础概念进行问题求解、系统设计,以及人类行为理解的涵盖计算机科学之广度的一系列思维活动[1]”,她认为计算思维是除阅读、写作、算数外,每个人必须掌握的技能之一。在我国,2010年《九校联盟(C9)计算机基础教学发展战略联合声明》的核心要点也强调“需要把培养学生的‘计算思维’能力作为计算机基础教学的核心任务[2]”。从国家层面上讲,大学计算机基础教育这门课程的定位就是基础课程,也就是与数学、物理同等地位。既然是基础课程,其教学方法和教学理念就应该像数学与物理一样,将学科的基本理论、基本思维教授给学生。计算和计算思维是计算机基础课程的基本理论和基本思维,科学家已将计算思维和理论思维、实验思维并列为人类三大科学思维。因此,在大学计算机基础教育中强调和深化“计算思维”的培养,既有助于计算机基础教育学科的健康、持续发展,又有助于国家战略型人才的培养。程序设计课程是大学计算机基础课程的重要分支,也是许多高校非计算机专业进行计算机基础教育的重要课程之一。程序设计课程的学习主要有二个内容:第一,算法学习,即学习问题求解的方法;第二,编程实现,即理解计算机是如何实现算法的,利用计算机编程实现算法。课程学习不只是编写程序,而是算法思想与问题求解的思路。总之,要教会学生使用计算机编程,逐步形成计算思维。

2程序设计教学与计算思维

程序设计课程是训练学生思维能力的一个最直接最重要的平台,而计算思维则提供了重新审视程序设计教学的视角,将计算思维融入到程序设计教学中是改革的必然趋势。计算思维的本质是抽象和自动化,计算思维的抽象是使用符号代替实际问题中的各种变量,每个程序包括各种标识符、常量、变量、数组、函数和结构体等符号语言,这些组合在一起就构成了程序设计语言。计算思维的自动化则体现在程序的机械式执行,这也是冯•诺伊曼计算机体系的本质特征。要实现自动化,就必须要设计精确的算法和严格的程序语言体系。计算思维的主要特征有三点。⑴严谨规整。完备的算法是计算机程序解决问题的基本要求,它的实现必然要使用严格的数学符号描述。计算思维要求用确定、形式化并且无二义性的语言描述问题,这就要求在程序设计课程教学过程中强化计算思维训练。例如学生在编写程序时使用了错误的符号或者语法,都会在编译或运行时提示错误,教师要引导学生纠正自己的错误,培养他们严谨的科学实证精神和编程的良好习惯,这些都属于强化计算思维严谨性的范畴[3]。⑵目标明确。计算思维是用来解答问题的,它将实际生活中的问题以抽象化和程序化的形式表示出来。通常解答问题的过程如下:发现问题—分析问题—思考问题—解决问题—反思。程序设计课程要注意培养学生依据已有的知识体系,提出问题、解决问题的能力,着重强化利用计算思维的方式描述问题和使用机器语言解决问题的训练。例如,成绩5级计分制就是我们在日常生活中感受到的问题,学生可根据自己对成绩等级计分的理解写出数学式,然后用多分支结构算法进行描述,最后上机实现。⑶机械化。用来描述问题和解决问题的算法有三种形式[4]。①生活算法:完成某项任务的计划,例如一个学期的学习计划。②数学算法:对一类计算问题确定统一的求解方法,例如一元二次方程组的求解公式。③计算思维算法:精确描述问题和求解问题的自动化形式语言,比如高级程序设计语言。计算思维算法强调利用计算机的速度和存储优势,通过严格机械化的操作时序解决实际问题。比如“鸡兔同笼”问题可以使用两个二元方程组进行数学求解,但是计算机算法则可以使用穷举法进行简单重复的操作求解,充分利用了计算机的计算速度优势。在程序设计课程中强化计算思维训练,可以让学生掌握使用机械化思维进行信息处理的能力[5]。

3基于计算思维的程序设计课程教学实践

对于非计算机专业的学生来说,学习程序设计的目的是学会用计算机去分析问题和解决问题的思维方法,因此计算思维可以贯穿于程序设计课程的整个教学过程。

3.1计算思维视角下的课程引入

首先,在引入程序设计类课程之前告诉学生编程能力是计算思维的具体表现。学生不仅要掌握计算机语言的相关知识,而且要能够应用程序设计的思想与方法分析和解决问题。例如,VisualBasic程序设计基础就是VisualBasic语言。正像自然语言的产生是人类社会活动发展的客观要求和必然结果,同样,计算机语言的产生和发展则是人类使用计算机的客观要求和必然结果。从计算机语言的基本语法到其整体结构,都渗透着许多计算思维。因此,将“计算思维”引入“VisualBasic程序设计”教学就是:在讲解相关知识点的同时,也要讲授其中所反映的计算思维,通过思维强化知识,通过知识培养思维。人们利用计算机就是为了处理信息数据,而不同类型的信息数据,其表达方式不尽相同,其处理方式也会有所不同,那么,计算机是如何实现信息数据的表示、存储和处理的,这其中蕴含的计算思维又是什么。首先,根据冯•诺依曼计算机体系结构:从软件方面考虑,可通过声明或定义不同类型数据以表示不同类型的信息;从硬件方面考虑,可通过存储元件可实现信息数据的存储,不同类型的数据占用不同长度的存储单元。但仅仅完成信息数据的表示和存储是远远不够的,而要真正实现数据处理,由此便产生了计算机语言,即利用计算机语言编写的数据处理程序指挥CPU(中央处理器)完成相应的数据处理。这个通过人、机共同努力完成的“问题求解”过程,就是一个计算思维的实现过程。显然,实现这样一个信息处理的计算思维,是需要计算机语言的技术支持即:数据表示(数据类型)、数据存储(变(常)量)和数据处理(表达式和控制结构),并由此引出VisualBasic语言基础知识的学习。

3.2梳理内容,加强基于计算思维的关联案例库建设,创新教学方法

笔者在深入研究非计算机专业学生认知规律、思维模式和专业背景后,站在计算思维的层面上按照课程知识的内在体系结构梳理教学内容,突出“案例化、实用化”,强调基于计算思维的关联案例库的建设。关联案例,一方面是指案例中的知识点相互关联,另一方面是指案例和生活、专业领域中的应用相关联。例如,在“VisualBasic程序设计”课程中,可以根据课程知识点,按代表性、实用性、趣味性原则来设计关联案例,如计算器、字幕、闹钟、文本编辑器、菜单、数据库管理系统等,将设计全过程呈现在大屏幕上,让学生亲身感受并参与其中,激发了学生的求知欲。笔者在“VisualBasic程序设计”课程第一堂课中就展示经典案例及上届学生的优秀作品,使学生对本课程产生浓厚的兴趣,接着以一个简单实用的例子展示了“VB”小程序的制作,介绍了VB编程环境和VB编程四部曲,说明VB编程上手的容易,克服学生的畏难情绪,帮助学生更快地入门。在课堂教学中,笔者贯穿“案例引导,精讲多练,教学互动”的教学原则,探索和自创出一套适合程序设计课程的关联案例式教学方法(“关联案例展示—案例剖析—讲解相关知识点-知识点在实践中的应用”),即在传统教学方法的基础上,将关联案例式教学法引入到课堂教学中来。例如,在VisualBasic程序设计课程教学中,可以用案例“登陆界面的制作”讲解基本控件(form、label、text、command等),用案例“出租车计费问题”讲解分支结构,用案例“计算器”讲解控件数组,用案例“成绩管理系统”讲解菜单和多重窗体程序制作等。这些实例渗透了“知识来源于生活”的教学思想,能使学生意识到学习知识的目的是为了解决生活中的实际问题。此外,还可以尝试从社会实际、学生实际出发,采取多种直观、具体、多样化的教学方法,去激发、调动学生的学习热情和兴趣。比如讲授for循环语句时,尽量采用启发式教学,老师多提问,引导学生积极思考答案,自己得出结论,最后再由老师补充完善。例如,我们可以从最简单的计算1+2+3+……+10这个问题开始,然后让学生计算10!=1×2×3×……×10,再让学生计算1!+2!+……+10!,这样不断地制造问题,让学生不断地想办法去解决问题,用改变循环体的方法,化特殊为一般;用比喻的方法降低学生对累加器的理解难度,化抽象为具体,不断地感觉到学习程序设计的用途和乐趣,积极地思考、分析、归纳,从而使计算思维得到训练。又如讲到数组中对数据的排序问题时,可以采用启发式、游戏法和课件演示教学法,游戏法是让几个同学上来,站成一排,然后按身高进行排序,课件演示教学法师则用Flash动画把排序过程详细展示,帮助学生更好地理解,促使学生利用自己已有的知识结构和逻辑思维对问题进行分析和归纳。通过这样的思维训练,让学生在思考中学习,在学习中运用新的方法破解难题,培养学生分析问题、解决问题的能力,锻炼学生数学建模能力,巩固知识的同时拓展技能和技巧。

3.3以上机实验为重点,思维多样化的计算思维强化训练

⑴以上机实验为重点笔者在讲授程序设计课程的教学过程中,采用以上机实验为重点的计算思维训练模式,让学生在动手实践中掌握知识、消化知识,强化计算思维。实验内容采用“验证-调试-设计”的形式进行设计;上机实验采用流程化管理的方式,对于任何实验内容,都要求学生按照“阅读题目-分析总结-设计算法-编写实现代码-上机调试-优化程序”的顺序进行,引导他们养成良好的思维能力和编程习惯;在实验过程中遇到困难和错误,不轻易否定和批评学生,而是指导他们分析难点和错误,自己解决。同时,给学生提出新的解决方案或排除未知问题的满足感,激发他们的学习积极性,大胆创新。强化计算思维,实验内容的设计非常重要。教师要不断学习和创作适合学生知识和心理特点的实验内容。实验内容不应是课堂内容的简单复习,要给学生提供计算思维的创新空间。课堂内容要符合实验内容,要给学生留问题,让他们自己分析总结,在实验上机时解决,提高自主思维能力。例如,实验案例:公主出嫁。美丽的公主伊丽莎白长大成人,邻国的六个王子来提亲,公主有三位侍女,她们猜测哪位王子会得到公主的芳心。侍女一说:“我认为公主会嫁给科尔王子,或者是威廉王子。”侍女二说:“我想公主一定不会选择亚瑟王子,因为他的身材实在太矮了。”侍女三说:“不管怎么说,公主肯定不会嫁给菲利普、查理、路易斯三位王子,因为他们的国家正准备和我们打仗。”事实上,三个侍女中只有一人猜对了。试编写程序,找出哪位王子能与公主喜结良缘。为了找出伊丽莎白的白马王子,从计算思维的角度进行逻辑推理。首先引入逻辑运算符和逻辑表达式,规定一些符号变换规则,将三个侍女的话分别转换成逻辑表达式,给出综合判断条件,再借助这些符号和规则将逻辑推理过程在形式上变得像代数演算一样。比如定义6个整型变量——A、B、C、D、E、F分别代表6位男嘉宾,变量取值为0表示不是伊丽莎白的白马王子,为1表示是白马王子。每位男嘉宾都有两种可能:“是(1)”或者“不是(0)”,6位男嘉宾按A、B、C、D、E、F顺序,有64种取值:000000,000001,…,111111。对案例分析的目的是让学生懂得:①掌握解题的重要一步是将人的想法写成计算机能够处理的表达式或操作步骤,要用到关系运算、逻辑运算和算术运算;②用计算机解题经常需要从多种可能性中寻找其中的一种或几种,因此,要用“枚举法”,当遇到大量重复计算时,自然就引出了循环结构;③分支是计算思维的重要方式。笔者借助这个案例题把程序设计的基本概念和方法传授给学生,当学生建立起这种认识之后,在潜移默化中也就培养了逻辑思维和计算思维。学生通过上机实践可以体会到计算思维的精髓[6]。上机实践要有目的地训练五种能力:①分析题目,找到问题,并将其抽象为数学模型;②构思算法;③编写程序;④调试程序;⑤分析运行结果,一旦出错,应该仔细认真找出原因,提出改正的意见。大多数学生对许多问题的看法是在实验课的讨论中逐渐清晰和升华,对思想启发、计算思维的培养起到推动作用。依据非计算机专业学生认知的规律,我们设计了生活化、趣味化的实验内容,如俄罗斯方块游戏、计算器、打字游戏等。⑵以思维多样化为核心点由于学生认知方式和心理特征存在个体差异,在程序设计课程的教学过程中必然会出现思维多样化的现象。教师要尊重这种认知方式的差异,倡导多样化的算法思维,即“一题多解”,鼓励学生根据自己的兴趣,从不同角度发现问题和分析问题,用不同的算法解决问题,用不同的程序实现算法,培养学生的探索精神和创新意识。强调多样化的算法思维,可以有效地强化计算思维,让学生明白“条条大路通罗马”的道理。好的算法不一定适用于每个问题和每个学生,并且几乎所有的算法都有局限性。在设计上机实验内容时,教师要考虑给出一些可供学生重构的程序片段,培养他们的思维创新能力。所谓重构,就是在已有的程序基础上衍生出的新的解决问题算法实现。这种通过分析已有程序的优缺点,修改并把自己的思维融入新程序的过程,就是最好的锻炼计算思维的训练手段。教师还应引导学生进行反思和创新联系,达到简化和优化算法的目的。这个简化和优化算法的过程可以很好地强化计算思维训练,帮助学生举一反三地学好程序设计课程。比如“百鸡百钱”问题,大多数学生都采用三重循环的算法实现。我们就可以提出改进方案,鼓励学生积极思考如何采用二重循环的方式实现,然后再比较两种算法的性能,三重循环的次数达到了100万次,而二次循环是1万次,性能提升了99%。一个简单的循环就可以让学生认识算法优化的魅力,这就可以让他们继续思考如何简化问题,公鸡数量不可超过32,就可以在循环中把公鸡数量由100降到32,同理,母鸡也降到98,这样循环又降低了10000-32×98=6864次,比之前的二重循环又减少了70%左右,这一系列的简优化处理,对于增强计算思维能力有极大的促进作用。

4结束语

本文通过分析程序设计课程教学现状和计算思维的特征,提出了基于计算思维的程序设计课程教学改革方向。并进行了基于计算思维的程序设计课程教学研究与实践:如计算思维视角下的课程引入;重新梳理和组织教学内容,加强基于计算思维的关联案例库建设,创新教学方法;以上机实验为重点、思维多样化为核心点的计算思维强化训练等。将计算思维贯穿于程序设计课程的整个教学过程。实践证明,这种教学模式对学生计算思维和创新能力的培养大有裨益。将计算思维引入程序设计课程教学的整个过程是必要的也是可行的,教师从计算思维的角度重新审视和组织程序设计基础的课堂和实践教学,提炼课程中含有的计算思维的基本概念、方法和思想,通过精心的课程教学设计和实验指导,可以让学生树立用计算机求解问题的意识,认识到计算机对于人的优势和局限性,最终自觉地运用计算思维来看问题、思考问题和解决问题,从而实现教学由传授知识到培养能力的转变。我们不仅要在程序设计课程中强化计算思维,还应努力把它推广到更多的计算机课程中去,真正地把强化计算思维做到实处。

参考文献

[1]JeannetteMW.ComputationalThinking[J].Communica-tionsofACM,2006.49(3):33-35

[2]陈国良,董荣胜.计算思维与大学计算机基础教育[J].中国大学教学,2011.1:9

[3]董荣胜,古天龙.计算思维与计算机方法论[J].计算机科学,2009.1:1-4

[4]陈杰华,戴丽娟.以培养计算思维为核心的程序设计实验教学[J].实验技术与管理,2011.1:125-127

[5]臧劲松.培养学生计算思维的程序设计课程教学[J].计算机教育,2012.2:78-80

[6]于宁,崔武子,蔡春,戴红.突出计算思维训练的VB程序设计实验教学[J].实验技术与管理,2016.9:182-185

作者:朱前飞 杨鼎强 蒋加伏 孟爱国 单位:长沙理工大学计算机与通信工程学院