1研究背景
在新一轮科技浪潮和工业革命的背景下,作为推动技术发展的后备力量,大学工科教育面临着机遇和挑战。自年教育部提出推进新工科建设以来,各高校积极落实、尝试对大学的工科教育模式进行改革。同时,在课程改革方面,教育部发布了“双万”计划,即建设国家级和省部级一流精品课程各一万门。对课程的建设也提出了“两性一度”的金课标准,即高阶性、创新性和挑战度。所有这些举措,都旨在提高高校课程的建设标准[1-2]。
计算机科学是新一轮科技浪潮的主力*,是工科教育的重要部分,因此都很重视计算机学科的建设和发展。国内外几乎所有大学将数据结构课程作为计算机相关学科专业的基础核心课程,在学科知识体系中占据重要位置。然而,目前数据结构课程大致存在如下问题。
(1)本科生没有很好地理解数据结构,在解决复杂问题时不能灵活运用学到的知识。主要原因可能在于课程通常以讲授知识点为主,缺乏对解决问题的思维方式的培养,理论学习和动手实践存在脱节。
(2)课程内容陈旧,没有结合时代前沿,教学内容略显枯燥,难以激发学生兴趣。由于数据结构本身是专业性和理论性较强的课程,加之填鸭式的教学方式,导致学生常常不能及时理解知识点,跟不上教师的思路。
年4月,教育部在天津召开的“落实全教会奋进迎华诞”1+1系列发布会上,教育部高等教育司司长吴岩提到:年—年的3年间,教育部将全面实施“六卓越一拔尖”计划2.0[3]。该计划旨在全面推进新工科、新医科、新农科等学科的建设,加强高校对服务社会经济人才的培养能力。在这样的大背景下,数据结构课程作为信息类专业的核心基础课程理应响应号召开展建设和改革。
2研究对象的选取
数据结构是信息类专业的核心基础课,几乎所有国内外知名高校开设了这门课程,具体的课程设计与教学都凝聚了各高校信息学部的心血,也反映了他们的课程特色,参考这些课程设置对课程设计与改革具有指导意义。为此,笔者深入调研了国内外计算机学科排名靠前的10所高校的数据结构课程设置情况。调研的高校见表1,国外涵盖了欧美计算机学科排名靠前的顶尖高校,国内则涵盖了教育部评出的计算机学科名列前茅的名校[4]。
具体调研内容见表2,总体包含课程设置和教材及讲授内容两个维度,课程设置则包含学分学时、授课形式、授课年级、前序课程、考核方式、平时作业等方面,教材及讲授内容则包括教材类型、涵盖内容以及难度等方面。需要说明的是,有些高校的部分指标实在难以查到,因此存在部分空缺。
3课程设置
数据结构的课程时间安排一直是一个很难平衡的问题。数据结构作为计算机科学的核心课程,需要一定的前序知识:如果安排过早,由于学生知识储备不够,可能导致学生无法理解知识点,授课效果不理想;如果安排的过晚,则可能影响到随后操作系统、编译技术等核心课程的学习。在所调研的高校中,国外高校大都安排在了大二学年(学期安排如图1所示),其中,爱丁堡大学设置在第三学年,调研发现他们的主要内容就是算法,而且是诸如动态规划、几何算法等专业算法,对于数据结构的知识也是高级数据结构知识点。国内高校也大都将数据结构课程安排在了大二学年(仅西北工业大学和北京航空航天大学安排在大一年级下学期),同时,一半的高校选择将课程开设在大二学年的下学期,考虑到学生的专业知识储备问题。北京航空航天大学因为大类招生,该课程设置为信息大类学生的必修课,大类学生在第一学年结束后,会根据自己的专业兴趣等进行专业选择分流到信息大类的不同学院中,因此,该课程安排在了大一下学期。
对于前序课程的要求,各大高校虽然可能略有差异,但是对于计算机导论、编程语言等课程,几乎所有高校都要求先修。除此之外,部分高校还要求特定数学课程和计算机系统知识的学习。越是开设学期较晚,且涉及高级数据结构和高级算法的学校,对前序课程要求越多,也越专业。
在课程学分学时方面,由于数据结构通常属于核心基础课,各高校根据教学内容的多少和难度的大小合理设置,所以各所高校都存在差异。笔者所调研的高校给数据结构课程全部采用学分制,并且学分学时较高,大部分高校将学分设置为3~4学分,也有部分高校设置为3学分;学时则安排为48~64不等[5]。
在授课形式上,国外高校无一例外都是理论授课和实践相结合的方式,既注重基础知识的讲解和传授,也注重学生利用知识进行实践的能力;国内高校少部分采取显式的理论实践学时划分,大部分高校以理论授课为主,并辅有课程编程作业等实践内容。
4教材及讲授内容
笔者对所选择的20所高校的教材进行了充分调研,表3列举了国外高校教材的相关情况。总体而言,国内外在教材及讲授内容方面有如下特点。
(1)教材类别。国外高校大都选用自编教材;国内高校除清北少数几所高校使用自编教材外,其余高校基本使用清华版教材,教材自主编写率相较国外高校较低。事实上,使用自编教材方便教师自主编排学习内容,更易体现教师自身对课程的全盘理解与把握,教师也更能把握好授课节奏,这一点是值得国内高校学习的。
(2)教材涵盖知识点。教材涵盖的内容与难度也因教材而异:国外高校的教材涵盖内容差异性较大,并且侧重点不一;国内高校教材涵盖内容大致一致,以严版教材为例,包含了绪论、线性表、栈和队列、串、数组与广义表、树和二叉树、图、动态存储管理、查找、内部排序、外部排序、文件。
(3)教材难度。国外教材普遍偏难,国外高校教材的内容与编排差异性较大,除基本的数据结构及算法知识外,各高校自主加入了一些拓展知识,这些拓展知识的侧重点也不一。国内教材的难度全部属于中高难度,从侧面证明比较重视该课程[6]。
表4是20所高校选用教材涵盖的知识点(部分进行了归并),可以看见知识的出现频率两极分化十分严重,数据结构的基本内容所组成的知识点基本做到了所有高校全覆盖,其他的拓展知识点则和高校密切关联,频数不超过3(3所国外高校选用了相同的教材),这也说明不同的讲师对相关知识点的重要性有主观的认识,国内高校可学习国外高校根据课程推进需求自主的加入拓展性知识。用图2展示各个知识点的讲授情况。
5课程考评
笔者对所选择的20所高校的课程作业和考评设置进行了调研(表5列出了国外高校的具体情况,由于篇幅限制,国内的详细信息省略)。从作业布置的角度来比较,几乎所有国外高校都包含编程作业,还有部分高校要求纸质作业的提交,纸质作业的形式一般是问答题与算法描述题。从考核的角度来看,考核的基本指标包含出勤、作业、小测、考试,各个高校的设置权重都不一致。就国内而言,作业与考评方式与国外情况较为相似,即与学校相关,各高校体现较大自主性;就考核难度而言,国外高校普遍难度较高,而国内高校难度差异较大。
6结语
数据结构课程是一门具有很强实践性的计算机专业基础课,在很多专业课中都发挥着重要的作用,同时它也需要一定的先修课程的支持。因此,总结调研的知名高校的实际情况,对于研究型大学而言,开展数据结构课程有如下建议。
(1)课程开设时间。课程开设时间不宜过早也不宜过晚,过早将由于基础知识储备不足而影响教与学的效果,过晚则可能影响后续专业课程的学习。建议安排在大二学期为宜。
(2)课程授课内容。各高校科研根据自身学生的基础和相关条件,在教学基本数据结构知识的基础上,有选择地开展一些高级知识的介绍,侧重于对数据的逻辑结构和存储结构的深刻理解。对于高级一些的算法,建议后续单独作为算法课程开设,不用浅尝辄止的放入数据结构课程中。
(3)课程授课形式。数据结构课程的实践性很强,需要大量的练习方能真正掌握相关知识。因此,在注重基本知识理论讲解的同时,应该辅以实践练习。同时,在讲解过程中,建议以问题驱动的形式,从学生身边的实际问题入手,先介绍问题,再介绍实现该问题的逻辑方法,并在逻辑方法中引出相应的数据结构知识点进行讲解。讲解完相关知识点以后,再回到最初的问题,给出基于所学习的数据结构知识如何具体解决相关问题。通过这样的训练,学生能够逐步建立起计算思维,并逐步学会在碰到问题时如何用数据结构来解决[7]。在教学过程中,可以设置一些必要的讨论环节,增加学生的主观能动性和创造性思维。笔者曾经在教学过程中提前布置了一两个实际问题,提前让学生来自愿选择,并在适当的时候由学生来讲解。结果发现,有些学生不但能用基本的数据结构知识来解决,甚至还能发现很多非常巧妙的解决问题的方法,效果非常好。
(4)课程考核。课程教学不局限于理论教学,课程的考核也不能设置为课堂考试的简单方式。需要结合课程教学过程中的实践环节,将实践(编程作业、课程总结、课程设计等)纳入到考核范畴,从而让学生一开始就要认真对待课程,紧跟课程教学与实践节奏,而不是期末突击。
(5)拓宽思路。在教学过程中适当加入一些业界新的思路和被广泛应用的相关库的实现思路。数据结构是计算机科学的基础,历史悠久,理论知识比较完善,但依然会有新的思路涌现,可以在相关章节的理论授课中讲授一些新的方法及其特点供学生思考。同时,在实际应用和开发中,可能很多数据结构相关的代码都是通过直接调用已经存在函数库来实现,不用去亲手实现它。事实上,手动实现的代码,无论是代码质量和代码速度,显然都极难超过经过千锤百炼的、在无数项目中经过充分测试的库实现,所以,应该讲授一些优秀的相关库的实现思路和调用方法。
参考文献
[1]中华人民共和国教育部.将实施一流专业建设“双万计划”[EB/OL].[-04-02].