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

时间:2022-08-28 12:15:55

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

摘要:如何在计算机程序设计课程教学中培养学生的计算思维能力,是计算机基础教学的基本目标之一。针对计算机程序设计课程的语法结构和案例分散现象,本文提出“项目贯穿、循序渐进、思维训练”的指导思想,介绍培养学生计算思维能力的教学方法和教学手段。

关键词:计算思维;项目贯穿;循序渐进;计算机程序设计

在《中国高等院校计算机基础教育课程体系(CFC)2008》中,提出对大学生计算机应用能力的三大要求:操作使用能力、应用开发能力和研究创新能力[1]。操作使用能力主要在第一门课程大学计算机基础中实现,后两种能力则主要体现在第二门课程计算机程序设计上。CFC 2008将学习目标确定成:1)学习问题求解的思路和方法,即算法。2)理解计算机是如何具体实现算法的,即如何才能有效地利用计算机编程。

在大部分高校中,C语言程序设计是非计算机专业理工科学生的一门必修课程。根据CFC 2008精神,其目标首先是使学生掌握程序设计的基本思想,能够用C 语言编写程序并具备一定的程序调试能力;第二是为学生今后利用计算机解决本专业问题奠定基础,培养学生利用计算机作为一种工具,乃至作为一种思维方式去思考问题、解决问题的能力。

在2010年“第六届大学计算机课程报告论坛”中,陈国良院士指出,计算思维能力是大学计算机基础课程教育过程中一个重要的培养目标[2]。陈国良院士同时还指出,人类科学发展的三大支柱是理论科学、实验科学和计算科学,与之相对应的是人们认识世界、改造世界的三种思维方式,即理论思维、实验思维和计算思维[2]。

那么,如何在计算机基础教学过程中,训练和培养学生的计算思维能力,使学生学会用计算机的思维去思考问题和解决问题,是一个非常值得探讨的问题。

1计算思维

美国卡内基•梅隆大学的周以真(J.M.Wing)教授在计算机权威期刊《Communications of the ACM》上指出:计算思维是运用计算机科学的基础概念进行问题求解、系统设计、人类行为理解等的一系列思维活动[3]。周教授认为,计算思维是人的思维,而不是机器的思维;是概念化的思维,而不是程序化思维;是一种思维方式,而不是一种产品;应当是每个人的基本技能,而不是仅属于计算机科学家。计算思维概念,与董荣胜、古天龙等教授2002年提出的计算机方法论有着很多共同之处。计算思维是从学科思维这个层面直接讨论学科的根本问题与学科的思维方式,而计算机方法论则是从方法论的角度来讨论学科的根本问题和学科形态[4]。

2010年,李国杰院士进一步指出,今天的信息世界已经是一个物理世界、信息世界、人类社会组成的三元世界,是一种新的信息世界观,与以往一人一机组成的、分工明确的人机共生系统完全不同。这种改变,使信息科学应当成为研究人机物社会中的信息处理过程[5]。

这种变化,对人们利用计算机分析、解决问题的能力提出了更高的要求,也对高等学校非计算机专业的计算机基础教学提出了更高要求。计算机基础教学需要培养学生的计算思维能力,并提高其信息素养,使学生在处理问题时,能够更好地利用计算机作为一种不可或缺的工具进行思维、表达,从而对各种信息进行深层次的加工处理,以便把其掌握的专业知识更好地应用到科学研究和生产中,促进科技进步和社会生产力的发展。

2C语言程序设计课程面临的问题

李未院士讲到程序设计是计算机学科的核心课程,吴文虎教授也谈到程序设计课程的教学经验,凡是讲授这门课程的教师都知道,这门课程比较难于教授,尤其是为非计算机专业讲授这门课程。在基础教学中,这门课程难于讲授的主要原因可能有以下几方面:

1) 教师用“专业”眼光去看待非专业的学生。

2) 教学中重理论轻实践,实践课时不足,对程序设计能力的培养不够。

3) 例题多而散,学习后,学生不能得到一个比较综合的训练。

4) 学生的水平参差不齐,教学中对学生个性化学习需求关注不够。

5) 课程特有的属性决定的。各种程序设计语言的语法结构一般都是零散的,学生难于相互关联、总结,采用的案例也是比较零散、短小的、关联不大。学生经常是学会了全部的语法知识,但仍然不知道这门语言能做什么,能解决什么实际的问题,甚至不知道如何解决问题。

6) 学生精力投入不足或学习方法不当,大部分学生认为自己毕业又不从事计算机软件开发工作,没有必要学习程序设计课程。

针对这些问题,结合CFC 2008精神,我们在C语言程序设计课程讲授过程中,以学生计算思维能力培养为目标,提出了“项目贯穿、循序渐进、思维训练”的指导思想,以改变传统计算机程序设计课程中侧重向学生介绍语法结构的做法。

3教学方法改革及计算思维能力培养

3.1项目驱动教学

在理论教学环节上,本着一个项目贯穿整个课程教学的思想。我们用“猜数游戏”为主、常见问题为辅进行各个章节的讲授。具体做法如表1所示。

3.2循序渐进教学

心理学家认为,模仿是孩子学习的第一步。通过模仿,孩子不仅能够复制行为,而且也能对模仿的行为进行加工,有所创新。人们经常把模仿描述成“学习的捷径”。在程序设计课程的学习过程中同样如此。让学生通过模仿现有示例,逐步掌握C语言中的各种语法要求、控制结构,不断加强学生对于课程的学习兴趣。

在实践教学环节上,我们将实验内容按照“验证―调试―设计”的顺序进行设计。

1) 验证:安排学生对学习过的内容利用现有的简单程序进行验证。

2) 调试示例:编写简单的程序作为调试示例,在其中设置学生经常遇到的各种小错误(包括语法错误、逻辑错误),让学生按照实验指导中的讲解,逐步找到各个错误。

3) 调试练习:让学生根据前面的调试示例,修改类似程序的错误,并进行总结。

4) 编程示例:针对常见问题进行分析、讲解、编程,让学生学习问题分析方法和程序设计方法。

5) 编程练习:根据编程示例,将题目进行略微调整或与前面的知识相结合,让学生进行编程解决。

通过上述实践步骤,学生可以逐渐掌握编写程序的语法规范及思维技巧。

在理论教学环节,同样按照循序渐进的原则进行问题讲解。例如,在讲授九九表输出问题时,按照如下的顺序设计问题并编程,逐步实现九九表的输出。

1) 输出1到9这几个数字。

2) 输出9行1到9。

3) 修改九九表中各行数值的个数,将输出的9行数字转化成九九表格式。

4) 最后研究数字的变化规律,实现真正九九表的输出。

3.3多角度思维训练

在C语言程序设计课程中,计算思维的能力要求主要体现在学生对于问题的分析、解决能力培养上。如何在课程讲述过程中,训练、提高学生分析问题、解决问题的能力,是讲授这门课程的全体教师的责任。我校除了在课程内容设置上按照“一个项目贯穿课程”的指导思想进行授课、在实践环节上按照“验证―调试―设计”的顺序进行设计,还在教学过程中注重以下几个方面。

1) 上机实验流程规范化。要求学生对于实验内容,要按照“课前预习―分析问题―设计算法―编写程序―上机调试”的顺序依次进行,使他们养成一个好的学习和思维习惯,逐步训练、提高他们分析问题、解决问题的能力。

2) 答疑指导引导化。在学生有疑问时,不直接为学生指出其问题,而是用提问的方式引导学生逐步自己找到问题所在。例如,学生的程序代码为:

学生提出要输出两个数的乘积,怎么输出结果不对呢?可以依次提出问题:应该输出什么信息呢?计算机屏幕上的显示和预期有什么不同?有哪些情况可以造成这种不同呢?printf函数的一般格式是什么,每部分什么含义?你所写的printf函数与一般格式一致吗?这样,通过依次设置问题,既引导学生自己发现了程序中的错误所在,又训练并逐步提高了学生发现问题、改正问题的能力。

3) 问题趣味化。常规的、一成不变的问题很难激起学生的学习兴趣,趣味性是激起学习兴趣的一个可行手段。那么,如何利用趣味化的问题讲解程序设计中的各种控制结构?这需要从案例设计入手。例如:用出租车的计费方式和if结构结合、用所得税的计算方式和switch结构结合、让学生把一天的行程用基本控制结构进行描述等。

4) 提倡算法的多样性。程序设计课程的价值之一在于训练、提高学生的计算思维能力,如果学生都按照教师的逻辑思维习惯进行分析问题、解决问题,这不能不说是一种失败。所以,在让学生学习教师分析问题、解决问题的同时,要倡导算法的多样性,培养、激励学生的创新意识、探索精神和问题求解能力。例如,有些同学数学基础很好,有一些问题,他们总会用数学的方式先进行初步解决,再结合计算机进行编程。对于这些同学,一定要进行及时的鼓励,并介绍他们的做法,使之感到编程的成就感。

5) 注重算法的简化和优化[6]。我们不能只提倡算法多样化,还要引导学生对算法进行研究,逐步达到简化并优化算法的目标。例如我们常用的“百鸡百钱”问题,很多学生按照公鸡、母鸡、小鸡的顺序用三重循环进行实现。我们就提出“是否可以用二重循环实现呢”,学生仔细一想,确实可以改成二重循环进行实现。再比较两次的实现方法,发现循环次数由100*100*100=1000000降到了100*100=10000,降幅达到了99%。一个简单的改进,让学生看到了算法改进的魅力。这也让部分同学想到“这个问题是否可以进一步简化呢”,再进行分析,发现公鸡的数量不可能大于32,从而可以将算法中公鸡数量上限从100改到32,母鸡数量上限也改成98,循环次数降到了32*98=3136,比二重循环又减少了近70%。这一系列的简化,充分调动了学生的学习兴趣。

4结语

在计算机程序设计课程的讲授中,通过采用项目贯穿、循序渐进及多角度的思维训练方法,学生分析问题和解决问题的能力得到了明显提高,也有部分同学因无法保证前后知识的连贯性,造成后期难以跟上正常教学进度,出现掉队现象。如何将计算机程序设计课程中的分散语法结构相互关联起来,利用好的案例提高学生学习积极性,培养、提高学生的计算思维能力,仍是值得探索的问题。

参考文献:

[1] 中国高等院校计算机基础教育改革课题研究组. 中国高等院校计算机基础教育课程体系2008[M]. 北京:清华大学出版社, 2008.

[2] 陈国良. 计算思维与大学计算机基础教育[R]. 济南:第六届大学计算机课程报告论坛,2010.

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

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

[5] 李国杰. 信息科学技术的长期发展趋势和我国的战略取向[J]. 中国科学,2010(40):128-138.

[6] 陈杰华. 程序设计课程中强化计算思维训练的实践探索[J]. 计算机教育,2009(20):84-85.

Cultivation of Capacity for Computational Thinking through Computer Programming

YU Xiaoqiang, ZHAO Xiuyan, YAN Pitao

(School of Information Science and Engineering, Dalian Polytechnic University, Dalian 116034, China)

Abstract: How to cultivate students’ capacity for computational thinking during the teaching process of Computer Programming, is one of the basic goals of computer fundamental education. Considering the statuses of syntactic structure of Computer Programming and unrelated cases using in it, instructions of one project throughout teaching process, advancing step by step, training the way to think are proposed in this paper. Moreover, the teaching methods of cultivating students’ capacity for computational thinking are introduced in this paper.

Key words: Computational Thinking; one project throughout teaching process; advancing step by step; Computer Programming

上一篇:师范院校计算机专业程序类课程群设置 下一篇:基于三维立体交叉渗透的软件工程课程建设