论文部分内容阅读
摘要:在对“数据结构”课程实验教学环节的探索与实践中,在课程内容体系安排上增加了“数据结构”应用实例讲解部分,以提高学生的学习兴趣;加大了实验部分的内容和考核力度,提升实践环节的比重;通过结对编程、代码重构等方式,提升学生的编程能力;通过统计、及时反馈学生实践环节的各项信息,督促学生进一步提高编程积极性。针对实践环节的各项措施提高了学生的实际动手能力、创造和分析能力,实践证明取得了较好的效果。
关键词:数据结构;实验教学;教学改革
作者简介:刘志鹏(1980-),男,江苏南京人,南京邮电大学计算机学院,讲师;段卫华(1977-),男,江苏南京人,南京邮电大学计算机学院,讲师。(江苏 南京 210003)
基金项目:本文系南京邮电大学计算机学院教学改革项目(项目编号:12)的研究成果。
中文图书分类号:G642.0 文献标识码:A 文章编号:1007-0079(2013)01-0132-02
“数据结构”课程是计算机科学与信息管理等专业的核心课程之一,它在计算机领域的重要性仅次于编程基础。[1]我国制定的CCC2002体系强调了“数据结构”在计算学科及电子信息学科中的作用与地位。该课程一般以“计算机高级程序设计语言”为先修课程,也是“操作系统”、“数据库”、“编译原理”等专业课程的基础。“数据结构”课程涉及的知识点较多、实践性很强,除了要求学生有严密的逻辑思维外,还需要拥有较好的编程实践基础。目前,大多数高校“数据结构”课程的教学工作均在一学期内完成。学生学习任务较重,往往在学习过程中出现“重理论、轻实践”的现象。许多学生在设计和实现算法方面表现不佳。为了在有限的学时中得到更好的教学效果,使学生在算法设计和实现两个方面的能力都有所提高,笔者从“数据结构”课程实验教学环节入手,尝试了一系列的探索和研究。
一、实践教学目前存在的问题
“数据结构”是一门实践性很强的课程。实践有助于学生更好地理解和应用所学习的理论知识,实践环节是无法替代的,直接影响学生的学习效果。然而,目前的“数据结构”实验教学环节普遍存在如下的一些问题:
1.学生对实践环节重视不够
目前,学生对“数据结构”课程实践环节普遍不够重视。主要原因如下:
第一,主流开发语言和集成开发环境,如C++、Java等,均提供了现成的数据结构程序库。程序员可直接调用程序库中的函数而无需重头编写底层数据结构。部分学生认为,只要掌握程序库的使用方法,便无需实践数据结构的底层实现。然而,无论是C++的STL和Boost程序库,还是Java语言的集合类,均无法满足某些程序苛刻的性能要求。因此对学生而言,仅仅掌握某种特定编程语言的程序库是不够的。
第二,由于“数据结构”课程以笔试作为衡量学生学习成果的主要方式,加上实践环节考查指标并不明确,造成很多同学不重视实践环节,导致实践环节效果不理想。
第三,学生对“数据结构”在操作系统、数据库、编译器中的实际应用知之甚少,部分同学虽然知道“数据结构”课程十分重要,但并不知道数据结构在各个领域的广泛应用。
2.学生程序设计能力薄弱
学生程序设计能力薄弱,是部分高校长期普遍存在的现象。究其原因,主要包括以下两个方面:
首先,部分学生程序设计基础较薄弱。对于C++的某些基本语法并不熟悉,也不了解使用封装、继承和多态型在编写大规模代码过程中带来的好处。大量的对语法知识的要求导致学生难以阅读和编写程序,造成学生思想上的困惑。
其次,对程序设计能力薄弱、基础较差的学生而言,某些优秀教材[2,3]并不适合。学生阅读这些教材时,虽然能够理解算法的含义,但是却无法将伪代码转换成对应编程语言的程序代码。这一方面导致学生无法动手实践,另一方面也进一步削弱了学生的编程能力。
3.实践过程中无法得到及时的反馈
许多学生在“数据结构”实践课中采用先编写、后调试的方法,这种编写代码的方式对代码量较少、代码逻辑较简单的程序是有效的。但对于代码量较多、代码逻辑复杂的“数据结构”程序则不可取。由于拼写和逻辑错误,导致最终程序错误较多,难以调试。由于在代码编写过程中无法得到及时的反馈,导致学生丧失了进一步学习的兴趣。
此外,编写代码、正确执行后,许多同学不及时总结经验教训,反复犯相同错误。对待实验报告撰写工作态度不端正。教师没有及时将实验报告成绩和其中存在的问题及时反馈给学生,部分学生不了解实验报告和实验的评分细则,对实践环节最终成绩不满,也反过来削弱了学生学习该门课程的兴趣。
二、实践环节的教学改革
针对教学中存在的以上情况,笔者主要从以下几个方面进行实践环节的探索和改革:
1.引导学生重视实践环节
第一,加重实践环节占用总评成绩的比例,从原先的10%-15%增加到20%。改变传统模式下主要依靠平时作业、课堂表现和期末考试成绩的评价模式。增强实践环节比重,旨在督促学生参与实践、编写程序和撰写报告。
第二,在课堂教学中,提纲挈领地讲解C++、Java语言程序库的不足之处,使学生明确具备编写数据结构代码能力的重要性。
第三,针对多种数据结构,讲解其在操作系统、[4]数据库[5]和编译器中的实际应用。开源软件为“数据结构”教学提供了大量的实际案例。通过介绍数据结构的实际应用,提升学生的学习兴趣,提高学生对实践环节的重视程度和兴趣。
最后,尽早明确实验任务和目标。让学生在教学过程和实践环节中明确认识到,只有按部就班,才可以完成实验任务。在实践环节中,不能随着学生的完成情况无限制地增加题目的要求和难度,而应做到因材施教,因人而异。
2.提升学生程序设计能力 教材是学生入门和提高的主要材料。笔者选用人民邮电出版社陈慧南编著的《数据结构:使用C++语言描述(第2版)》作为“数据结构”课程的教材。该教材2007年入选普通高等教育“十一五”国家级规划教材,其中对每一种主要的数据结构均给出了C++代码实现。与传统经典教材[2,3]相比,省略了学生将伪代码转换为可执行代码的中间过程。学生在实现基本数据结构时可直接参考教材程序完成。该教材列出了“数据结构”中使用的C++知识点,并指导学生在课后自行开展有针对性的复习。通过边复习、边学习的方式,部分同学能够克服程序设计能力不足的缺陷,建立理解和实践“数据结构”课程的信心。
针对许多学生仅能理解C++代码片段,无法将这些代码片段合成完整的程序问题,笔者通过课堂教学和实践环节两个方面加以弥补。在课堂教学中,教师至少编写一个完整的数据结构实现。通过演示,使学生了解编写代码的具体动态流程和技巧。实践环节中,采用循序渐进的代码编写方式,即课堂上先给出对应算法完整程序的框架,并演示程序得到的最终结果,让学生去填写框架中的函数内容,接下来要求学生独立完成一些函数模块,具体操作方法与文献[6]中的第一项研究方法相同。实践表明,采用结对编程、独立完成实验报告的方式与独自完成实践环节的效果相比较,实践环节学生平均成绩高5~7分。
3.及时反馈实践结果
鼓励学生在编写代码前,首先编写测试用例。一方面有助于学生了解代码中的边界条件,考虑代码实现中的各种特殊情况。另一方面也有助于学生在编写代码的过程中及时获得反馈。避免传统编写代码方式所导致的程序无法正常运行的情况,增强学生的信心。
第二,指导学生编写代码的正确次序。例如,在编写单链表类时,先实现构造函数和析构函数,再实现插入函数和打印函数。这样便可先检测插入函数是否正常工作,在此基础上,再完成删除函数等其他功能函数。这种迭代开发、单元测试,将错误局部化的思想对于培养学生正确的程序设计观念十分重要。指导学生重视代码重构的工作并鼓励学生重构代码,通过介绍编码规范,强调良好代码风格的重要性。
第三,指导学生调试程序。针对Visual C++ 6.0集成开发环境和gcc编译器,总结学生在编码时常犯的各种编程错误,并给出相应的代码调试方法。通过不断完善文档、分发并反馈,从而减轻教师的工作量,培养学生的参与精神和不断总结的能力。
最后除课后答疑外,笔者还及时通过电子邮件反馈疑难解答和平时成绩。教师将有代表性的提问进行总结和群发邮件,使学生能及时掌握自己的最新成绩,并允许学生质疑分数的公平性和公正性,制定较详细的实践环节评分标准,明确实验报告的结构,要求学生重视需求分析、概要设计,并要如实撰写总结和体会部分。许多同学的总结都停留在表面,并没有总结实际学到的编程知识和调试方法。
以下是在“数据结构”课程实践环节中的的评分标准:
能独立查阅文献资料,较好地理解课题任务并提出实施方案;内容详实准确、文字流畅,符合规定内容及字数要求;论证、分析、设计、计算、结构、建模、实验正确合理;用语符合技术规范,图表、公式清楚;努力学习,遵守纪律,作风严谨务实,按期完成规定的任务。
三、实践环节教学效果
1.课堂和实验课教学效果
通过课堂讲授和实践性环节锻炼,学生能端正学习态度,树立编写代码的信心和决心。通过制定合理的编程任务,每个学生都能动手编写程序。通过动手实践,加深了对数据结构相关知识点的理解。采用结对编程、测试优先和代码重构,学生认识到编写能够运行的代码和优秀代码的差异。有些同学能够进一步完成更高难度的编程任务,并参加国家级的比赛,如挑战杯等。
2.实践环节效果反馈
本次共有97名学生学习“数据结构”课程,每个学生需要完成4份实验报告。统计结果表明,上交报告的积极性、分析设计的规范性和总结体会,与去年相比,均有很大程度的提高。拖延上交实验报告的情况从去年的11.0%降低到3.1%,实验报告的内容更加规范,总结体会内容大多集中在编程过程中遇到的问题及解决方案上。通过填充和扩充代码两种编程方法,绝大多数学生完成了数据结构实践环节的基本任务,如单链表的实现等。51.5%的同学能够完成更加复杂的程序设计任务,如双向链表等。
“数据结构”课程是计算机专业的专业基础课程,应用范围非常广泛。本文分析了数据结构实践教学中目前存在的一些问题,积极探索和尝试新的教学方式,在一定程度上调动了学生的积极性,为学生的软件开发打下了良好的基础。但对于课程体系的建设及教学方法的改进等问题,仍然需要开展进一步的研究。
参考文献:
[1]Mehran Sahami.Expanding the Frontiers of Computer Science Education[EB/OL].http://wccce11.unbc.ca/wccce11-sahami.pdf.
[2]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2011.
[3]科曼,等.算法导论[M].潘金贵,等译.北京:机械工业出版社,
2006.
[4]毛德操,胡希明.Linux内核源代码情景分析[M].杭州:浙江大学出版社,2001.
[5]加西亚·莫利纳,等.数据库系统实现[M].北京:机械工业出版社,2010.
[6]Charlie McDowell,Brian Hanks,Linda Werner.Experimenting with pair programming in the classroom[J].ACM SIGCSE Bulletin,2003,35(3):
60-64.
(责任编辑:李杰)
关键词:数据结构;实验教学;教学改革
作者简介:刘志鹏(1980-),男,江苏南京人,南京邮电大学计算机学院,讲师;段卫华(1977-),男,江苏南京人,南京邮电大学计算机学院,讲师。(江苏 南京 210003)
基金项目:本文系南京邮电大学计算机学院教学改革项目(项目编号:12)的研究成果。
中文图书分类号:G642.0 文献标识码:A 文章编号:1007-0079(2013)01-0132-02
“数据结构”课程是计算机科学与信息管理等专业的核心课程之一,它在计算机领域的重要性仅次于编程基础。[1]我国制定的CCC2002体系强调了“数据结构”在计算学科及电子信息学科中的作用与地位。该课程一般以“计算机高级程序设计语言”为先修课程,也是“操作系统”、“数据库”、“编译原理”等专业课程的基础。“数据结构”课程涉及的知识点较多、实践性很强,除了要求学生有严密的逻辑思维外,还需要拥有较好的编程实践基础。目前,大多数高校“数据结构”课程的教学工作均在一学期内完成。学生学习任务较重,往往在学习过程中出现“重理论、轻实践”的现象。许多学生在设计和实现算法方面表现不佳。为了在有限的学时中得到更好的教学效果,使学生在算法设计和实现两个方面的能力都有所提高,笔者从“数据结构”课程实验教学环节入手,尝试了一系列的探索和研究。
一、实践教学目前存在的问题
“数据结构”是一门实践性很强的课程。实践有助于学生更好地理解和应用所学习的理论知识,实践环节是无法替代的,直接影响学生的学习效果。然而,目前的“数据结构”实验教学环节普遍存在如下的一些问题:
1.学生对实践环节重视不够
目前,学生对“数据结构”课程实践环节普遍不够重视。主要原因如下:
第一,主流开发语言和集成开发环境,如C++、Java等,均提供了现成的数据结构程序库。程序员可直接调用程序库中的函数而无需重头编写底层数据结构。部分学生认为,只要掌握程序库的使用方法,便无需实践数据结构的底层实现。然而,无论是C++的STL和Boost程序库,还是Java语言的集合类,均无法满足某些程序苛刻的性能要求。因此对学生而言,仅仅掌握某种特定编程语言的程序库是不够的。
第二,由于“数据结构”课程以笔试作为衡量学生学习成果的主要方式,加上实践环节考查指标并不明确,造成很多同学不重视实践环节,导致实践环节效果不理想。
第三,学生对“数据结构”在操作系统、数据库、编译器中的实际应用知之甚少,部分同学虽然知道“数据结构”课程十分重要,但并不知道数据结构在各个领域的广泛应用。
2.学生程序设计能力薄弱
学生程序设计能力薄弱,是部分高校长期普遍存在的现象。究其原因,主要包括以下两个方面:
首先,部分学生程序设计基础较薄弱。对于C++的某些基本语法并不熟悉,也不了解使用封装、继承和多态型在编写大规模代码过程中带来的好处。大量的对语法知识的要求导致学生难以阅读和编写程序,造成学生思想上的困惑。
其次,对程序设计能力薄弱、基础较差的学生而言,某些优秀教材[2,3]并不适合。学生阅读这些教材时,虽然能够理解算法的含义,但是却无法将伪代码转换成对应编程语言的程序代码。这一方面导致学生无法动手实践,另一方面也进一步削弱了学生的编程能力。
3.实践过程中无法得到及时的反馈
许多学生在“数据结构”实践课中采用先编写、后调试的方法,这种编写代码的方式对代码量较少、代码逻辑较简单的程序是有效的。但对于代码量较多、代码逻辑复杂的“数据结构”程序则不可取。由于拼写和逻辑错误,导致最终程序错误较多,难以调试。由于在代码编写过程中无法得到及时的反馈,导致学生丧失了进一步学习的兴趣。
此外,编写代码、正确执行后,许多同学不及时总结经验教训,反复犯相同错误。对待实验报告撰写工作态度不端正。教师没有及时将实验报告成绩和其中存在的问题及时反馈给学生,部分学生不了解实验报告和实验的评分细则,对实践环节最终成绩不满,也反过来削弱了学生学习该门课程的兴趣。
二、实践环节的教学改革
针对教学中存在的以上情况,笔者主要从以下几个方面进行实践环节的探索和改革:
1.引导学生重视实践环节
第一,加重实践环节占用总评成绩的比例,从原先的10%-15%增加到20%。改变传统模式下主要依靠平时作业、课堂表现和期末考试成绩的评价模式。增强实践环节比重,旨在督促学生参与实践、编写程序和撰写报告。
第二,在课堂教学中,提纲挈领地讲解C++、Java语言程序库的不足之处,使学生明确具备编写数据结构代码能力的重要性。
第三,针对多种数据结构,讲解其在操作系统、[4]数据库[5]和编译器中的实际应用。开源软件为“数据结构”教学提供了大量的实际案例。通过介绍数据结构的实际应用,提升学生的学习兴趣,提高学生对实践环节的重视程度和兴趣。
最后,尽早明确实验任务和目标。让学生在教学过程和实践环节中明确认识到,只有按部就班,才可以完成实验任务。在实践环节中,不能随着学生的完成情况无限制地增加题目的要求和难度,而应做到因材施教,因人而异。
2.提升学生程序设计能力 教材是学生入门和提高的主要材料。笔者选用人民邮电出版社陈慧南编著的《数据结构:使用C++语言描述(第2版)》作为“数据结构”课程的教材。该教材2007年入选普通高等教育“十一五”国家级规划教材,其中对每一种主要的数据结构均给出了C++代码实现。与传统经典教材[2,3]相比,省略了学生将伪代码转换为可执行代码的中间过程。学生在实现基本数据结构时可直接参考教材程序完成。该教材列出了“数据结构”中使用的C++知识点,并指导学生在课后自行开展有针对性的复习。通过边复习、边学习的方式,部分同学能够克服程序设计能力不足的缺陷,建立理解和实践“数据结构”课程的信心。
针对许多学生仅能理解C++代码片段,无法将这些代码片段合成完整的程序问题,笔者通过课堂教学和实践环节两个方面加以弥补。在课堂教学中,教师至少编写一个完整的数据结构实现。通过演示,使学生了解编写代码的具体动态流程和技巧。实践环节中,采用循序渐进的代码编写方式,即课堂上先给出对应算法完整程序的框架,并演示程序得到的最终结果,让学生去填写框架中的函数内容,接下来要求学生独立完成一些函数模块,具体操作方法与文献[6]中的第一项研究方法相同。实践表明,采用结对编程、独立完成实验报告的方式与独自完成实践环节的效果相比较,实践环节学生平均成绩高5~7分。
3.及时反馈实践结果
鼓励学生在编写代码前,首先编写测试用例。一方面有助于学生了解代码中的边界条件,考虑代码实现中的各种特殊情况。另一方面也有助于学生在编写代码的过程中及时获得反馈。避免传统编写代码方式所导致的程序无法正常运行的情况,增强学生的信心。
第二,指导学生编写代码的正确次序。例如,在编写单链表类时,先实现构造函数和析构函数,再实现插入函数和打印函数。这样便可先检测插入函数是否正常工作,在此基础上,再完成删除函数等其他功能函数。这种迭代开发、单元测试,将错误局部化的思想对于培养学生正确的程序设计观念十分重要。指导学生重视代码重构的工作并鼓励学生重构代码,通过介绍编码规范,强调良好代码风格的重要性。
第三,指导学生调试程序。针对Visual C++ 6.0集成开发环境和gcc编译器,总结学生在编码时常犯的各种编程错误,并给出相应的代码调试方法。通过不断完善文档、分发并反馈,从而减轻教师的工作量,培养学生的参与精神和不断总结的能力。
最后除课后答疑外,笔者还及时通过电子邮件反馈疑难解答和平时成绩。教师将有代表性的提问进行总结和群发邮件,使学生能及时掌握自己的最新成绩,并允许学生质疑分数的公平性和公正性,制定较详细的实践环节评分标准,明确实验报告的结构,要求学生重视需求分析、概要设计,并要如实撰写总结和体会部分。许多同学的总结都停留在表面,并没有总结实际学到的编程知识和调试方法。
以下是在“数据结构”课程实践环节中的的评分标准:
能独立查阅文献资料,较好地理解课题任务并提出实施方案;内容详实准确、文字流畅,符合规定内容及字数要求;论证、分析、设计、计算、结构、建模、实验正确合理;用语符合技术规范,图表、公式清楚;努力学习,遵守纪律,作风严谨务实,按期完成规定的任务。
三、实践环节教学效果
1.课堂和实验课教学效果
通过课堂讲授和实践性环节锻炼,学生能端正学习态度,树立编写代码的信心和决心。通过制定合理的编程任务,每个学生都能动手编写程序。通过动手实践,加深了对数据结构相关知识点的理解。采用结对编程、测试优先和代码重构,学生认识到编写能够运行的代码和优秀代码的差异。有些同学能够进一步完成更高难度的编程任务,并参加国家级的比赛,如挑战杯等。
2.实践环节效果反馈
本次共有97名学生学习“数据结构”课程,每个学生需要完成4份实验报告。统计结果表明,上交报告的积极性、分析设计的规范性和总结体会,与去年相比,均有很大程度的提高。拖延上交实验报告的情况从去年的11.0%降低到3.1%,实验报告的内容更加规范,总结体会内容大多集中在编程过程中遇到的问题及解决方案上。通过填充和扩充代码两种编程方法,绝大多数学生完成了数据结构实践环节的基本任务,如单链表的实现等。51.5%的同学能够完成更加复杂的程序设计任务,如双向链表等。
“数据结构”课程是计算机专业的专业基础课程,应用范围非常广泛。本文分析了数据结构实践教学中目前存在的一些问题,积极探索和尝试新的教学方式,在一定程度上调动了学生的积极性,为学生的软件开发打下了良好的基础。但对于课程体系的建设及教学方法的改进等问题,仍然需要开展进一步的研究。
参考文献:
[1]Mehran Sahami.Expanding the Frontiers of Computer Science Education[EB/OL].http://wccce11.unbc.ca/wccce11-sahami.pdf.
[2]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2011.
[3]科曼,等.算法导论[M].潘金贵,等译.北京:机械工业出版社,
2006.
[4]毛德操,胡希明.Linux内核源代码情景分析[M].杭州:浙江大学出版社,2001.
[5]加西亚·莫利纳,等.数据库系统实现[M].北京:机械工业出版社,2010.
[6]Charlie McDowell,Brian Hanks,Linda Werner.Experimenting with pair programming in the classroom[J].ACM SIGCSE Bulletin,2003,35(3):
60-64.
(责任编辑:李杰)