张景祥 王永燕 潘玉奇
文章编号:1672-5913(2015)03-0080-04
中图分类号:G642
摘要:以数据结构这门基础课为例,通过“五个重新”,再造数据结构的课程细胞,提出比较教学、螺旋教学、逆向教学、反刍教学、共时教学等教学范式,解决教学的两难困境。
关键词:教学研究:数据结构;本征教学;共时教学法
0 引 言
课程之于教育,犹如细胞之于生命。生命既需要营养,也在于运动。理论正如营养,实用恰似运动。理论不足,则弱不禁风,缺乏底气;实践过少,则臃肿无力,懒于行动。受计算机界知识更新太快,以及高校教学课时较少的限制,许多高校在重理论还是重实用上,普遍存在着两难选择。
数据结构属于计算机专业的基础课,理论性较强,体系完善、经典,教材教法比较成熟。这样的课程给学生的印象往往与实际应用相去甚远。若固守在象牙塔里,既有辱专业应有的使命,也丧失了理论的生命活力;但要想在大学低年级开展基础理论的应用,却也困难重重。对数据结构这门专业基础课的课程教学进行再造,增加教育细胞的活力,可有效地解决这一两难问题。
1 析构个体差异
生命所以精彩,在于它的多样性。教育要想充满生命力,首要的是认识个体差异、尊重个体差异、强化个体差异,而不是抹杀个性,把人才当作流水线上的产品,力求统一、达标、规范。我们不反对建立标准,只是不应建立唯一的人才标准,标准应该是多样化的,所谓“不拘一格降人才”。对受教育者个体差异的认识和多方位人才培养的思路,使课程再造从宏观和基础上具备了实施的可能性。
1.1 大学科招生与小方向培养
计算机专业的新生入学接受统一的基本素质培养,在这期间开设专业导论,并为每一位学生配备专业导师,指导其个性发展,寻求适合自己的发展道路。在大一将结束时,由学生结合自身条件与意愿,人性化选择计算机科学、卓越工程师、信息技术等方向。
1.2 基础研究与就业技能
从专业设置和教学大纲编写上,保证数据结构课程在开设时,有差异化地进行教学侧重。计算机科学可以更偏重数据结构中的理论问题探讨,卓越工程师则加大代码实现的力度与维度,信息技术则少而精地学习一些数据结构的基本内容,软件外包方向则按照企业需求实施诸如双语教学在内的培养方案。
这赋予了教师在讲授数据结构这门课程时更多的灵活性和针对性,教师不再为偏基础理论还是偏实践应用而左右为难。面对热爱追求科学理论基础的同学,有时候教师也不得不与学生一起思考一些理论性较强的问题,例如ACM等竞赛问题;而面对那些卓越的编程热学子,教师也乐得与他们一起动手完成一项项有实用价值的项目,如学校的一些教学管理系统和企业提供的手机小APP等。
2 再造课程细胞
再造课程细胞,就是让学生在课业上能够“形核与生长”,既获得生长动力,又有空间生长。动力来源于营养的汲取,教学要保证学生能迈出第一步,实例教学就是源动力,是形核;同时为学生提供练习的平台,并在已经形成的初始案例上继续扩展与生长。这要求教师对课堂教学做一番理论的新认识和细节上的重设计。
2.1 重新认识理论的本征
中国学生自小学始,已习惯于统一而经典的课本,虽有其教育学上的优势,却失之于僵化了学生追求理论本征的能力。例如学生会普遍认为“两条平行线不会相交”这样的所谓正确答案,却忽略了欧式几何的前提,在投影几何和球面几何里,平行线相交是很正常的。对于自然数的描述,西方不乏采用数论和集合的思想来描述的案例。变“唯教材是尊”为“追求科学真理”,不再拘泥于形式上的“经典”,更看重基本原理的内在科学思想与方法,这样才能变寻找标准答案式的教育为科学与创新的教育。正因为我们义务教育阶段的缺失,才更加需要大学阶段的教育提倡多维思考。
认识“工程真理”的本征,对于计算机科学与工程专业的学生来说尤其重要科学真理与工程真理的结合,是计算机这门学科的重要特点之一。譬如,圆周率众所周知是一个无理数,或曰无限不循环小数,但在计算机里它至多也就用精度很高的双精度小数表示,常常也就取“3.14”即可。工程其实就是在特定应用条件下,对绝对真理实施近似的一种妥协。基于这种认识,理论与应用的对立便毫无意义,唯有它们之间的结合与相互接近,才是符合实际的道路。
在这一过程中,矫正单一教材,而列举更多参考教材的做法,以及指导学生多收看一些国际知名大学的开放课程,采取这种“比较教学法”,是解决追求科学本征动力不强、创新力不足的重要举措。
2.2 重新定位课堂教学的地位
课堂教学在国内高校教育中依然占据着过大的比重。相应地,课堂教学形式上则多半是沿袭着推导式的细讲慢授。其实课堂教学,只是教学中三个同等重要过程“学、教、做”中的一个环节,时间上是课前、课中和课后,并不应是课堂教学独大的状况。
课前自学是以学生为主体,是对教学材料第一印象的“占有”,初识滋味。课堂讲授是以教师为主导,是对教学材料的“凝练和升华”,充满启智和牵引。课后应用则以团队为整体,是知识在应用中的一种“结晶”,赠予参与者以成就感。时间上是从课前到课中到课后,知识上是从直观感觉到客观理论到动态应用能力,可谓之“螺旋教学法”。
2.3 重新评价伪代码的教学意义
过去的数据结构教学,往往是伪代码教学,优点是学生注意力容易集中在对算法的理解上,便于教师课堂上对数据结构的理论教授。通过与学生交流,我们发现,低年级学生在掌握有实践要求的理论课时,普遍存在动手能力不足的问题。学生反映,理论基本上可以理解,但具体到做作业的时候,就不知道如何下手了。近年来,伪代码被普遍摒弃,究其原因是,初学者很难完成从伪代码到实际高级语言的转换。正像有学者认为,“数据结构太难学,实际上是指动手编写程序难”,目前数据结构教材中,通行做法是采用实代码示例。这虽然解决了上述困难,也有利于学生在掌握代码的同时,了解面向对象程序设计中的一些语言常规做法。但这却带来了另一个问题,就是面对长篇累牍的代码,学生感到跟不上。特别是随着多媒体教学的普及,课堂上学生看到的往往是代码的快速刷屏。
基于教学中的细致观察,我们既没有追随众潮,彻底否定伪代码教学,也没有退回到单纯的伪代码教学。我们在充分分析了伪代码与实代码教学各自的优缺点后,提出了与过去由伪代码到实代码教学过程相反的一种新型的教学法,即“逆向教学法”。
2.4 重新规划课程教学的形式
随着课程重新定位,课程的教学形式也会发生相应变化。除课前主要由学生自主完成预习先修外,有教师参与的课程教学必然会被切割成两大部分:教师主讲的课堂教学和教师(一般由助教实施)指导下的课后练习。随着学校教学条件的大幅改善,课后应用实践活动已纳入了规范化的课程教学形式,形成了“一课两上”的教学形式:即主讲教师针对理论算法的授课,以及多位教师针对代码实现的上机指导。特别是第二个阶段中形成了所谓的“反刍教学法”,学生通过调试实代码程序,更好地理解前面接触到的算法本质,经过再加工抽象成伪代码,以课件的形式完成书面作业,并做授课式陈述报告。
2.5 重新整合教学资源的配置
为了更好地打破基础与应用的两难困境,我们提出了“共时教学法”。共时理论(synchronicitytheory)最初由瑞士心理学家荣格(Carl Gustav Jung)提出,后被广义地指征不同时期同一事物的再现。我们提出的共时教学法,是指基础理论与应用实践在不同课程教学中的共现。具体做法是,从教师承担的课程上,要求承担基础课的教师必须承担至少一门应用类的课程。从教师本源上,消除两者的对立,提高互溶性,让教师在上基础课时有应用实例可举,在上应用技术课时能熟练地对基础理论进行重回顾,再认识。
3 实例分析
3.1 比较教学法
以数据结构中的Huffman编码为例,二叉树左右结点分别标以“0”和“1”是国内教材的唯一做法,但从Huffman编码科学本征上说,其实你任意规定一下0和1的位置,只要编码和解码一致就可以,不必非要和教材上完全一样。
再如国内教材大多只谈“八皇后问题”,学生的思维也囿于同一模式,而国外教材却常常提“N皇后问题”,让学生的思想飞起来。
在数据结构课程中,我们具体实施的比较教学法的典型实例是:同效多码实例教学,即在介绍同一个数据结构ADT算法时,将不同的编程实现语言进行比较,相应地则涉及C++、C#和Java等多种数据结构教材。当然由于课时所限,一般以较简单的线性表为实例进行解析。
3.2 螺旋教学法
以单一线性表ADT(抽象数据类型)为例,要求学生事先浏览线性表概念、基本实现方法,以及链表的主要类型,通过主讲教师以面向对象的概念对这些进行本征分析,先从应用层面上理解这些对象的性能,然后再在计算机专业层面上去理解程序设计实现的方法,形成一类ADT的螺旋教学。
而以整个数据结构课程介绍的ADTs为例,则由每个具体的ADT之间的共性去理解,所有不同的ADT其最后实现,无外乎顺序结构和链式结构两种,来理解数据结构这门课的本征,形成一门基础课整体的螺旋教学。
3.3 逆向教学法
具体做法是:先讲解理论,不涉及代码,然后给出计算机可以运行的高级语言代码,让学生提炼出最关键的算法,用伪代码的方式表示出来。这样既克服了实代码过于细节化,枝叶与主干不清,又解决了学生畏于上机调试,动手能力不足的问题。
3.4 反刍教学法
与传统数据结构课程强调学生自主实现执行代码上不同,我们更加重视学生对于所学知识的第二次消化吸收上。随着网络技术的普及,数据结构作为一门专业基础课,其实现代码几乎成厂随处可下载的内容。与其杜绝学生抄袭网上代码,倒不如引导学生从下载到的代码更深入地理解。要求学生对搜集到的程序代码进行抽象,完成演示文稿,并划分为多个讨论组,让绝大多数学生有机会做主题报告。
3.5 共时教学法
济南大学信息科学与工程学院软件外包专业根据合作办学企业的需求,将就业力‘向分为“.Net方向”和“Java方向”。在教材选择上,为更好地实施共时教学法,尽量保证基础课与应用技术课程有一定的连贯性。数据结构课程也分为.Net方向教材和Java方向教材[6-7],后续应用技术课程(如:Web程序设计、而向对象程序设计)中也采用相同的描述语占,并尽力安排同一位教师先后主讲数据结构和Web程序设计,或者安排课题方向组的教师跨年级听课与辅导,努力保证基础理论与实用技术之间的教学资源重叠和相互支撑。
4 结语
大学教育虽然独立于职业培训,强调对于“人”的教育,但越来越多的国家,特别是我国,更强调对服务社会技能的培养。在工程类学科的大学教育中,追求绝对自由的科学探索、纯学术的研究是不切合实际的。理论联系实际正足指导专业基础课走出理论与实用两难困境的指导思想,而相应进行的课程再造是实现这一结合的有效途径。我们从实践中归纳的5种教学方法证明是有效的、易于操作的。