计算机科学已经深入应用到各个领域,因此计算机教育已经成为高等教育中的基础课程之一。高等学校的计算机教育可以分为两类:一种是面向计算机专业的学科教育即计算机专业教育,另一种是面向全体大学生的计算机教育,也就是计算机基础教育。
计算机基础教育是面向全体大学生的计算机教育。在教学实践中,我们应该注意到非计算机专业与计算机专业具有共性的一面,又有很大的差别。在教学内容上虽然有一部分重叠,但是不同的专业学习计算机的目的不同、基础不同,因此,对不同类型的专业要提出不同的要求、采用不同的教学方式。
北京大学主要从大学生的计算机知识体系结构来构建计算机基础教育课程体系的。计算机的每个应用领域都是由基础理论、应用技术和实际应用系统等层次构成,不同专业的学生会突出不同的层次。
对于大部分文科类专业来说,学生学习计算机的目的是使用计算机,因此,要求学生熟练掌握各种相关软件的使用,以及对计算机应用技术的简单了解。对于非计算机专业的理工学生来说,除了达到对文科学生的要求之外,还要学习一些基本的应用基础如程序设计等等,以在较深的层次上结合自己的专业领域来应用计算机。而对于计算机专业的学生来说,全面、系统地掌握计算机的专业理论知识是必须的,因此在计算机基础教育上的要求也会更严格。
根据不同专业对计算机的不同需求,北京大学计算机基础课程教学体系划分为计算机专业(A类)、理科非计算机专业(B类)、文科专业(C类)三类。
为了了解北京大学计算机基础教学的课程体系和知识点设置的情况,以及学生的学习效果,我们在北京大学计算机基础任课教员和低年级理科学生中进行 了计算机基础课程分类分级教学情况的调查。下面重点介绍北京大学计算机基础课程教学体系、课程设置以及教学效果、教学经验、教学改革等方面的调查结果。
一、北京大学计算机基础课程教学体系
北京大学计算机基础课程教学体系按照计算机专业(A类)、理科非计算机专业(B类)、文科专业划分为三类。A类和B类的计算机基础课程有三门课程:计算概论、数据结构与算法、微机原理。为了加强计算机专业学生的程序设计能力,在信息学院专门为计算机专业学生开设了程序设计实习、数据结构与算法实习这两门实践课程,进行系统的程序设计训练。C类计算机基础课程包括两学期的内容:文科计算机基础(上)、文科计算机基础(下)。
三类教学体系中不同的课程都设有主持教员和主讲教员,这些来自北京大学不同的院系的教员组成教学小组,共同制定教学大纲、选取教材、统一教学进度、定期交流教学经验。
1.计算机专业计算机基础课程体系(A类)
在设置计算机专业的基础课程时,基于如下的考虑:
(1)首先要给学生提供对计算机学科的一个全局性了解,建立学科全局观,既有利于日后深入学习做出选择,也有利于对各学科分支在学科全局中的位置和相互关系有透彻的理解。
(2)设计程序解决一个问题时,除了认真分析问题之外,最重要的是选择合适的数据结构,并设计满足限制条件(或者更优)的算法。因此,计算机专业的学生要熟练掌握各种常见的数据结构,深刻理解某些经典算法,如快速排序、二分法等等的原理和时间、空间复杂度,掌握算法设计的一般步骤。
(3)计算机专业的学生应该从理论和实践上掌握微型计算机的基本组成、工作原理及常用接口技术,建立微机整体概念,具备利用微机进行硬、软件开发的初步能力。除此之外,还要初步掌握汇编语言程序设计的基本方法和上机调试过程。
因此,北京大学计算机系设置了计算概论课程、数据结构与算法课程、数据结构实习、程序设计实习和微机原理课程。其中,计算概论作为总论性质的课程,是其他课程的先修课程。
2.理科非计算机专业计算机基础课程体系(B类)
非计算机专业学习计算机技术的目的很明确,不是把它作为纯理论的课程来学习,而是作为应用技术来掌握。对于理工类非计算机专业的学生来说,虽然他们在学习和工作中不是以计算机为中心,但是很多情况下却离不开计算机,他们需要结合自己的专业,利用计算机作为工具来开展工作。
与计算机专业一样,对理科非计算机专业的计算机基础课程体系同样也设置了计算概论、数据结构与算法、微机原理三门课程。但是,由于两者的学习目的不同,故而要求也有很大不同。
3.文科专业计算机基础课程体系(C类)
对文科学生在计算机方面的要求比对理科非计算机专业学生的要求更低一些,教授的内容也更偏向于应用,结合使用计算机和应用计算机,讲解计算机与信息技术的基本知识和基本方法。文科专业计算机基础课程包括两学期的内容:文科计算机基础(上)、文科计算机基础(下)。
二、课程的主要教学目标和教学内容
各门课程的主持和主讲教员参考各门课程的主持和主讲教员参考CCC2002(China Computing Curricula, 中国计算机科学与技术学科教程)、CC2001、“计算机基础教学白皮书”和CFC2004(China Fundamental-computing Curricula, 中国高等院校计算机基础教育课程体系)等课程体系为不同类型的计算机基础教育课程分别制定了教学大纲。
1. 计算机专业
计算机专业的计算机基础课包括五门课程:计算概论、数据结构与算法、数据结构与算法实习、程序设计实习、微机原理。其中,计算概论是其他课程的先修课,数据结构与算法和数据结构与算法实习是两门同修课程。
(1) 计算概论A(54学时,3学分)
这门课程的教学目标是给计算机专业的学生提供一个对计算机学科的全局性认识,让学生一开始就有全局观,既对日后深入学习做出选择提供帮助,又有利于透彻理解各学科分支在整个计算机学科中的位置和相互关系。在教学实践中,既要遵循人的认识习惯,又能让学生有效地掌握学科哲学思想。
该课程的基本目的是:使学生了解‘计算科学’的意义、内容和方法,从基础理论、基本开发技术和应用三个层面来介绍;使学生对计算机的认识由感性的、功能的认识深入到内涵的、机理的认识;使学生对计算机学科的主要骨干课的内容以及相互关系有一个概括的了解,对计算机专业的课程体系建立一个整体印象;使学生掌握程序设计的基本方法,可以用C++语言编写应用程序。
在教学实践中,我们采用了两条主线:计算科学简介,C++程序设计。即在介绍计算科学的同时也讲解C++程序设计,实践证明,这样收到了很好的教学效果。
教学方式:既有课堂教学(多媒体教学),又有网络课堂:http://162.105.80.97 ,可以进行课后复习、交作业、讨论、辅导答疑,等等。
(2) 程序设计实习(36学时,2学分)
这是信息学院本科生必修课。
该课程的基本目的是:了解程序设计语言的本质,并熟练掌握一种程序设计语言;培养学生的实际动手能力, 为进一步学习其他专业课程奠定良好的基础。目前程序设计使用的高级语言是C++。
教学方式:课堂授课和上机实习相结合。
(3) 数据结构与算法A(54学时,3学分)
该课程为信息学院本科生必修课,又是计算机软件专业一门十分重要的基础课。计算机科学各领域及有关的应用软件都要使用到各种数据结构。这门课程向学生详细讲解各种常见的数据结构及其特点,讲授算法设计和分析技术的一般方法,使学生能够熟练运用各种数据结构,针对具体问题设计出合适的算法。
课程网站: http://db.pku.edu.cn/mzhang/ds/
该课程的基本目的是:通过本课程的学习,学生将基本掌握数据结构和算法的设计分析技术,提高程序设计的质量;根据所求解问题的性质选择合理的数据结构并对时间空间复杂性进行必要的控制;培养学生逻辑思维能力、独立思考能力、分析问题和解决问题能力,以及严谨的科学作风。
(4) 数据结构与算法实习(周学时4,2学分)
该课程为信息学院本科生必修课,先修要求:计算概论A ,同修要求:数据结构与算法。
课程网站:http://db.pku.edu.cn/mzhang/ds/shixi/index.htm
该课程的基本目的是:配合“数据结构”理论课程的学习,提高学生的实际动手能力;能够独立地实现常用基本数据结构的ADT,能够灵活地应用基本ADT,以及相应的STL中设置的常用数据结构,解决一些实际问题,独立编写中小型应用程序;应用基本数据结构,并结合排序、检索、文件、索引等技术,合作编写比较综合的大型应用程序。
(5) 微机原理A(54学时,3学分)
该课程为信息学院本科生必修课,先修要求:计算概论A,数字逻辑。
该课程的基本目的是:从理论和实践上掌握微型计算机的基本组成、工作原理及常用接口技术;初步掌握汇编语言程序设计的基本方法和上机调试过程;建立微机整体概念,具备利用微机进行硬、软件开发的初步能力。
教学方式:课堂讲授,示教演示,上机实习。
2. 理科非计算机专业
理科非计算机专业计算机基础课程包括3门课:计算概论、数据结构与算法、微机原理。其中,计算概论是其他两门课程的先修课。
(1)计算概论B(51学时,3学分)
该课程为理科本科通选基础课B。
课程网站:http://162.105.30.60/course/index.htm; http://icl.pku.edu.cn/member/hujf/;ftp://162.105.20.22/courses/; http://gis.pku.edu.cn/Course/ComputerCourse02/index.htm
该课程的基本目的是:使学生初步理解有关计算机和信息技术的基本概念和基础知识,学会使用计算机进行信息处理,使用常用软件,使用因特网;讲授程序设计基础,侧重其基本部分。
教学方式:课堂讲授,配以上机。每次课都布置作业,包括上机作业。
(2)数据结构与算法B(2(课堂教学)+2(教学实验)课时/周,3学分)
该课程为理科本科生必修课 。
先修课程: 计算概论(通过学习计算概论,学生要有一定的程序设计能力,能熟练掌握运用C的控制结构,函数定义与调用,数组,结构,指针。
课程网站:http://162.105.69.120/teachers/zhangnx/ds/算法与数据结构/INDEX.HTM;ftp://162.105.20.22/courses/;http://db.pku.edu.cn/ds/
该课程的基本要求是:从每个数据结构的逻辑结构、相应的一组基本运算和实现三个方面去掌握线性表、栈、队列、串*、树、图和字典等常用的数据结构;掌握在顺序存储结构上实现的重要的几种排序算法;对算法的时间和空间复杂性有一定的分析能力;针对简单的应用问题,应能选择合适的数据结构及设计有效的算法解决之。
教学方式:以课堂讲授为主,并根据教学进度安排上机实验。上机内容包括:单链表、栈、二叉树操作、图的遍历、检索、排序。
(3)微机原理B(54学时,3学分)
该课程为理科非计算机专业限制性选修课。由于绝大部分非计算机专业的学生没有学过数字逻辑课程,所以与计算机系微机原理课程相比,增加了数字逻辑的基本内容;在内容的深度上也比计算机专业略浅一些。
该课程的基本目的:理解微型计算机的基本组成、工作原理及常用接口技术;初步掌握汇编语言程序设计的基本方法和上机调试过程;建立微机整体概念。
教学方式:课堂讲授,示教演示,上机实习。
3.文科
文科专业计算机基础课程分两学期讲授。
(1)文科计算机基础(上)(48学时,2学分)
该课程为文科必修课程。这门课的目的是向文科学生介绍计算机的发展,计算机的使用与维护,计算机网络方面的常识,以及常用软件(如word、excel)的使用。通过本课程的学习,希望学生能够较为熟练地使用计算机,真正把计算机作为日常生活和学习中的工具。
课程网站:http://162.105.30.75;http://162.105.30.75:8080;http://162.105.30.80:8000
教学方式:对于基础知识采用课堂讲授的形式,对于其他需要动手操作的技能采用上机实验。
(2)文科计算机基础(下)(周学时3,2学分)
该课程为文科类必修课程。该课程讲授较为高级的计算机应用技术,一共包含7个模块:网络、多媒体、数据库、VB、ASP、网页制作、动态网页制作。我们将这个7个模块组合起来,一共形成了7门课程,学生可以任选其中1种或2种。这7门课程是:网络与多媒体技术,网络与数据库技术,网络与VB程序设计,数据库与VB程序设计,VB与ASP,(静态)网页制作,动态网页制作。
三、教学效果的调查结果
参与调查的学生一共626人(包括网上答卷和纸质答卷),其中计算机专业(简称A类)343人(只学过计算概论的学生153人,学过数据结构和计算概论的学生71人,全部基础课程都学过的学生119人),理科非计算机专业(简称B类)165人,文科专业(简称C类)118人。
我们从基本信息、师资力量、教学方式、教学效果、课程安排五个方面进行了调查,并对结果进行了初步分析。由于文章的篇幅的限制,本文只给出教学效果,也就是学生对课程的知识点的了解程度。
在教学效果的调查中,对每门课程,我们让学生选出他们认为重要的知识点(多选),这样可以从结果看出不同年级和专业的学生对所学过每门课程的认识。
对理科专业(包括计算机专业)的学生考察了他们对4门课程的认识:计算概论、程序设计、数据结构与算法、微机原理。由于文科专业课程内容相对简单,我们将各个知识点汇聚在一起作为一门课程(文科计算机基础)来考察。
1.计算概论
调查结果表明,“学习写出正确、简洁的程序”被所有的学生(包括计算机专业和非计算机专业)认为是计算概论课程中最重要的知识点。计算机专业学生认为最不重要的知识点是机器指令与汇编,其次是布尔代数与逻辑电路。理科非计算机专业学生认为最不重要的知识点是布尔代数与逻辑电路,其次是计算模型。
计算机专业一年级学生对计算概论课程的各个知识点重要性的认识没有很大的起伏,而二年级学生(学过数据结构和微机原理的学生)对其中不同知识点有不同对待。二年级学生普遍认为机器指令和汇编、系统软件和应用软件、计算机网络等知识点不重要,原因可能是内容比较简单(例如系统软件和应用软件),或者以后会学到而且现在不急于了解(例如计算机组织与体系结构)。
2.程序设计
调查结果表明,学生认为最重要的知识点是指针,其次是基本程序结构;认为最不重要的知识点是贪心法,广度优先搜索。学生认为指针是程序设计中最重要的知识点,这和我们教学中采用C/C++作为入门语言不无关系。
观察计算机专业三类学生的看法,可以看出,随着学习的深入,认为数组、递归和回朔两个知识点很重要的学生比例在增加。例如一年级中只有37%的学生认为数组重要,而到二年级之后这个比例上升到70%以上。
3.数据结构与算法
调查结果表明,计算机专业学生认为数据结构中前几个最重要的知识点是:排序、二叉树、图的遍历、索引(包括B树/B+树);最不重要的知识点是高级数据结构(如字符树、广义表、AVL树)其次是树。
理科非计算机专业认为最重要的知识点依次是线性表、二叉树、排序,认为最不重要的知识点是高级数据结构、索引,其次是散列与检索。
教学实践中,我们的教学重点也基本上与学生认为最重要的知识点基本一致。同时在教学过程中没有重点讲授的内容(如高级树形结构),也被学生们认为是不重要的。
4.微机原理课程
调查结果表明,计算机专业学生认为最重要的知识点是汇编语言程序格式,其次是CPU的操作和时序、指令编码格式及80x86指令系统、中断的用途和中断控制器的作用;最不重要的知识点依次是伪指令和宏指令、外部引脚的功能、操作数的汇编表示、存储空间的扩展。
理科非计算机专业学生认为微机原理中最重要的知识点依次是定时器/计数器、中断的用途和中断控制器的作用、存储器的结构、存储器工作原理;最不重要的知识点是总线及常见总线标准、伪指令和宏指令、存储空间的扩展等。
5.文科计算机基础
由于文科专业课程内容相对简单,我们将各个知识点汇聚在一起作为一门课程(文科计算机基础)来考察。
调查结果表明,可以看出文科专业学生最感兴趣的知识点依次是:动画的处理、演示文稿的制作、文字处理软件的功能和用法、计算机安全与犯罪的有关常识;最不感兴趣的知识点是计算机文化与信息化社会、与计算机应用相关的道德与法规介绍、计算机的概念和发展史、软件与知识产权保护、计算机中的信息表示、网络教学与远程教育等。
6.教学效果小结
我们在分析了各专业各年级的调查数据之后,可以得出如下几个结论:
(1)在计算机专业,不同年级的学生对同一门课的认识可能会有比较大的出入;而在非计算机专业,不同年级的学生对同一门课的认识基本一致。例如计算机专业的学生对计算概论的认识,一年级学生认为较为重要的知识点如机器指令和汇编、系统软件和应用软件、计算机网络等,二年级的学生却认为都不重要。原因大概是内容比较简单,或者以后会学到。
(2)无论是计算机专业还是理科非计算机专业,学生普遍认为程序设计中最重要的知识点是指针。这和我们教学使用的编程语言有很大关系,因为目前教学实践中程序设计采用的入门语言一般是C/C++,而C/C++中指针功能强大但是不容易掌握,所以多数学生认为指针是程序设计中最重要的知识点。Java的语法中没有指针,面向对象的风格更完备,学生学起来可能比C++更容易一些。是否采用Java作为入门语言,是值得我们考虑的一个问题。
(3)学生认为数据结构中最重要的知识点是快速排序、二叉树、二叉树的遍历、图的遍历、最短路径、B树/B+树等,这基本上和我们教学中重点讲述的内容一致。
(4)文科学生对动画的处理、演示文稿的制作、文字处理软件的功能和用法、计算机安全与犯罪的有关常识最感兴趣,而对计算机文化与信息化社会、与计算机应用相关的道德与法规介绍、计算机的概念和发展史、软件与知识产权保护、计算机中的信息表示、网络教学与远程教育等内容没有很大兴趣,可以看出,文科学生希望老师多讲一些可以表现自己创造力和个性的、实用的或者学 生比较关心的内容。
四、教师的教学经验以及对计算机基础课程教学改革的看法
我们用e-mail采访了十几位担任本计算机基础课程的主讲教师,刘楚雄、陈泓捷、唐大仕、龙晓苑、李文新、胡俊峰、代亚飞、高军、王腾蛟等老师认真地回答了问卷,并提供了教学大纲等信息。他们其中有教学经验丰富的老教授,也有具有创新精神的青年骨干教师;有计算机专业的老师,也有其他学院担任本院计算机基础课程教学任务的老师。
1. 教学经验
归纳起来,各位老师的教学经验有以下几个方面:
(1)注重调动学生的积极性。可以让学生做一些小程序,提高学生的动手能力和信心来激发学生的积极性;可以增加鼓励措施,如请学生讲课,适当表扬,出一些需要创造性思维的作业;可以引入一些能用计算机解决的智力游戏,让学生积极思考;选取例子时也可以选一些短小简洁的问题,先提出问题,然后求解,容易集中学习注意力,等等。
(2)讲课内容注重实用性和具体性。学生对实际中存在的问题更容易感兴趣;对具体的例子比抽象的讲解更容易接受。可以通过让学生使用计算机去解决现实生活中的一些问题,因为学生大都希望能学以致用,能够解决一些具体的问题。他们在解决具体问题的过程中同时也学会了解决问题的方法。
(3)多与学生交流。可以在课程网站上建立留言板,在BBS上答疑,鼓励学生与教师和助教多交流,等等。这样能够发现学生的疑问甚至自己的不足,及时调整。
(4)选用内容新颖、编制优良的教材,参阅精品课程网站。
2. 教学改革设想
谈到计算机基础课程教学改革,老师们提出如下较为一致的看法:
(1)不同专业的计算机基础课程侧重点应该有所不同,强调针对性。有些工程性强的专业涉及到的科学计算比较多,艺术类专业可能会注重多媒体处理。不同专业的计算机基础课程应该包括针对该专业特点的内容。
(2)调整必修课和选修课的比例。有的老师认为,对于某些理科专业来说,计算机基础课程必修课应该包括计算概论、数据结构与算法,而像软件工程和Windows程序设计等课程可以作为选修课;对另外一些很少涉及编程的理工专业,必修课可以只包含计算概论,而数据结构与算法等作为选修课。对于文科专业来说,“计算机基础”应作为必修课,而程序设计可以作为限选课或者非限选课,算法与数据结构可以作为非限选课。
(3)教学内容应该突出应用性。希望学生能够学以致用,但是从学生的反应和老师的意见来看,在这方面仍有很大的努力空间。
五、结论
总的来看,我们的教学实践是成功的,但是也有一点不足。可以总结为以下几点:
1. 教学效果的评价
从学生对每门课程的认识来看,我们取得了很好的教学效果。学生认为课程中重要的知识点基本上和教学实践中重点讲解的内容一致。不过,在文科专业,学生希望可以学到更多的关于多媒体(动画、视频等)处理的实用技能。
2. 师资力量的评价
无论从计算机专业还是从非计算机专业来看,师资力量都基本能够满足要求。绝大多数理科学生认为教师和助教对学生认真负责,大部分文科学生也持相同看法。同时我们也注意到,理科非计算机专业学生虽然大部分认为老师很敬业,但是不是十分认可其能力。另外,计算机专业的计算概论课程需要增加助教。因此,提出应该很好解决教师的进修与充电的问题。
3. 课程安排和内容方面
老师和学生反映较多的问题是应该给不同学院甚至专业开设不同的计算机课程,教学内容应该和专业领域结合得更紧密一些。例如对于编程,不同专业要区别对待。有的学院除个别专业方向须掌握编程方法外,其余均是对现在已有程序的应用;而另外一些专业却对程序设计能力有较强烈的要求。再如对于美术相关的专业,可能会对电影制作方面有较高的要求。
4. 教学方式
老师如果能注重调动学生的积极性,教学效果可能会更好。可以讲解或布置有挑战性或应用性或有趣的任务、问题或习题,增加奖励和鼓励措施,讲授知识时能够做到理论联系实际,努力使该课程生动有趣且易懂等来调动学生的积极性并吸引学生的注意力。
5. 作业要求
大部分学生认为课程学习难度适中,能够独立完成作业,课程负担也比较合适。不过,在理科专业,数据结构课程作业偏多,而计算概论负担相对较轻。