标题 | 计算机专业学生系统能力培养方法研究 |
范文 | 杨兴强+刘翔鹏
摘 要:以函數参数为例,本文探讨了在一个知识点的教学中所包含的计算机系统能力培养问题。在计算机系统的背景下讨论一个知识点的微观教学过程,分析一个知识点在各种课程中的不同呈现形式的基础上,论述了课程之间在计算机系统能力培养方面的相互合作关系。提出了在以知识点为单元的教学过程中如何利用不同课程的知识以及它们之间的相互关系来培养学生系统能力的方法,取得了明显的实际教学效果。 关键词:函数参数;知识点;系统能力;课程教学 中图分类号:TP30 文献标识码:A Abstract:Taking the function parameter as an example,the paper explores computer system-level ability cultivation in the process of curriculum teaching based on knowledge points.The micro-teaching process is discussed under the background of computer systems.On the basis of analyzing the different presentation forms of one knowledge point in various courses,the paper expounds the cooperation relationship in computer system-level ability cultivation among courses,and presents a method to cultivate computer system-level ability by making full use of the knowledge and the interrelationship of different courses,achieving great practical teaching effects. Keywords:function parameters;knowledge point;computer system-level ability;course teaching 1 引言(Introduction) 计算机系统能力是指在计算机系统的背景下理解计算机知识体系中的概念和方法,并能综合运用系统中的各个部分,解决实际问题的能力。它强调了系统中各部分之间的关联性,反映到教学中就是各课程之间的关联性。然而,目前的计算机专业教学领域中,随着各门课程自身的发展,课程内的结构和逻辑性日趋合理,而课程之间、课程与系统之间的隔离却变得越来越严重。这导致对学生们的知识体系的完整性和系统能力的培养受到限制。为了弥补传统课程之间业已形成的隔离,国内外计算机教育专家做了大量的教学研究工作。 20世纪末,美国卡内基-梅隆大学的R.E.Bryant提出了从程序员的角度、从系统的角度来进行计算机专业教学的观点,并出版了《深入理解计算机系统》[1],在计算机教育领域产生了广泛的影响。该书通过打破课程之间的界限,试图对计算机系统进行完整而深入的剖析,已被国内外很多大学作为计算机系统能力培养的教材。2013年,教育部教执委系统研究组王志英等在文献[2]中介绍了计算机系统能力培养的主要内涵及培养需求,阐述了系统能力培养和课程体系设置的总体思路。2014年,袁春风率先在南京大学和复旦大学开设了“计算机系统基础”课程,编写了系统论述和系统实验相结合的教材[3]。随后,南京大学提出了四纵三横的课程体系建设方案,在系统能力培养方面做了深入而系统的工作[4]。清华大学刘卫东等[5]调整课程体系,统一规划课程内容,并且在实验教学中将操作系统和计算机组成等课程结合起来,实现了课程间的融合与贯通。在这样的课程联合中,学生可以在自己设计完成的CPU上,开发自己的操作系统,并运行自己的应用程序。另外北京大学、国防科技大学、北京航空航天大学在系统能力培养方面都做出了各具特色的探讨。 以上研究是基于建立新的课程,或改革现有课程来构建计算机系统知识体系架构,为系统能力培养铺平道路。他们都是从总体上构建系统教学实例,透过典型实例让学生了解计算机系统内部的相互关联。在实际教学过程中,虽然都取得了很好的效果,但也付出了很大的代价,对现有教学体系进行了不小的改动,并且需要更多的课时。本文认为,系统能力体现的不仅是对系统总体框架的把握水平,同时也表现为面对具体问题时的一种思维方式。因此,虽然系统能力涉及整个系统范围,然而系统能力的培养却体现在思维的细节。作为对目前教学研究的补充,本文将系统能力的培养放到课程的微观方面,即在知识点一级的微观教学过程中来研究如何培养系统能力。 下面将以函数参数为例,探讨在一个知识点中所包含的系统能力培养素材以及如何利用这些素材提升学生的计算机系统能力。 2 函数参数教学实例(Teaching example of the function parameter) 函数是程序的基本结构,参数传递是实现函数间调用的基本功能。在计算机专业本科课程中,一般情况下,学生们是在高级语言课程首先接触这个知识点。本文通过分析这个知识点,发现它所蕴含的计算机系统能力培养的素材和背景,并且以这个知识点为例,阐述提高学生计算机系统能力的教学方法。 以C语言为例,普通的教科书[6]在讲解这个知识点时,典型的内容如下:(1)形参的概念;(2)实参的概念;(3)形参与实参之间的关系;(4)演示类似图1中程序的例子,让学生获得函数调用的体验。 对于单纯学习高级程序设计语言的学生来讲,以上关于函数参数传递的内容就足够了,完全可以应对一般的程序设计任务。然而,从计算机专业的角度看,仅从高级语言的角度理解函数参数是不够的。例如,如果不清楚函数参数的传递过程,就无法理解缓冲区溢出的攻击程序,无法设计出好的应用程序接口,也就无法提高参数传递的效率。 参数传递依赖的是栈,栈是数据结构课程中的概念。如何利用栈来实现参数的传递和函数的返回,则是编译原理课程的内容。图2显示了计算机在执行图1中的程序时,进入子程序foo()后栈的状态。当把参数按一定的顺序逐个压栈时,必须考虑参数的数据类型及它们在内存的放置。例如c、k和string所占的字节数,要解释清楚需引入计算机组成和编译原理中的知识。函数在递归调用时,参数被递归地压入栈中,随着递归的深入,栈空间会越来越少。程序员稍不注意,其编写的程序就会导致栈溢出。栈空间为什么会溢出呢?栈所占用的存储空间是如何分配的?这些问题涉及了操作系统中地址空间的概念以及内存分配问题。除了参数传递所涉及的各课程的这些基本概念之外,稍微深入一点就会延伸到参数个数可变的情况。例如,在C语言中有printf(...)的例子,Java中还有多态性。图3说明函数参数涉及了多门课程,必须将这些课程的相关知识综合起来理解,才能培养学生从计算机系统的角度全面把握函數参数这样的知识点。在各项应用中,能够从整个计算机系统的范围内寻找解决方案,这正是目前大学所提倡培养的计算机系统能力。 国内外很多大学的计算机专业教学往往增加一门新课程,以纵向的视角审视计算机系统,打破课程之间的界限,从上而下地讲解计算机系统的典型操作。例如,针对函数参数、文件的操作等,可以跨越高级语言、编译程序、操作系统、计算机组成多门课程,深入阐释其概念及实现细节。这种打破课程界限,从系统范围思考问题的教学方法对于培养学生的计算机系统能力是非常重要的。 然而,单独开设一门课程的方法也存在一些问题:(1)作为一门课程,仅能将一些典型的知识点在系统范围内展开讲授,而系统思维是针对计算机系统的所有方面的。只要计算机系统中的某个对象出现问题,我们一般都需要从系统的角度思考和解决。所以从培养系统能力的角度这样的课程缺少一定的覆盖度。(2)这样的课程涉及现有课程的很多内容,要和现有课程有机融合,需要对目前的教学安排做较大的改动。 本文认为,计算机系统能力的培养不应该仅是一门课的任务,应该贯穿在和计算机系统相关的所有课程中。系统能力,一方面是一个长期、综合培养的结果,另一方面几乎在每个知识点上都存在系统能力培养的素材和背景,因此完全可以把系统能力的培养落实到教学的细节。在后面的两节,我们将分别讨论计算机系统观的建立和计算机系统能力的培养方法,其着眼点都是基于知识点级的微观教学。 3 计算机系统观(Computer system-level perspective ) 在CSC2013[7]中非常明确地引入了计算机系统观的教学思想:计算机科学专业的学生应当学会从细节到抽象的多个层次上去理解及思考问题。这种理解及思考应当超越计算机系统中各种不同部分的实现细节,包括鉴赏计算机系统的结构以及它的构造和分析过程。他们需要识别计算机系统发挥作用的环境,包括与人和物理世界的交互。 本文从两个方面来诠释上面关于计算机系统观的要求:一是以联系的观点去观察计算机系统中对象,这包括了计算机系统中的不同层次之间的关系和同一层次不同部分之间的关系;二是以抽象的观点去理解计算机系统中的具体实现,从而发现它们中的共性,包括系统结构和实现方法。 可见,计算机系统观是一种大局观,但它绝不是空泛的理论和原理,而是面向具体问题的。它体现了学生认识问题的深度和广度。要建立学生的计算机系统观,教师和学生承担的角色也是不同的。教师是不能将观点强加给学生的,而要将背景和知识展现给学生,让学生自己去认识和体验。能否形成计算机系统观,还要依赖于学生个人能否从教师构建的教学背景中抽象出自己的观点。 计算机系统观是获得计算机系统能力的前提,也就是说我们只有用大的视角去看问题,才能在大的范围内解决问题。 4 面向知识点的系统能力培养方法(Training of computer sstem-level ability based on knowledge points) 当学生要解决计算机系统中的某个问题时,需要分析和该问题相关的所有系统内技术方案,从中找出最优的,并评估该方案给系统带来的各方面的影响。因此,学生获得计算机系统能力的前提是从系统的角度了解问题。反映到教学中,就是从各门课程的多个角度,去理解并掌握一个知识点。 假如从某门课程的一个角度去讲解一个知识点,称为该知识点的一个知识片段,那么一个知识点的教学就是由若干个知识片段组成,在每门课程中有一个片段(也可能有若干个)。例如,在汇编语言中都会讲到XCHG(intel)指令,用于实现两个数据的交换。在操作系统课程中swap(XCHG)指令可以实现进程间的互斥。可见,数据交换指令这个知识点包含了两个片段:一个在汇编语言中,一个在操作系统中。而在实际的计算机系统中,数据交换指令的这两个功能是不会局限于课程的。传统的教学中,每门课程仅介绍一个知识点在本课程内的知识片段,课程之间缺少有意识的融合。当然,有经验的教师和主动性强的学生都会在知识点的一个片段的教学过程中,联系到其他课程的相关知识片段。知识点—课程关系见表1。 教师现在要做的就是把这种课程之间的联系以规范的形式固定下来,成为教学过程的一个环节,而不是依赖于个别教师或学生的经验和主动性。具体做法如下:针对计算机系统中的每个知识点,定义它在各课程中的片段,形成知识点-课程关系表。当某门课的教师在教授一个知识点时,就去知识点-课程关系表中查找该知识点在其他课程中的片段。若学生已经在其他课程中学习了若干片段,那么教师就有责任将该课程的片段与其他课程的片段结合起来进行综合讲解。例如,在操作系统中讲到线程切换时,需要保存和回复CPU的现场信息,包括CPU的各类寄存器,此时需要结合计算机组成中已讲过的“CPU现场信息”;在操作系统中讲到线程调度时,需要结合C语言中使用的win32线程和Java语言中的Java线程的相关知识,如图4所示。 显然,建立知识点-课程关系表需要各门课程之间紧密的合作才能完成。 计算机课程的设置是为了适应学校的教学体制,而且机械地分割了计算机系统知识体系。上述知识片段概念的引入体现了各专业课程对知识体系分割的现实。而知识点-课程关系表的建立可以有助于重建课程之间在计算机系统知识领域内的联系。通过这种联系,学生可以从计算机系统的角度更全面地理解在课程中所学的知识,为系统观的建立和获得系统能力奠定基础。 与系统观的建立过程相一致,学生必须进行跨越学科的大量的实践训练,才能获得真正解决问题的能力。 5 结论(Conclusion) 本文概述了为提高计算机系统能力目前各大学所做的教学研究和采取的措施,提出了系统能力的培养前提是建立系统观,而建立系统观的方法就是加强各课程知识点之间的联系,构造学生完整的计算机系统知识体系。将计算机系统能力的培养这样一个宏观问题,落实到在微观教学中,培养学生以联系的观点观察、分析计算机系统中的对象,这样具体、可行的教学过程是本文研究的核心问题。计算机系统能力的培养不仅仅是建立系统观的问题,更重要的是如何训练学生们解决实际问题的能力,这是我们将进一步继续研究的课题。 参考文献(References) [1] R.E.Bryant,D.R.O'Hallaron.Computer Systems:A Programmer's Perspective(Third Edition)[M].Upper Saddle River:Prentice-Hall,2015:2-5. [2] 王志英,周兴社,袁春风,等.计算机专业学生系统能力培养和系统课程体系设置研究[J].计算机教育,2013(9):1-6. [3] 袁春风.计算机系统基础[M].北京:机械工业出版社,2014:2-4. [4] 袁春风.计算机系统核心教学内容之关联[J].中国计算机学会通讯,2016(9):54-57. [5] 刘卫东,张悠慧,向勇,等.面向系统能力培养的计算机专业课程体系建设实践[J].中国大学教学,2014(8):48-52. [6] 谭浩强.C语言程序设计[M].北京:清华大学出版社,2014:162-165. [7] Joint Task Force on Computing Curricula,ACM and IEEE, Computer Science Curricula 2013:Curriculum Guidelines for Undergraduate Degree Programs in Computer Science, ACM, 2013:23-26. 作者簡介: 杨兴强(1964-),男,博士,教授.研究领域:计算机图形学,操作系统. 刘翔鹏(1980-),女,硕士,助教.研究领域:软件开发. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。