苏 庆,林华智,黎展毅
(1.广东工业大学 计算机学院,广东 广州 510006;2.广东工业大学 材料与能源学院,广东 广州 510006)
离散数学[1]是计算机学科,尤其是软件设计开发类专业的重要专业基础课。该课程不仅能奠定学生在专业学习中的理论基础,还对后续各门课程的学习形成辐射和交叉,在软件类专业系列课程中具有举足轻重的地位。离散数学以高等数学、线性代数等为先修课,其主要内容包括关系论、数理逻辑、图论、抽象代数等[2],这些内容是后续主干专业课程,如数据结构、算法设计与分析、编译原理等的重要支撑。图1所示为离散数学专业基础课与计算机专业基础课程群[3]中各门后续软件类专业课程的关系。
新工科建设[4]形势对各软件专业类课程包括离散数学提出明确且清晰的要求和目标,既要令学生掌握主要的方法论理论基础,又要着重培养学生将各种方法论应用于解决实际问题的能力。因此,在离散数学专业基础课的教学过程中,不能过分强调讲解与学习公式定理本身的推导方法和技巧,也要注重学生掌握基础方法理论后的运用,包括从实际问题到数学模型建模的抽象过程以及求得问题解之后的编程实施。
图1 离散数学专业基础课与后续软件类专业课程的关系
离散数学课程的内容偏于抽象数学理论,在学习过程中,学生感觉较为枯燥和困难,教师则往往疲于讲解数学理论的推导和证明,忽视运用数学知识解决实际问题的能力培养。
计算机软件类专业的学生学习离散数学基础课是为了将其作为学习后续专业课的起点和工具,而非仅止于理论知识学习或研究。从目前的教学现状看,该课程与后续专业课程脱节,未起到基础支撑作用,学生在学习过程中甚至学完本门课程后不能“即学即用”“以用固学”,未能体会到离散数学理论知识的重要性。一方面,这些内容较为抽象,侧重于数学理论,而且在大三或者大四的各门相关后续专业课程中才会被陆续使用到;另一方面,目前对于专业教师的授课分工也相对固定,讲授离散数学专业基础课的教师可能没有承担过数据库、人工智能、计算机网络等专业课的教学任务,在授课过程中未能切合实际地将离散数学课程中的内容与后续专业课程中的相关知识点进行联动讲授以及应用。
在当前的教学实践中,离散数学专业基础课往往被视为“纯”数学课程,只安排理论讲授课时,基本不安排与实践应用相关的实验、课程设计等,造成理论学习与实践应用的脱节,学生理解数学基础理论困难,也正因对这些基础知识掌握得不牢固,不能熟练运用于实际问题的解决,极大地影响教学效果,更加不利于达到新工科形势下的以实践能力为导向的人才培养目标。
编程能力是衡量计算机软件类专业学生素质的重要指标之一,需要在大一和大二低年级阶段通过高强度持续训练来提高。在后续课程中,几乎所有的学习成果包括毕业设计都要以计算机软件的形式实现。目前,在大多数工科院校的教学计划中,离散数学专业基础课基本不安排上机编程训练环节,使得学生未能通过编程训练的方式巩固理论知识以及持续提高编程能力,因而在学习后续课程过程中,出现“眼高手低”“能设计大概的解决思路,实施起来却细节问题不断”的问题。
要改革当前形离散数学课程与后续专业课程教学完全分离的模式,对每个与后续课程有衔接的知识点的教学过程进行优化设计,教师就既要完整清晰地讲授当前知识点本身的内容,又要重点突出衔接后续相关课程的应用点,保持与后续课程的连贯性。
离散数学课程的四大部分内容本身就呈现离散、可以互不为前提地进行独立学习的特点,不存在最重要或者相对次要的内容,因而要特别要求学生对各部分必须均衡掌握,并给出清晰的学习路线。离散数学课程内容与计算机软件设计类主干专业课程部分重要知识点具有相当强的相关性,如离散数学课程中的关系论内容与数据库中的关系数据库理论和数据结构中的数据关系及表示相关;数理逻辑内容与数据库中的谓词优化技术、编译原理自动机理论和语法制导翻译以及人工智能中的消解原理、机器学习相关;图论内容与数据结构中的哈夫曼编码、操作系统中的进程调度机制、软件工程中的软件生命周期、计算机网络中的网络类型定义、算法分析与设计中的变治法以及贪婪技术相关;抽象代数内容与编译原理中的代码生成与优化技术和人工智能中的遗传算法以及模拟退火算法相关。
图2所示为离散数学课程中关系论内容与数据库课程中关系数据库内容之间的关联性举例。教师在讲授离散数学课程中“关系”的定义时,应当注意从关系的定义拓展至关系数据库的定义,它们共同的基础是卡氏积定义,互相衔接的内容是二元关系和多元关系,令学生立即体验到关系论是与后续课程数据库直接相关的,提高学生对该知识点的重要性把握以及学习兴趣。
图2 关系论与关系数据库的联系
另外,注意促进离散数学课程任课教师与后续专业主干课任课教师的互动交流,从后者的教学实践中获得反馈,针对专业课内容中学生由于基础不牢固导致学习困难的知识点,反推至相关基础知识点在基础课中的教学情况,改进教学。在条件具备的情况下,应当推动专业任课教师的岗位轮动,更好地让教师把握基础课与后续课程的联动关系,共同改善基础课和后续专业课的教学效果。
离散数学辅助学习平台[5]可以帮助学生更牢固地掌握离散数学理论知识,如广东工业大学计算机学院研发的编程实验可视化网络平台AnyviewC[6]。以AnyviewC为依托,学校课程组建立离散数学课程上机作业题库,包括基础课各大部分内容,题目内容均为重点概念、数学理论的编程实现。该题库一方面可以促进学生对离散数学理论知识的理解和运用;另一方面可以与C语言程序设计和数据结构前后衔接,持续锻炼学生的编程能力,为后续软件设计类专业课程打下牢固的基础。
在AnyviewC的教师端,教师可以实时查看所带班级的整体做题情况,也可以查看个别学生当前的做题情况,在必要时,可以对学生程序进行跟踪调试、评分以及给予评语评价。AnyviewC的学生端提供丰富的程序调试方式,包括单行运行(不进入函数)、单行运行(进入函数)、单步运行、运行测试等;提供函数运行过程中实行参数和局部变量的实时可视化图形表示,包括一般变量、指针型变量分别在栈和堆中的图形化直观表示,如图3所示。
图3 AnyviewC学生端的局部变量可视化表示
AnyviewC作业平台执行严格的题目测试标准,每次程序运行所使用的测试数据(用例)都是随机生成的,最大限度地杜绝学生使用硬编码试图通过题目测试的可能,而且对每一道题目,AnyviewC会严格比对学生程序的结果与系统程序运行的结果。只有学生程序对所有测试数据都得到与系统程序完全一致的输出,方可视为通过该题目的测试。
本离散数学上机编程题库一直处于边使用边完善的状态,具有以下特点。
(1)题库内容包括关系论、数理逻辑、图论和抽象代数四大部分,包括各个重要定义、理论和方法。该题库已经在广东工业大学校内计算机学院、信息工程学院、自动化学院、物理与光电学院、国际教育学院等工科学院以及部分地方工科院校等较大范围使用,师生反馈效果良好。
(2)优化设计各种难度的题目,丰富题目类型。将题库中的题目难度进行细分设计,引导学生由易到难、逐步掌握理论知识并用于实际问题求解。题目类型不仅包含函数级编程题,还会逐步增加程序填空题、改错题等类型。上述优化都将会遵循学习规律,增强学生的学习兴趣,有利于学生形成自主学习的良好习惯。
(3)保持严格的题目测试标准。所有题目的测试数据均在程序运行过程中实时随机生成,降低学生的作弊可能。另外,在题目的测试过程中,学生答案程序必须对所有测试数据输入都得到完全正确的输出,方可视为通过该题目,力图使学生养成严谨求学的习惯。
此外,AnyviewC编程实验可视化网络平台的可视化能力将会得到进一步的提升,如针对离散集合测试数据的特点,改进AnyviewC编程实验可视化网络平台对这类数据关系的实时可视化表达,将程序运行过程白盒化[7],进一步提高程序调试的效率。
在离散数学专业基础课每一部分内容的讲授后,安排与实践应用相结合的设计性实验,并且在整门课程的后半段视学生水平和课时数安排综合多部分联合应用的稍大规模实验。这些实验的目的是一方面对学生已学理论知识进行巩固,另一方面逐步提高学生将理论知识应用于解决较复杂问题的水平。
表1列出了离散数学课程的部分设计性实验安排,这些设计性实验难易度不一,鉴于课时规模,即使不可能全部在单一学年内使用,也可以每年轮换并且逐步优化,降低学生积累抄袭的可能性,进一步提升教学效果。
实施书面考试、上机作业和实验评价相结合的多元考核方式,令学生重视实践环节,进一步提升教学效果。对于计算机软件类专业的学生来说,其专业能力的高低主要体现于软件设计成果的好坏,因此平时的编程实验表现应当在期末成绩中占有较大的比重。在改革过程中,分两部逐步实施多元考核。
表1 分设计性实验安排
(1)平时成绩的核定以上机作业和设计性实验完成情况为主要依据。一方面,对于个别学生,充分使用AnyviewC网上作业系统的教师点评功能,增加抽查互动环节并提高互动效率;另一方面,对全部学生的做题情况进行分析统计,评估整体学习进度以及重点、难点攻关情况。
(2)将平时成绩占期末总评成绩的比重至少提高至50%,在条件允许时,期末考试采用上机考试的形式。在确保题目难度和覆盖面一致的情况下,对考试题目进行随机抽取,动态生成考试试卷。
上述改革措施在广东工业大学计算机学院连续实施4个学年,改革方案的实施也获得国家留学基金委及广东省科研和教学改革项目的支持,取得较为明显的教学成果,使得部分学生扭转了离散数学课程与实践应用联系不大的错误认识,整体提升了计算机软件专业的教学质量,响应了新工科的建设要求。
在离散数学课程教学中强调该基础课程与后续课程的联系之后,学生在学习过程中对课程内容的兴趣度增大,并且对该基础课程的重要性有了进一步的认识。从考试成绩看,平均分和最高分段人数都有所提升,同时不及格人数有所下降。更为重要的是,不少学生的数学思维能力得到较好的训练,奠定了在各级ACM竞赛、机器人竞赛中获得良好成绩的坚实基础。
在计算机软件专业中,编程能力始终是衡量学生专业素质高低的重要考量指标。在计算机软件主干课程设置中,离散数学课程位于程序设计语言课程之后、数据结构课程之前。在离散数学中设置上机编程实践环节,可以使学生充分巩固程序设计基本功,为数据结构课程的学习打下坚实的基础。据数据结构的专业教师反馈,由于近两年学生的编程基础较为牢固,因此在数据结构课程的初始阶段无需再耗时复习程序设计课程的内容,课程内容的编排得到了进一步优化。
以广东工业大学为例,该校是目前广东省本科招生规模最大的本科高等院校,既肩负保证高考录取率的任务,又承担着向社会各行各业输送具备相当实践应用能力、可快速上手工作的毕业生的任务。在学校的计算机、自动化、信息、数学、物理、机电等学院中,每年需要学习软件类专业课程的学生超过4 000人,这就要求在工科院校的教学过程中要精讲多练,多培养学生运用理论知识解决实际问题的能力。
实现离散数学基础课与后续课程的组合衔接优化,其意义并不限于计算机大类专业的本科教学质量提升,还在于可以提供电子电气信息大类与计算机技术相关专业基础课程及实验的教学改革借鉴,更可以为理工科更大范围的程序设计公共课提供优质教学实验资源共享。在接下来的阶段,需要进一步完善和丰富教学手段,巩固改革成果,将改革的经验逐步推广至兄弟院校。