APP下载

计算思维的C++项目式教学的研究与实践

2013-03-05初耀军

电脑知识与技术 2012年36期
关键词:项目式教学计算思维创新教育

初耀军

摘要:以C++项目式教学为例,以掌握C++基础知识为前提,以综合运用C++语言知识为目标,以软件工程、软件项目管理原则为导向,从教学方法、教学内容、教学过程和教学效果考核四个方面,将基于计算思维的项目式教学方法在实际教学中进行实践,培养大学生创新思维意识。

关键词:计算思维;项目式教学;创新教育

中图分类号:G642 文献标识码:A 文章编号:1009-3044(2012)36-8700-04

1 计算思维与项目教学法

1.1计算思维

周以真教授认为,计算思维是运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。计算思维和理论思维、实验思维一起被称为推动人类社会文明进步和科技发展的三大科学思维。

进一步地定义为:通过约简、嵌入、转化和仿真等方法,把一个看来困难的问题重新阐释成一个我们知道问题怎样解决的方法;是一种递归思维,是一种并行处理,是一种把代码译成数据又能把数据译成代码,是一种多维分析推广的类型检查方法;是一种采用抽象和分解来控制庞杂的任务或进行巨大复杂系统设计的方法,是基于关注分离的方法(SoC方法);是一种选择合适的方式去陈述一个问题,或对一个问题的相关方面建模使其易于处理的思维方法;是按照预防、保护及通过冗余、容错、纠错的方式,并从最坏情况进行系统恢复的一种思维方法;是利用启发式推理寻求解答,也即在不确定情况下的规划、学习和调度的思维方法;是利用海量数据来加快计算,在时间和空间之间,在处理能力和存储容量之间进行折衷的思维方法。

1.2 项目教学法

项目教学法就是在老师的指导下,将一个相对独立的项目交由学生自己处理。对C++项目式教学法还包括:人员的组织与管理、软件度量、软件项目计划、风险管理、软件质量保证、软件过程能力评估、软件配置管理等都由学生自己负责,学生通过项目的训练,了解并把握整个过程及每一个环节中的基本要求。

计算思维是信息社会中创新的需要,是大学生创新性思维培养的重要组成部分。C++项目式教学不能仅限于软件工程指导下的C++语言基础的综合训练,还应该在软件项目管理原则下的培养创新性思维。

2 C++项目的教学实践

2.1教学内容

2.1.1项目的选取

以《全国计算机二级C++考试大纲》的要求为准绳,制定适合我院特点的《C++课程设计标准》,选取《学生成绩管理》项目为案例。《学生成绩管理》学生比较熟悉,能覆盖C++大纲要求的知识点,可引导学生从日常生活中发现问题、分析问题和解决问题,减少材料收集,缩短调研、需求分析时间,相对增加C++基础的学习时间。学生可领悟到项目源于生活,创新、发明源于日常生活,“处处留心皆学问”。同时布置同步练习项目《企业工资管理》,学生在项目需求分析、总体设计、详细设计、编写代码、测试等有关方面的内容有一定的独立训练。

2.2教学方法

2.2.1复杂任务简单化

程序设计的基本原则是自顶向下,逐步求精。将《学生信息管理》划分为系统初始化、数据输入、数据处理、数据输出、数据维护、帮助等子项目(或模块)。如果划分后的子项目还复杂,例如数据处理,就进一步再分:数据排序、数据查询等。这样直到每个部分只完成单一功能,代码行数不是很多为止。

2.2.2合适的描述方式

UML是面向对象开发中一种通用的图形化建模语言,它定义良好、易于表达、功能强大且普遍适用。面向对象的分析主要在加强对问题空间和系统任务的理解、改进各方交流、与需求保持一致和支持软件重用等4个方面表现出比其他系统分析方法更好的能力,成为主流的系统分析方法。引入UML,对项目需求分析、总体设计、详细设计、编写代码、测试等各个阶段各个部分进行描述,尤其利用UML图描述算法。同时,讲解UML图到程序的转化方法。

2.2.3注意鲁棒性

鲁棒性(robustness)就是系统的健壮性。它是在异常和危险情况下系统生存的关键。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。明显地,成绩的值域,一般成绩不能为负数等,但常被初学者忽略,致使程序执行时接受负数。在高校,成绩范围一般在0-100,要对超过这个范围的数据进行检测,并给出相应的处理。变量的数据类型定义,要根据使用数据集的具体情况,如考试成绩,如果是在正整数0-100范围内,定义考试成绩变量无符号短整型较好,否则浪费存储空间。

2.2.4启发式教学

对冒泡排序:依次比较相邻的两个数,将小数放在前面,大数放在后面。第一趟得到最大数放到数组最后元素的位置上,第二趟将剩余的元素再两两比较,将剩余元素中的最大值,放到倒数第二个位置,……。这样,从中找到趟数与该趟比较次数之和等于元素个数。同时,启发学生对于二维数组,如果按行(或列)排序时,对应的列(或行)中元素也要交换。通过启发,使学生在处理某问题时要考虑相关问题,包括异常问题。

2.2.5算法的优化

对数据的冒泡排序,当进行某趟排序后,数据已经满足排序要求了,是否还进行排序?如果结束排序,应该设计一个标记。该标记初始值为不需要排序。如果有交换,将该标记置位需要排序,当本趟排序结束后,检查该标志是否是不需要排序,如果是不需要排序,则排序结束,否则继续进行排序,进而优化了算法。再如求质素问题、斐波那契序列问题等的优化。通过算法优化是学生深入了解算法执行时间和数据占用的空间的估算。

3 教学过程

3.1创设情境

3.1.1用已知问题,创设情景

语法上,先回忆数学中的有穷序列,再讲解数组,并将数组和有穷序列加以对照;二维数组与矩阵、平面对照;三维数组与立体坐标以及3D电影等对照。

算法上,以往用目测方式将一组数有序,进一步给出两两比较进行排序的冒泡法。再如,如何判断一个正整数M是否是质数,根据数学定义求解,同时用正整数分解两个因数积的形式得到最大因数不超过M/2,再进一步分析,最大因数不超过M的平方根。

3.1.2 新旧知识的连接点,创设情景

让学生回味“人以群分物以类聚”的含义,进而提出“人”有哪些特点和活动。再让学生回忆“演绎和推理”知识,在函数、结构体的基础上,进一步提出有关“类”的概念、特点、语法格式等。

通过对比使学生明白:计算机中很多概念、编程思维源于数学。用已有的知识,激发学生学习兴趣。

3.2 优化师生关系

3.2.1 学生自主探究

在提出问题之后或总结所讲知识之前,都给学生思考甚至是查阅资料的时间,强化学生自学能力,激发他们的创造潜力;鼓励学生合作探究,让同学讲解他们解决问题的思路、方式方法,以形成集体探究的氛围,培养学生的合作精神;对良好的研究结果给予肯定,对不足的研究结果给予分析,找出不足的原因,提示合适的解决方法,使学生不会因为一次的研究结果不足,就成为学习的障碍,甚至萎靡不振。同时,告诉学生解决问题的方法不是一层不变的,鼓励学生积极怀疑已有的算法,探讨更优的算法。“尽信书不如无书”。

3.2.2 创设良好环境

良好的环境是养成计算思维的外部环境。通过各种载体为学生提供丰富的实例,让学生在模仿中逐渐形成计算思维能力;通过《学生成绩管理》项目的讲解,一方面解决语法知识,另一个方面也要讲解项目设计的原则、思想、方式方法等, 把学生引入真实的工作情景,通过练习项目激发其自觉运用计算思维的方法原则;在讲解项目和练习项目上,鼓励同学各抒己见,并营造宽松、和谐、民主的氛围,鼓励学生独立思考,提出问题,激发学生高涨的学习情绪和强烈的探索欲望,使其思想流畅,思维活跃。

3.3 鼓励学生探究

对于设计的项目,其设计思路更是多种多样。鼓励学生拿出自己的设计思路和方案,以培养他们的探究能力。在课堂教学中,抓住教材内容的重点、难点或学生容易出错的地方,故意出错,引导学生去探究、纠正。这对保护学生创新意识,培养学生探究能力很有好处。从学生的实际出发,布置实践性的题目,指导学生参加探究活动,把相关知识和生活实际紧密联系起来。

3.4 软件项目管理

3.4.1 项目设计

在项目设计阶段,每组学生通过广泛调研,并与教师进行充分的思维沟通后确定选题并明确项目的总体目标。

3.4.2 制订计划

通过开展小组交流讨论,确定项目的实施计划,包括需求分析、概要设计、详细设计、实现与单元测试、集成测试阶段、确认测试、文档编制等各个阶段的任务、输入、输出、实施等内容、完成时间以及组员间的分工等,制订系统实施计划书。分成系统分析和设计、系统实现和测试三个团队。每组只有四人,每个组员负责其中一个团队,其余两人作为成员,项目负责人总协调,但也是团队中的一个成员。

3.4.3 实施计划

按照实施计划书中确定的工作步骤和分工,完成项目的开发。分工时要特别关注任务量的均衡性,尽量在同一时间段完成任务。

4 教学效果考核

4.1 阶段考核

在老师的监督协调下,各个组都认真完成项目的实施计划,包括需求分析、概要设计、详细设计、实现与单元测试、集成测试阶段、确认测试、文档编制等各个阶段的考核,检查相应的资料、文档和代码,没有完成就不能进入下阶段设计,做好各个阶段的考核记录。

4.2 小组自评

在自评阶段,教师指导学生理解迭代和收敛的概念,不断迭代地优化系统模型,一方面消除功能性错误;另一方面,按照预防、保护及通过冗余、容错、纠错的方式,从最坏情形恢复系统的计算思维原则,使系统足够强壮,此时视为收敛,得到最终的系统。

4.3 交流

完成自评过程后,每一组的代表在全班展示各自的系统,并说明系统设计的过程,遇到过什么问题,这些问题是怎么解决的。其他组的学生,包括教师都可提出问题,让代表或组内成员做出解释。这个过程是暴露思维的过程,在彼此的交流中,不同观点之间相互碰撞,使每一位学生在较短时间内都对问题获得了多方面的较深入的认识。这不仅对培养学生的计算思维,而且对培养学生发散思维、批判性思维的能力都大有好处。

4.4 综合评价

在每一个阶段都要求学生记工作日记,并给出相应的评价表,包括自评和组内互评,不仅对工作,还对其表现出的包含计算思维在内的能力、态度、方法等进行全方位的评价;教师根据项目完成情况,以及与学生思维沟通、观察平时表现、查看工作日记等给出自己的评价。最终的评价由自评、组内互评和教师评价三者构成。

5 结论

通过C++项目《学生信息管理》教学,以及《企业工资管理》项目的练习,使学生在积极学习掌握C++课程的基础上,初步掌握了软件工程、软件项目管理等相关内容以及企业文化,用计算思维指导教学方法、教学内容、教学过程和教学效果考核四个方面,给学生独立思考、共同研究的空间,严格的阶段考核,使学生即了解了软件开发的一般原则,又为培养学生的创新性思维意识奠定基础。

参考文献:

[1] 周以真.计算思维[J].中国计算机学会通讯,2007,3(11):83-85.

[2] 何明昕.关注点分离在计算思维和软件工程中的方法论意义[J].计算机科学,2009,36(4).

[3] 廖伟志,李文敬,王汝凉.计算思维在离散数学课堂教学中的应用[J].计算机科学,2008,35(11).

[4] 李芳,李一媛,杨兵.计算思维在《图像处理》课程中的实践及应用[J].计算机科学,2008,35(11).

[5] 陈杰华,戴丽娟.以培养计算思维为核心的程序设计实验教学[J].实验技术与管理,2011(1).

[6] 牟琴,谭良,吴长城.基于计算思维的网络自主学习模式的研究[J].电化教育研究,2011(5).

[7] 薛磊,孙玉强,顾晓清.在应用型本科教学中开展项目教学法的研究与实践[J].中国电力教育,2010(5).

[8] 薛磊,孙玉强,顾晓清.基于计算思维的项目教学法的研究与实践[J].教育与职业,2012(32).

猜你喜欢

项目式教学计算思维创新教育
民办本科高校新闻专业项目教学的实践与思考
论项目教学在高职计算机网络技术专业课程教学中的应用
程序设计课程中计算思维和应用能力培养问题研究
小学数学创新教育开展研究