计算思维角度下的离散数学课程教学思考

2019-12-20 20:29蒋运承詹捷宇马文俊
计算机教育 2019年1期
关键词:离散数学计算机知识点

蒋运承,詹捷宇,马文俊

(华南师范大学 计算机学院,广东 广州 510631)

0 引 言

离散数学[1]是计算机专业(计算机科学与技术、软件工程、网络工程等)本科生必修的基础课程之一,为多门后续课程(如数据结构、算法设计与分析、编译原理、数据库原理、人工智能等)提供数学基础,可见离散数学对计算机专业本科生来说是一门非常重要、非常基础的课程。然而,作为一门较为理论的课程,离散数学同其他理论性课程一样,在教学过程中遇到一个非常麻烦的问题:部分学生没有太大的兴趣。笔者基于近年来离散数学相关课程(包括离散数学、数理逻辑、计算理论等)方面的教学经历(包括本科生和研究生)对上述问题形成的原因进行了一些分析和总结。

从教师的角度来看,部分教师的教学方法和手段以及教学理念可能存在一些问题。关于教学方法和手段,由于授课时间很紧,而课程内容多,课堂上不可能讲授所有的内容,因此教师在授课时只能讲授一些基本内容,剩下的内容留给学生课后自学或作为作业。关于教学理念,教师往往强调的是离散数学作为一门理论性课程,是为今后学习其他课程打基础,掌握好教材内容最为关键,至于离散数学具体有什么用、如何将离散数学与实际生活结合起来,授课时涉及甚少。

从学生的角度来看,部分学生在脑海中或许存在这样一个观念:学习离散数学用处不大,至少对就业没有直接用处。这种观念的形成也是基于一些现实的情况,如相比计算机应用方向,理论计算机科学专业的学生(特别是研究生)招收数量较少,理论计算机科学方向的毕业生就业的难度较大。在这种观念的影响下,学生很难投入热情学习离散数学,并且离散数学部分内容较为抽象、枯燥,导致学生没有学习离散数学的激情。

造成这种现象,责任并不全在教师和学生。目前高校的离散数学教材设计、教学计划、考试安排具有较为固定的模式,作为任课教师,必须按照既定计划授课,否则无法完成教学任务,灵活性较差。作为学生,考试内容是固定的,他们必须按照计划掌握教学大纲上的每个知识点,否则很难通过考试。

1 计算思维

计算思维[2-3]建立在计算过程的能力和限制之上,由人由机器执行。它是每个人的基本技能,不仅仅属于计算机科学家,解析能力的培养应当是每个学生不仅掌握阅读、写作和算术,还要学会计算思维。计算思维是运用计算机科学的基础概念求解问题、设计系统和理解人类的行为,涵盖计算机科学之广度的一系列思维活动。

计算机科学是计算的学问——什么是可计算的,怎样去计算[4]。计算思维直面机器智能的不解之谜:什么人类比计算机做得好?什么计算机比人类做得好?最基本的问题是什么是可计算的,因此计算思维具有如下特性[2]:概念化,不是程序化。像计算机科学家那样思维意味着远不止进行计算机编程,还能够进行多个层次上的抽象思维。

是根本的,不是刻板的技能。根本技能是每一个人为了在现代社会中发挥职能所必须具备的,而刻板技能意味着机械的重复。

是人的,不是计算机的思维方式。计算思维是人类求解问题的一条途径,但决非要使人类像计算机那样思考。

数学和工程思维的互补与融合。计算机科学在本质上源自数学思维,又从本质上源自工程思维。

是思想,不是人造物。以物理形式到处呈现并时时刻刻触及人的生活的不只是我们生产的软件、硬件等人造物,更重要的是被用以接近和求解问题、管理日常生活、与他人交流和互动的计算概念。

面向所有的人,所有地方。当计算思维真正融入人类活动的整体以致不再表现为一种显式之哲学的时候,它就将成为一种现实。

可以看出,计算思维的重要性在于它关系到对计算机科学的转型与发展之基本认识[5]。对高校计算机专业教学工作者来说,计算思维可以提供一个全新的教学视角[6]:一个与目前计算机专业课程教学有本质不同的教学模式,以克服当前高校计算机专业教学中面临的各种难以解决的问题,这也说明培养和提高学生计算思维的能力是时代赋予的不可推卸的责任。

2 离散数学课程教学

2.1 教学理念

离散数学是一门理论性课程,不能被学生直接应用于软件开发(或编程),如何说服学生认可学习离散数学,或许是离散数学课程教学工作者不可回避的重要问题,解决这个问题首先要有一个正确的教学理念。

目前学生在学习离散数学时很难发现它的有用之处,主要原因是高校一般在大一下学期或大二上学期开设离散数学课程,而大一下学期或大二上学期的学生对计算机的认识主要停留在操作和简单编程层面,即对于计算机编程,主要学习初级的编程语言,如C语言、Visual Basic、Python等,即使学习了C++或Java等主流编程语言,也没有进行大型软件开发的实践,这样学生在离散数学和编程语言(特别是软件开发实践)之间确实找不出关联。学生学习编程语言,可以用它编写自己感兴趣的程序,有立竿见影的效果,非常有成就感,自然学习兴趣浓厚,但对于离散数学,特别是数理逻辑、代数结构、集合论等内容,学生学习的是抽象的符号和定理,再加上离散数学的一些内容(如数理逻辑中的可靠性和完备性、代数结构中群和环的性质等)相对抽象、枯燥,部分学生因为难以理解而没有兴趣。因此,要从计算思维的层面培养学生、讲授离散数学课程,让学生认可学习离散数学,并且非学好不可,从而激发学生学习离散数学的兴趣和激情。

2.2 教 材

目前离散数学课程的教材一般包括4部分经典内容:数理逻辑、集合论、代数结构和图论,有些教材还把数论、组合数学甚至概率论等内容也纳入教材。离散数学教材内容的选择除了必须包含数理逻辑、集合论、代数结构和图论以外,还可以考虑适当增加部分计算理论的内容,至于数论、组合数学和概率论,因为一般的高校都开设了相应的选修课,所以建议不纳入离散数学教材。由于教材内容很多,主要讲解一些基本概念和性质,因此还可以引入一些简单的实例进行辅助说明,但受课堂教学时间限制,教材上不可能大篇幅地阐述应用实例,为了激发学生的学习兴趣,有必要编写一本离散数学课外读物教材,专门详细阐述离散数学每个内容的实际应用,如数理逻辑与人工智能、群论与软件工程、集合论与信息检索、图论与社交网络等,也就是说,离散数学授课需要两本教材:离散数学教材和离散数学课外读物教材。

由于同一本教材要面对不同层次的学生,因而对每一部分(数理逻辑、集合论、代数结构、图论、计算理论、实际应用课外读物)都要精心组织,除了必讲内容外,还要有一些选讲内容,由任课教师根据实际情况灵活授课。内容选取上,课外读物教材的内容相对容易组织,对每个知识点可以选取几个不同难度的实例,难度大的实例可以作为选讲内容,如对于数理逻辑,可以选取定理自动证明、电路设计、智能决策、模型检测、软件测试等实际应用;对于图论,可以选取TSP(旅行商、货郎担)问题、最优路径、社交网络、图数据等实际应用。离散数学授课教材主要包括5个部分:数理逻辑、集合论、代数结构、图论和计算理论,每个部分都要围绕它的核心内容展开。数理逻辑的核心内容是可靠性和完备性,集合论的核心内容是自然数、基数和序数,代数结构的核心内容是群和环的性质,图论的核心内容是各种图的性质,计算理论的核心内容是可计算性(可判定性)。

以数理逻辑和计算理论为例,教材内容要讲清楚数理逻辑中的可靠性和完备性,需要引入数理逻辑的一些基本概念和预备知识,一般都是围绕命题逻辑和谓词逻辑展开,甚至还包括逻辑程序设计、模态逻辑、时态逻辑等方面的基本知识,由于内容很多,因此很少详细讲解数理逻辑的应用。如果按照现在的教学模式,这样的教材确实是好教材,因为能为学生提供丰富的数理逻辑方面的基础知识。从笔者自身体会来说,数理逻辑的学习对笔者开展的项目研究(智能软件理论与技术、语义计算、数据科学等)具有极大的好处,可以说,没有好的数理逻辑基础,现在的研究工作便很难深入进行,但这种体会是从事项目研究后才有的,如何让大一或大二的学生认识到数理逻辑确实有用是需要考虑的问题。

首先,应让学生阅读离散数学课外读物教材(含多个通俗易懂的数理逻辑方面的实际应用案例);其次,要有适应计算思维的教材。这样的教材除了包含传统数理逻辑课程教材的内容外,还应该讲解数理逻辑中一些简单的实际应用。一种比较原始的想法是可以将目前许多人工智能课程中的内容,如知识表示、归结原理、定理证明、专家系统等,以一种易于理解的方式融入数理逻辑教材;也可以将其他相关内容,如程序验证、模型检测、软件测试等,融入数理逻辑教材。具体的融合方式以人工智能方面的内容为例,在讲解每个数理逻辑知识点后,可以把相关的实际应用放在后面介绍,如在讲完合取范式和析取范式后可以引入归结原理的介绍,并给出实际应用(如平面几何的定理证明)。值得注意的是,所有实际应用应该能串联成一个整体,也就是说,通过教材上的实例,学生能了解数理逻辑在人工智能领域中是如何具体得到应用的。

计算理论方面,要讲清楚计算理论的核心内容可计算性(可判定性),也需要引入计算理论的一些基本概念,包括有限自动机、正则语言、下推自动机、上下文无关语言、图灵机等,进而讲述图灵可计算(可判定)。这些内容有一定的难度,由于授课内容有限,教材主要阐述基本概念和性质,很难详细讲解这些内容背后的应用。跟组织数理逻辑的内容相似,在讲解每个计算理论知识点后,可以把相关的实际应用放在后面介绍,如讲解完有限自动机后可以适当介绍自动机在服务计算、行为描述、密码学与信息安全、模式识别等方面的简单应用;阐述完下推自动机后可以给出它在程序编译等方面的实际应用。

这样的教材最明显的好处就是让学生知道离散数学是有用的,同时也大大扩充学生的知识面。计算思维能力的培养,首先需要广阔的知识面。如果大一学生能了解一些人工智能领域的知识,如知识表示与推理、机器学习、深度学习,他们可能会将遇到的问题进行抽象建模并进行智能化处理(从算法设计到软件实现),或者研发一些智能化的游戏小程序等。

2.3 教学过程

首先是课堂教学。课堂教学采用多媒体和黑板相结合的手段,离散数学的内容很多,特别是增加实际应用知识后,如何在有限的时间里讲授较多知识是授课教师需要面对的问题。

大学生具备了一定的自学和实践能力,因此可以采用启发式的教学方法,也就是说,在课堂上简明扼要地讲授离散数学每个知识点的基本概念,重点讲授重要结论(定理)的证明思路,并且针对一个知识点要详细讲授结论的证明过程,最后给学生介绍该知识点的应用。值得注意的地方是重要结论的证明思路和证明过程一定要讲透彻,因为这部分内容对学生来说很难、很抽象,部分学生自学有相当的难度,并且没有太大的兴趣。至于知识点的应用,应该以启发为主,大概介绍该实际应用的背景和现状以及大体的应用思路,因为学生一般对应用感兴趣,可以让学生课后完成。例如,当讲述一阶逻辑可以用来做知识表示时,首先可以向学生简单介绍传统知识表示的方法(如框架、语义网络、规则、概念图、剧本等)以及当前新的知识表示方法(如描述逻辑、本体、知识图谱等),然后以引导的方式为学生介绍一阶逻辑如何具体应用于知识表示,并给出一些实际生活中的实例。值得一提的是,可以适当采用一些最新的教学模式组织教学(翻转课堂式教学),如将有难度的知识点录制成视频,形成在线课程(或慕课),学生可以在课前事先自学,课堂上教师适当讲解并进行讨论。

启发式教学或翻转课堂式教学确实可以培养和提高学生计算思维的能力,因为计算思维本身是思想,不是人造物。也就是说,在课堂上给学生重点讲授的是学习方法、关键结论,而不是所有知识点,特别是当实际应用知识被介绍后(如人工智能、信息安全、信息检索、模式识别等),学生可以了解计算机是如何“思考”的;有了学习方法(思想)后,学生可以在课后自学感兴趣的知识点。

其次是课后教学。由于离散数学是理论性课程,因此目前大部分课后教学一般是通过布置习题作业实现,并且每个学生做的作业是相同的。这样做至少可以让学生在课后巩固课堂上所学的知识点,但现实情况也有不好的一面,存在部分学生抄袭的现象,而主要原因还是这些学生对离散数学兴趣不大,不愿意在课程上花时间。

计算思维采用抽象和分解来迎战庞杂的任务或者设计巨大复杂的系统,是数学和工程思维的互补与融合。很明显,为了培养学生计算思维的能力,课后除了为学生布置一定的传统习题(特别是证明题)以外,还应该让学生组成3~5人的小团队,以团队的形式进行一些应用性习题的练习,如在数理逻辑方面,课后可以要求学生利用一阶逻辑来形式化表示一些平面几何定理,并用计算机自动证明一些定理;还可以要求学生掌握一些自动推理工具,结合专家系统应用,了解如何利用一阶逻辑构建知识库,并利用推理工具进行自动推理;对于基础好的学生,可以让他们课后开发一个自动推理工具,实现教材上的一些理论(如合取范式、析取方式、子句、置换、合一等),因为实现这些推理工具可以用C语言编程,基础好的学生是完全有可能做到的。图论方面可以要求学生编程实现TSP、最优路径、社交网络等实际问题。

最后,需要强调的是教师课后仍然还有任务,除了上面提到的录制讲解知识点的小视频以外,还要在在线课程网站上跟学生互动,一方面帮助学生解决课后遇到的各种问题(包括理论问题和技术问题),另一方面还要主动为学生提供一些跟授课进度相同的实际问题,组织学生网上讨论交流。

3 结 语

计算思维是每个大学生需要具备的基本技能,培养学生计算思维的能力是时代赋予高校计算机课程教学工作者不可推卸的责任。要培养学生计算思维的能力,方法之一就是要对目前计算机专业课程的教学内容进行整理,并采用与计算思维相适应的教学模式。我们针对离散数学课程教学中存在的问题,从计算思维的角度提出了一种新的教学模式,包括教学理念、教材编写和教学过程。由于计算思维是一门新兴的研究课题,如何从计算思维的角度进行教学是一个值得深入探讨的重大课题。

猜你喜欢
离散数学计算机知识点
一张图知识点
一张图知识点
第四页 知识点 歼轰-7A
基于计算机自然语言处理的机器翻译技术应用与简介
计算机多媒体技术应用初探
中国古代的“计算机”
Dijkstra算法设计与实现
建构主义教学法在离散数学教学中的应用初探
慕课风暴下“离散数学”课程的教学思考与对策
离散数学课程教学方法改革