基于项目的数据结构课程教学改革方案设计

2019-09-17 11:20张靖
科技资讯 2019年19期
关键词:数据结构程序设计项目

张靖

摘  要:该文介绍了数据结构课程的特点及其在信息技术相关专业课程体系中的地位,分析了传统数据结构课程教学方式的优势与不足,通过研究企业项目环境对专业知识与技能学习的促进因素提出了一种基于项目的数据结构课程教学改革方案。该方案适用于面向培养应用型工程人才的相关院校,针对学生的专业知识、个人能力、团队能力等诸方面工程能力进行构建。

关键词:数据结构  教学改革  项目  程序设计

中图分类号:TP311.13-4;G642   文献标识码:A 文章编号:1672-3791(2019)07(a)-0113-03

计算机编程是信息技术(IT)相关专业所必须注重培养的专业基础技能。计算机编程课程体系通常包含程序语言、面向对象编程(OOP)以及数据结构等课程,培养目标主要是使学生初步具备编程技能并形成计算思维。数据结构是该课系中的高阶课程,培养学生对问题进行分析建模、算法设计和编程实现的能力。

数据结构课程内容具有高度的逻辑性和抽象性。数据结构实际上是依据问题的描述而为其建立的模型,表现为该问题所限定的数据元素集合以及集合中数据元素之间的关系,如线性表、栈、队列、树和图等。这些结构从逻辑上虽然不难理解其含义,但要在计算机一维线性排列的存储单元中表示它们,继而实现一定的处理算法则是非常抽象的领域。

传统的数据结构课程教学方式以教师的课堂讲解为主导。在教学中,通常直接引入某数据结构的逻辑定义,介绍几种物理表示方法以及相关操作的实现,进而分析算法复杂度、比较各物理实现之间的优劣。上机往往仅限于编程验证课上介绍的内容,题目与实际工程项目联系较少。课程考核以期末笔试为主,上机为辅。此种教学方式的优势在于知识体系的讲解全面而深入。学习习惯良好、学习基础深厚、擅长逻辑思维的学生能较好地适应此种方式。但在高等教育普及化的背景下,特别是在培养面向工程的应用型人才的相关院校,这样的教学方式面临挑战,不能有效地传授知识和技能。

在对学生进行的走访调查中,学生对于数据结构课程普遍缺少兴趣,少量学生依靠自觉性和苦读勉强可以跟上。其原因,首先是数据结构知识虽然由实践中总结提炼出来并成为体系,但是对于毫无实际软件设计和开发经验的学生来说往往不能理解其必要性,不能将该门课程与其专业能力的构建以及将来的就业相关联。其次,由于课程内容抽象性并与实际工程项目联系较少,学生的学习体验与其在基础教育阶段学习数学、物理等科目的体验相似,而学生在这一阶段恰好积累了较多的挫败感和抵触心理。这种状态不利于学生产生兴趣。最后,学生本身自觉性欠缺,基础不牢,学习能力不强,特别是对于抽象内容和不可见过程的思辨能力较低也阻碍其接受学科知识并内化为个人能力。那么是否存在有效的教授数据结构课程的方法?

1  企業项目环境分析

培养应用型工程人才的目标是使学生在毕业时能够参与并适应本专业工程领域内的工作岗位。可以将目光转移到企业开发团队进行研究。

在企业开发团队场景下,实习生或毕业生通常能够在较短的时间内掌握工作所需要的基本的专业知识和技能。这里面固然有学生已经经历了3~4年较为完整的专业课程培养的原因,但是企业团队为新人提供的环境也起到了不可忽视的作用。当新人加入团队,同样要经历一个学习的过程。他往往面对一个正在进行的项目并导向真正实用的产品。这产品或者已经上线运行,处于迭代更新的状态,或者将要交付用户投入实用。在这个项目中,新人被指派的任务通常是项目中极小的一个单元,其内容单一而具体。新人既可以集中精力研究这个局部问题,又必须从全局上搞清楚自己承担的任务在整个项目中的位置和作用。新人针对自己任务的所做的工作既可以是功能的实现也可以是对以往错误的修正。这些工作通常可以立即并入项目主体进行运行,新人可以立即看到自己工作所产生的成果。在较为正规的企业,通常会指派老员工来指导新人;新人在工作中也可以与团队成员进行交流和咨询。最后,学生一旦成为企业员工,即处于企业的考核压力之下。在这种情况下,新人往往能将压力转化为动力,主动地钻研思考并利用各种资源完成工作任务。

通过分析企业项目团队的状况,可以将其中有利于新人学习并提高专业知识和技术水平的因素做以下归纳。

(1)通过考核使新人投入学习、工作的态度更加端正和主动。

(2)基于实际项目、解决实际问题使学习目的明确,工作成果带来正向的激励。

(3)工作任务具体化、细节化使学习起步难度较低。

(4)有老员工提供指导和帮助。

(5)团队具有良好的讨论和交流氛围。

以此为参考,结合低年级本科生课程教学的实际情况,对数据结构课程进行基于项目的教学体系设计。

2  教学体系设计

(1)知识和技能体系。

前文已论述分析了面向应用的工程类院校的培养目标和学生的实际情况。以此为前提,一方面对数据结构课程的知识体系进行修订,量体裁衣,以打好基础、培养兴趣为导向,精简内容并降低难度。例如,针对线性表知识单元,只引入基本的顺序表和单链表,简要介绍双向链表和循环链表,而不再深入要求。

另一方面,在降低理论知识难度的基础上增加实践环节课时数,与理论课程课时数达到1∶1的配置。如培养方案规定课时数为64,按16个教学周计算,每周4个课时,其中2课时用作知识点讲解,另外2课时用作学生上机实践。

(2)教学和实验环境配置。

传统的课堂教学在多媒体教室进行。教师在讲台上利用黑板和投影进行讲解和演示,学生则听讲和记录笔记。这样的教学通常持续2个学时。学生上机则到专门的机房进行。由于数据结构课程的抽象性,大部分学生通常难以全程集中注意力。

新的方案将理论教学与上机实验合并,统一安排在机房进行。机房所有机位均面向教师机和投影屏幕。教师机可以通过机房教学系统控制全体学生机,能够进行切屏、下发文件、提交作业等操作。教师的授课过程在理论讲解、动画演示、程序演示等环节之间切换,具体在“授课方法”小节中阐述。

传统的数据结构课程实验环境往往注重结构的实现和算法的验证,多基于命令行用户界面展开。命令行用户界面是一种较早出现的交互技术,目前主要用于专业开发和工作领域。一方面,对于作为初学者的学生来说这种交互形式并不友好。另一方面,新世纪前后出生的大学生对于命令行用户界面比较陌生,他们对目前普及使用的图形用户界面(GUI)更加熟悉。因此,要为课程配置能够编写并运行基于图形用户界面应用程序的开发环境。以基于微软Windows系统的计算机为例,假设数据结构课程基于C/C++语言,则可以为其安装配置Visual Studio集成开发环境。该环境提供一定的图形用户界面程序开发支持。Qt是另一种可供选择的C++图形用户界面应用程序开發框架。它支持Windows、Linux、macOS等主流操作系统,实现了应用程序的跨平台开发,使用上也比Visual Studio更加便利。

(3)授课方法。

授课围绕知识点展开。

首先是基于问题的讲解。首先结合实际应用提出一个待解决的问题,然后从该问题出发进行推理演绎,从问题描述中提炼其内部的数据元素,分析数据元素之间的关系,从而导出数据结构。这样就可以建立知识点与常识之间的逻辑联系,使学生切实体会到学习当前知识点的合理性。

其次是动画演示。前文已经指出,数据结构知识具有高度的逻辑性和抽象性。由于数据结构的构建以及算法的执行完全在计算机内部完成,因此这个过程是不能直接感知的。需要借助额外的手段使数据结构和算法可视化,从而能够直观体会数据元素的内部构造、排列关系以及处理流程。动画可以从较为浅显直观的层面演示基于当前数据结构的算法,如栈的入栈、出栈操作,二叉树的先序遍历以及快速排序算法等。精心设计的动画通过适当的色彩搭配、合理的运动路径等引导学生集中注意力并具有一定的趣味性,帮助学生快速轻松地理解知识。

动画虽然生动,但是难以精确地反映程序执行当中指令跳转、变量赋值等具体细节。而对于编程学习而言,理解代码逻辑、追踪程序数据流恰好是学习重点。这一点可以通过集成开发环境提供的单步执行功能来实现。以Visual Studio为例,可在程序代码中的特定位置设置断点(break point),然后以调试(debug)模式执行程序,则当指令执行到断点所在行时即中止执行。随后即可通过功能键操纵程序逐行单步执行;同时,程序每执行一行,程序相关的各变量的赋值都会在调试界面中列出。借助此项功能,能够使学生对程序的数据组织、处理步骤一窥究竟。

课程讲解完成之后布置随堂作业。作业可以是书面题目,也可以是验证性的编程题。作业带有单元测试的性质。在学期末安排对课程整体的闭卷考试以检测理论知识学习成果。

(4)项目设置。

以前文所分析的企业项目团队场景为参考,为教学引入两个层次的项目,包括单元项目和课程项目。

单元项目面向知识单元。由教师提供一个项目选题以及项目代码框架。代码框架是可执行的图形用户界面应用程序,但是将与单元主题知识相关的环节留待学生实现。学生在完成了课堂学习之后,根据该单元的知识内容对项目进行设计和实现。例如,针对“栈”单元,教师提供一个计算器应用程序的框架,然后核心部分关于计算表达式的输入和结果计算部分则留给学生参考栈结构相关的特性来设计和编写程序。在这样的单元项目中,学生不必考虑除去核心功能之外的其它要素(如用户界面设计),只专注于知识点相关的部分;而同时,一旦实现了这部分功能便能得到一个完成的计算器应用程序产品。在单元项目中,学生除去完成。

课程项目面向整个数据结构课程。教师提供若干个不同选题但不提供程序框架。学生团队根据选题自主进行项目的设计,包括数据结构和算法的选择。课程项目可以从课程初期即确定选题,随着课程的深入进行设计、实现和优化。例如某课程项目要求实现一个可查询的通讯录程序,在课程前期学习了线性表之后即可基于顺序表和顺序查找来实现,到了课程后期完成了折半查找及二叉排序树等内容的学习后又可以对算法实现进行升级,完成软件性能的优化。

无论是单元项目还是课程项目,都要求学生结成2~3人的团队以协同工作。团队成员轮流扮演组长、编码、测试或文档撰写等角色。相关的考核也分别针对团队和个人两个层面进行。

(5)评价体系。

传统的课程考查方式是在学期末举行闭卷期末考试,并且期末考试成绩在总评成绩中占据主要部分。其余考勤、平时作业等环节也计入总评。在这种方式下,延迟到最后的考核使得在漫长的学期跨度中缺少对学生阶段性学习成果的监控。

在新的考核方案中,将期末考试成绩降低比例到40%以下而增加平时考核的比重。其中,平时考核涉及纪律、作业、单元项目及课程项目。各项可以按如下的比重安排:

①纪律:包含出勤和课堂纪律。该项只扣分不加分,直至取消课程考试资格。

②作业:考查作业上交情况和正确情况,占比20%。

③项目:考查项目总体完成质量及成员各自贡献量(互评),其中单元项目总体占比20%,由历次单元项目考评成绩综合计算;课程项目也占比20%,在学期末进行验收。

通过实行多维度、迭代式的考核评价,使最终成绩能够反映学生在该课程中掌握专业知识技能、培养个人能力、团队成员协同工作等各方面的学习成果。常态化的考查评估也督促学生在平时付出更多时间和精力来完成学习任务。

3  结语

该文提出的数据结构课程教学体系设计适应于面向培养应用型工程人才的信息技术类专业。相比于传统的教学方式,该方案从项目出发,将课程知识代入到工程项目场景中,以帮助学生明确学习目标,提升学习兴趣。同时,在项目场景下,学生有更多的机会进行自主学习并参与到团队协作、自主创意和设计等工程环节。另外,相比传统教学方式,该课程方案要求降低难度、精简知识结构,所教授的知识在广度和深度上都有一定程度的降低。该方案还对教师自身的专业应用技能和工程能力有较高的要求。

参考文献

[1] Carolina Gallardo Pe?rez, Pilar Marti?nez Garci?a, Jesu?s Sa?nchez Lo?pez.Project-based Learning Experience on Data Structures Course[A].IEEE Global Engineering Education Conference[C].2011.

[2] 孙浩军,孙梅,熊智.计算机专业基于课程群的EIP-CDIO 项目设计[J].计算机教育,2010(11):101-106.

[3] Shridhar T Doddamani.Project-based Learning Experience on Data Structures Course[J].Journal of Engineering Education Transformations,2011(17):565-566.

猜你喜欢
数据结构程序设计项目
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
数据结构线上线下混合教学模式探讨
重典型应用,明结构关系
房地产开发项目精细化管理研究
加强公路工程成本管理的措施分析
数据结构与算法课程设计教学模式的探讨
高效学习数据结构