关键词:游戏化教学;计算机程序设计类课程;游戏激励元素
随着“云计算”、“互联网+”等新技术的不断出现,教育信息化也变得越来越引起广大教育工作者的重视。根据《教育信息化十年发展规划(2011年-2020年)》的文件精神,信息技术已被应用到各类教学活动中以丰富现有的教学手段并促进教学改革,推动教学模式朝着更有利于学生学习的方向发展。电脑游戏化教学作为信息技术在教育信息化中的典型应用,已经被推广应用到教育领域中,电脑游戏创造了一种娱乐学习环境,对学习者具有潜在的动机诱导功能[1],对学习者的学习效果和学习质量具有正向的促进作用[2]。本研究的目的是探究计算机程序设计类课程游戏化教学模式及其影响因素,以改进计算机程序设计类课程教学乏味的现状,指导计算机程序设计类课程利用教育信息化开展创新性教学,提升教学效果,培养学生创新意识和解决实践问题的能力。
1国内外研究现状
本研究针对计算机程序设计类课程的教学现状探究游戏化教学模式的构建问题,所以下面将对计算机程序设计类课程以及游戏化教学的研究现状进行阐述。(1)计算机程序设计类课程教学现状计算机程序设计类课程在大学里开设一般作为专业基础课,课程面向不同专业且计算机基础水平不同的学生,其抽象思维以及逻辑分析能力也各不相同[3]。虽然近年来计算机程序类课程教学一般采取多媒体教学,但课堂表现方式大多单一[4],教师通过教学平台软件控制学生机,演示教学内容,这种采用传统课程讲授与实验上机辅导相结合的方式,由于教师的工作重心主要在教学的组织和实验的辅导,教师和学生的沟通互动不足,难以建立良好的激励措施。学生在学习过程中因为竞争标准单一、敲代码乏味枯燥、代码调试困难等原因而显得学习动力不足。由于受到场地、身份、教师的精力等多方面原因,老师对学生的单向交流是主要形式,难以建立相互协作的团队,学生对程序设计语言的基本语法和程序流程等基础知识一般能掌握,但是对有一定难度的抽象算法存在理解上的困难[5]。(2)游戏化教学现状游戏化的概念从2002年提出后经过约十年的发展逐步流行[6]。游戏化的实质是通过游戏元素和游戏激励机制的使用,让过程变得有趣以激发人们的参与动机[7]。随着教育信息化的发展,游戏化也开始应用到计算机程序设计类课程教学中,将程序设计的知识点融进游戏过程[8],激励学生的兴趣和创新意识[9]。在游戏化教学中,通过游戏元素和课程知识的结合,让学习者参加一些包含游戏元素的活动,如金币、闯关、勋章、积分榜等[10-11],和老师评分相比,游戏中的同伴互评方式提高了学生参与互动的积极性[13]。整合在线学习平台,游戏化教学已经逐步用于MOOC平台等教学中[12-14],在激发学习者参与度的同时也提升了平台人气[15]。随着游戏化教学的推进,有效的游戏化元素引起了学者们的重视[16],比如游戏角色、游戏道具、游戏任务和激励评价的设计也得到了关注[9]。综上,现有计算机程序设计类课程教学在调动学生积极性方面还存在提升空间,而游戏化模式可以利用良好的互动和激励机制提升这种积极性,从而促进预期教学目标的达成。所以,为了探索游戏化教学在计算机程序设计类课程中的高效应用,本研究从计算机程序设计类课程的教学现状出发,探究计算机程序设计类课程游戏化教学影响因素,以期为计算机程序设计类课程游戏化教学模式设计提供些许参考。
2计算机程序设计类课程游戏化教学影响因素分析
本文采取问卷调查的方式以探究计算机程序设计类课程游戏化教学的影响因素,下面阐述研究的具体开展过程。2.1问卷设计。本研究在已有研究的基础上开发计算机程序设计类课程游戏化教学的调查问卷。除关于填表人的性别、学过的计算机语言和玩电脑游戏的频率等个人基本信息外,其它问题项都采用选择题的形式。问卷分为三部分,第一部分为个人基本信息,第二部分为核心部分,即计算机程序设计类课程游戏化教学的影响因素调查,第三部分为开放式回答的建议部分。2.2描述性统计。数据收集采取线上线下结合的方式,线下收集问卷162份,线上收集问卷105份,一共收集问卷267份,排除回答问题数据缺失的问卷,最终纳入数据分析的问卷249份。数据的描述性统计见表1。从表1中可知,大部分学生学过计算机程序设计语言,且大部分学生有玩电脑游戏的经历。2.3影响因素调查分析。(1)计算机程序设计类课程的教学满意度分析了解学生对目前计算机程序设计类课程的教学满意度是开展游戏化教学模式设计的基础,调查分析结果如图1所示。目前计算机程序设计类课程学生的学习积极性现状调查如图a图所示,相当一部分学生认为所学过的计算机程序设计类课程的教学模式乏味且难以调动学习积极性。由图b可知,学生认为目前计算机程序设计类课程教学缺乏趣味性占的比例最大。由图c可知,授课方式有趣被认为是计算机程序设计类课程教学能提高学习积极性的主要因素,这也正是本文探究计算机程序设计类课程游戏化教学模式创建的要旨。(2)电脑游戏的吸引力分析为了更好地将电脑游戏思想用在计算机程序设计类课程教学中,本研究设计了见表2的两个问题来了解哪类电脑游戏更具吸引力。从游戏类型来看,团队竞技类游戏最具有吸引力,较具吸引力的是闯关类游戏和角色扮演类游戏,答题类游戏具有较小的吸引力。从游戏激励元素吸引力调查的情况来看,排名最有吸引力,其次是虚拟物品奖励和等级具有较大的吸引力。(3)对计算机程序设计类课程游戏化教学的现状及态度调查分析本研究设计了两个方面的问题来调查了解计算机程序设计类课程游戏化教学的应用情况及态度。由图2的对比分析可知,偶尔听过游戏化教学的学生人数占的比较最多,完全不了解游戏化教学的学生也占了较大的比例,总的来说学生对游戏化教学的了解较少。由图3的对比分析可知,大部分学生所学的计算机程序设计类课程中从没用过游戏化教学方法,总的来说目前在计算机程序设计类课程中很少使用游戏化教学方法。为了掌握学生对计算机程序设计类课程游戏化教学的态度,本研究设计了两个方面的问题来进行分析。由图4可知,大部分学生赞同将游戏化教学思想融进计算机程序设计类课程的教学中。从图5可知,大部分学生也认为将游戏化思想运用到计算机程序设计类课程教学中可以提高学习兴趣。(4)对计算机程序设计类课程游戏化教学方法的建议分析本研究设置了开放性的回答来了解学生对计算机程序设计类课程游戏化教学方法的建议,这些建议经整理过后的词云分析如图6所示,其中游戏设计要与课程的教学内容紧密结合、游戏要注重对学习兴趣的激发、游戏设计的简单性等是学生关注较多的要点。本研究也设置了开放性的回答来了解学生对计算机程序设计类课程游戏化教学激励制度的建议,经整理过后的词云分析如图7所示,其中,设置奖励制度还是学生比较关心的话题,学生还希望设置创新性的奖励,比如积分兑换、适当的物资奖励、学分奖励等等得到了较多的关注。
3结束语
本研究聚焦计算机程序设计类课程游戏化教学模式影响因素分析,为计算机程序设计类课程教学模式改革提供理论上的参考和方法上的帮助。研究的具体意义如下:(1)推动教师进行计算机程序设计类课程的教学模式改革针对计算机程序设计类课程的教学现状,本研究以计算机程序设计类课程游戏化教学模式设计为例,在对目前计算机程序设计类课程教学满意度分析、电脑游戏吸引力分析的基础上,对计算机程序设计类课程游戏化教学的态度、对计算机程序设计类课程游戏化教学方法的建议分析等进行详细调查分析研究。从中可以推动该类课程教学模式改革和创新,游戏化教学模式的设计使计算机程序设计类课程知识点成为游戏任务环节,在学习过程中融入与具体课程内容相关的游戏化元素设计,将抽象的程序设计知识点通过游戏的可玩性和黏度形象地展示出来。研究不但有利于计算机程序设计类课程与游戏化教学的整合,而且对推动教师进行计算机程序设计类课程的教学改革、探讨游戏化教学模式构建、课程设计、激励元素有重要的指导意义。(2)为学生搭建趣味互动的计算机程序设计类课程学习平台从前文对计算机程序设计类课程的教学满意度分析、电脑游戏吸引力分析可以看出,趣味性是学生关注较多的话题,也是目前计算机程序设计类课程课堂教学的不足之处。游戏化教学思想为计算机程序设计类课程教学潜在地搭建了一种趣味互动的学习平台,教学过程游戏化组织学生在游戏规则、游戏目的、游戏反馈、竞争性任务等游戏元素中完成学习任务,通过游戏化这种潜在的动机诱导能力为学生搭建趣味性的学习平台,以学生为中心,以学生认为较具吸引力的排名、虚拟物品奖励、积分等游戏元素激励学生积极主动获取知识,以进一步提升学习效果和学习质量。未来,本研究还将结合具体的课程教学进一步完善计算机程序设计类课程游戏化教学模式创建及实践运用。
【关键词】计算机 程序设计 要点 规范性
随着计算机和互联网在全球各个领域的广泛应用,越来越多的计算机程序应用到人们的办公生活当中。这些年,移动互联网在我国的快速发展,计算机程序设计在我国普及起来,目前,多种语言被应用于在计算机程序设计中,其中大家用的比较多的有C语言、和可视化的VF和VB,在一些比较特殊的程序设计时可能还会用到JAVA语言和汇编语言等。计算机程序设计的语言常分为机器语言和高级语言两种,其中人们比较容易理解的是高级语言,汇编语言就属于机器语言,人们常用的C语言、VF、VB等语言都属于高级语言。由于计算机的底层程序是由0和1组成,所以,不管使用哪种语言进行计算机程序编写,在程序执行的时候,都会最终转化成0和1的形式。
1 计算机程序设计的概念
计算机程序是指具备特别作用的指令,该指令是根据事务的时间先后顺序和各项流程和编写而成的。计算机程序主要是对操作及数据进行描述,其中,对操作进行描述就是“算法”;对数据的描述主要指程序中需指出的数据组织形式以及数据类型。程序操作的基本目标是以数据为操作的对象,对数据进行加工和处理,从而获得预期的结构。程序设计的过程中程序员需慎重考虑与设计操作流程及数据结构。
在计算机程序的实际编写中,计算机程序除了操作和数据外,还需要选用适当的语言环境和编程方法,从而完成设计工作。在计算机软件编写的过程中,计算机程序设计语言是结构实现的载体与工具,数据结构怎是用来充当加工的对象,算法是程序的灵魂。计算机程序其实是通过对未知问题的分析,从而提出解决问题的方案,最终通过一系列计算机指令编写为能够执行的程序语言。
2 计算机程序设计的要点
2.1 对算法进行科学的设计
算法的设计是计算机程序设计的重点内容,算法的设计其实是通过一定的方式来把平时使用的机器语言进行转化。程序设计的过程中对算法进行科学的设计,有利于把软件使用者对软件功能的需求转化为程序语言。随着计算机程序设计的语言逐渐向着高级化方向发展,如何实现机器语言和高级语言之间的相互转化已成为程序设计中的重点问题。在计算机产生的初期阶段,计算机编程全部采用的是汇编等低级语言,编程不需要进行机器语言的转化,对设计算法的要求也比较简单。随着全球计算机技术的飞速发展,计算机程序也变得越来越复杂,与此同时,计算机算法也呈现出多元化的发展趋势,因此,对算法进行设计时要力求算法的科学与简洁,只有人和机器都能够方便掌握和理解的算法才能算是可靠的算法。
2.2 弄清函数调用
在计算机互联网技术飞速发展的今天,人们对计算机功能的要求也越来越高。计算机在不断满足人们各项需要的同时,其程序设计的难度也越来越多,在这种情形下,同一函数往往需要被多次执行,如果程序每执行一次这一函数都在程序所对应得位置添加这一函数,那么则会增大程序的占用空间,程序运行的难度也会大大增加,函数的调用在此情形下产生。函数的调用是指一种能够反复次执行同一个函数的方案。在计算机程序设计时,把需要调用的函数存放于内存中,然后把用于函数调用指令的地址保存在堆栈,通过这种方式,在之后的程序设计时可以通过堆栈中的函数调用指令,从而完成函数的调用。
2.3 掌握C语言的自增和自减运算符要点
在C语言表达式中,如果出现自增或自减运算符,一般比较容易改变表达式中变量值,或者弄错其值的计算。主要的改变如下:
(1)如果是前缀自增或自减,就是运算符在使用前自动增加或自动减少1;
(2)如果是后缀自增或自减,就是运算符在使用后自动增加或自动自减少1。
本文中,将前缀自增或自减,后缀自增或自减运算符作为两种不同的运算符,并且对于运算规则有如下约定:
(1)前缀自增或自减运算符的优先级要优于算术运算符;
(2)后缀自增或自减运算符的优先级小于赋值运算符,仅仅优于逗号运算符。
例如:如果i=3,则执行赋值语句j=++i;时是将i的值先变成4,再赋值给j,j的值变成4;而执行赋值语句j=i++;时是先将i的值赋给j,j的值是3,然后i的值再变成4。
在自增或自减运算过程中需要注意以下两个问题:
(1)如果一个变量出现在一个函数的多个参数中时,就无法将自增或自减运算符应用于这个变量,不然用本文约定的规则无法正确计算表达式的值以及输出结果。例如:如果i=3,则执行赋值语句printf(“%d,%d”,i,i*i++);时其输出结果是(4,12);而执行赋值语句printf(“%d,%d”,i*i++,i);时其输出结果是(12,3)。
(2)如果自增或自减运算符出现在逻辑表达式中,那么自增或自减运算有可能不被计算。例如:若i=1,j=1,k=1,在计算表达式++i||++j&&++k时,因++i非0,不再计算++j&&++k部分,直接得出表达式的值是1,所以说,计算表达式后,变量i的值是2,而j和k没有执行自增加运算,它们的值都是1。
3 计算机程序设计的规范性分析
程序设计的要点是根据程序使用语言不同而不同,但是,计算机程序设计的规范与计算机程序设计要点不一样,计算机程序设计的规范却是程序设计人员在进行程序设计时需要遵守的规则常识。目前为止,我国程序设计规范主要由两个部分组成,一部分是针对过程程序设计的,另一部分是面向对象程序设计的,在计算机程序设计时,设计人员通常不是直接在计算机上编写程序,而是会在草稿上进行程序流程的设计。计算机程序设计的规范就是指逻辑设计中使用的一个通用的工具和符号等,在最初的计算机程序设计时,程序设计人员通常会根据个人喜好采用一些符号和工具,但是,随着计算机程序设计的逐渐普及,并且越来越复杂,单纯的一个程序设计人员根本无法完成庞大复杂的程序设计工作,一个程序必须要由多个程序设计员各自承担一部分的程序设计,由他们共同完成。然而在这个多程序员配合的过程中,也会遇到一些问题,主要因为每个程序员都有自己偏爱的符号和工具,可能导致与其合作的其他设计人员不能理解,这就为程序设计到来了麻烦,致使庞大的程序设计任务无法顺利的完成,但是如果程序设计有了规范性的要求,就可以避免这种问题。所以说,计算机程序设计的规范性能够有效的提高程序设计的效率。
随着我国信息时代的来临,各种各样的软件逐渐问世,计算机软件也形成了自己独特的项目管理,假如没有规范性的程序设计,就有可能引起设计问题,导致了软件存在漏洞。特别是对于航天类软件设计,一旦软件存在设计漏洞或者出现其他的问题,就可能会带来灾难性的事故。在计算机程序软件设计时,一般都是按照规范性的步骤进行设计,下面举两个例子说明:
(1)例如系统的整体规划、语言编写、逻辑分析、软件测试,而工具和符号的使用贯穿着整个程序设计的过程。
(2)例如在某一个软件设计时,第一步就是根据软件的需要画出流程图,第二步是依据需求关系等条件,画出软件结构的层次图,第三步就是软件代码的编写。
但是,在实际的计算机设计时,很多时候都有不重视规范,流程图不标准、程序员之间沟通不到位等等,以上各种问题都会导致计算机程序软件的漏洞。所以说,在计算机程序设计上,只有加强规范制度的完善,加强对设计人员的培训,使其对规范有足够的重视,才能够促进程序设计的科学化、合理化。
4 结语
总而言之,运用语言的不同,那么计算机程序设计的要点也不一样。在计算机程序设计方面,要解决编程规范性的问题,并且保证规范的科学性、合理性,这就要求专业程序设计人员在这方面做出更多的努力,为计算机编程事业增砖添瓦。信息时代的不断进步,技术手段也越来越先进,计算机编程也必将越来越规范。
参考文献
[1]王义.汇编语言程序设计的要点和技巧[J].中国西部科技,2011(29).
[2]谢端.计算机程序的评价技术[J].惠州学院学报,2012(S1).
[3]尚维来.计算机程序设计类课程教学模式改革与探索[J].成功(教育),2013(11).
[4]吴小晨.关于程序设计教学中几个问题的探讨[J].天津市财贸管理干部学院学报,2012(03).
[5]张秀山,徐炳良,吴艳征.专用字符集译码逻辑的程序优化设计[J].海军工程大学学报,2011(06).
作者单位
关键词:计算机程序;教学;进步
一、前言
计算机程序教学就是针对学生的实际情况,对于教学当中的实际问题进行具体的分析,确保正常的教学内容和进度,提升学生的学习兴趣,为今后的学习,甚至是为了今后的工作打好基础。
二、计算机程序的特点
想要进行好计算机程序教学的探究,首先就应当透彻的了解计算机程序的特点,有指导性的学习,才能够找到探究的方向。
(1)计算机程序的定义
计算机程序(软件程序)指的是通过计算机每一步动作的指令(通过某种程序设计语言的编写,运行于某种目标体系机构上),这一指令可以由计算机等具有处理能力的装置执行一定具有代码化的程序序列,还可以说成为被自动装换成代码化指令序列。因此,可以知道一系列的指令组成了计算机程序,这一指令说的简单直白就是要去执行某种命令的勤务兵一样,会按照着特殊的方式执行。
(2)计算机程序的表达式
计算机程序有着清晰地表达思路,可以用一个简单的表达式进行表达:程序一算法+数据结构+程序设计方法+语言工具和环境.
(3)计算机程序的运行
了解完计算计程序的定义和组成,下面就让我们了解一下计算机程序是如何进行运行的,首先,一个计算机程序想要正常的运行,那么就需要用计算机加载程序代码,这样就能够将计算机程序化成为一个开始待命的状态:之后给计算机某种开始的指令,程序就会有序的启动。这样一个可以单独运行的计算机程序就叫做单独的可执行映射,然而计算机系统往往是由多个计算机程序组合在一起的。
三、计算计程序教学当中的问题
(1)缺乏学习兴趣
对于大多数的学生来说计算机程序是一个比较让人头痛的课程,缺少学习兴趣的必然结果就会使其产生厌烦情趣,进而与这门学科之间的距离越来越远。例如,在学生学习计算机程序的过程当中自然就将计算机程序当做一座大山,让人止步不前,面对学习当中的问题不能有效的解决,对于一些知识点只依靠死记硬背,显然,这一方法是行不通的。
(2)教师对学生的教学缺乏正确的引导
“没有学不好的学生,只有教不好的老师。”老师只学生学习生活当中的引导者,就像是药引子一样,在教学当中发挥着巨大的作用。然而在当今的教学当中学生缺乏学习兴趣会影响老师的教学心情,进而影响老师的教学质量,从而影响整体的教学质量。这就是一个恶性的循环,影响着计算机程序教学的发展。
(3)学会对学生进行适当的鼓励
中国几千年以来信奉的教学理念就是严师出高徒,作为师长就应当对学生板着个脸,这以经成为了一个惯性思维,存在于大多数教师的脑海当中。这就导致了学生对于教师产生一种天然的畏惧心理,这种现象会严重的损害教学质量。
在教学当中,老师缺乏对于权威的挑战性,对于教材当中的一些问题缺乏合理的处理能力,这就会导致教学内容不尽合理,导致学生不能够清晰地梳理学习课程,从而认为的增加教学难度。
(5)教学当中缺乏竞争机制
在中国的教学当中,一贯秉承着师教子学的习惯。这种平淡的教学理念会使得学生缺乏一种竞争意识。这就不能够积极的带动学生的学习积极性,所以这一现状需要及时的改变。
四、对于计算机程序教学当中具体问题的解决措施
(1)以兴趣为师
对于大多数的学生来说,首先应当充分的培育教学的兴趣,“兴趣才是最好的老师”,对于计算机程序的学习来说,具有一定的指导意义。这句俗语深刻阐释了一个道理:学习兴趣对一个人良好的学习能力及学习积极性的培养具有重要作用,将兴趣为师,能够让一个人的学习事半功倍。作为一名教师,在教学中要时刻用这句话提醒自己,与兴趣这位老师做好搭档,将提高学生的学习兴趣,提高学习积极性作为教学目标。计算计程序的特性使得学习过程容易让学生感到枯燥无味,这就需要老师能过结合计算机程序的特点,通过优化课堂教学鼓励学生学习计算机程序,使学生慢慢地对计算机程序产生浓厚的兴趣。结合计算机程序的抽象性与处于青少年时期的学生具有较强的想象力的特点,利用好兴趣这个催化剂,引导学生充分发挥其想象力。在这一过程当中可以借助一些教学模型引导学生的学习与理解。
(2)教师对于教学内容进行正确的引导
不同的学生在性格上和能力上有着差异,这是可以理解的。作为教师就是要正确的处理好不同性格学生的差异。因此,作为教师就是要根据不同性格的学生进行正确的引导。对于学习积极性不高,对于计算机程序缺乏兴趣的学生,教师应当经常性的对其进行心理工作,做心理工作的前提就是要准确的把握学生的心理,对症下药。对于基础薄弱的学生,教师可以通过特殊的方法进行疏导,使其认识到基础知识的重要性。比如可以给学生留一些难度从浅到深的习题,使其在做题的时候能够回归课本,这样将难易程度一次的续排,就能够使得学生在做简单题目的时候回归课本,在难度增加的时候能够利用多个基础知识对复杂问题进行串联,从而使其意识到基础知识的重要性。
(3)合理的沟通
对于当今的学生,尤其是对于青少年,大多数的处于叛逆期,这就需要广泛的交流沟通搭建起师生之间的桥梁,有效的解决师生之间的天然代沟。教师要时常的找学生进行有效的沟通,给学生灌输一种平等的思想,慢慢的培养平等的状态。教师对于学生的成绩不能够吝惜赞美之词,尤其是在计算机程序的教学当中,由于计算机程序这门学科的难度较大,因此,学生对于计算机程序学习当中的进步非常重视,老师的赞美能够给学生传递积极的信号,使其培养出能够学好计算机程序的信心,最终达到良好的教学目的。
(4)精心挑选教材,加强对于教材内容的研究
信息技术的发展速度非常的迅猛,这就会导致教材内容有时候不能够跟上科学的实际发展。还有就是在当今的社会当中各种教科书的编篡非常的丰富,但是有些教材并不能够适应学生的教学任务,所以在进行教科书的挑选时一定要十分的慎重,学校相关的负责部门一定要做到严格的甄别筛选,一定要选择出内容新颖,结构清晰,能够适应大多数学生进行学习的教科书。对于教科书当中的内容不能够以偏概全,要做到富有针对性,也就是对于不同专业的学生一定要进行有针对性的教学。对于课本当中分布不合理的教学内容一定要敢于革新。
(5)加强实践教学
加强对于学生的实践教学,尽可能的培养学生的动手能力。在上机课的过程当中教师应当积极的设计实验课的内容,在确保学生能够充分的发挥出其自身的创新思维的同时,还要带动起积极性,确保其能够有独立思考的时间和空间,“自己动手,丰衣足食。”同样适用于计算机程序教学的实践课程当中。在设计课程之前,备课教师一定要充分的考虑学生的实际情况,尽可能的设立有趣的实验内容,将计算机程序学科的特点充分的展示出来,用丰富的实验内容带动学生的学习积极性,使其本身能够产生浓厚的学习兴趣,化被动学习为主动学习。
(6)“游戏教学”
“游戏教学”指的就是通过一定的娱乐性特征带动课堂上的气氛。游戏本身具有趣味性,可以激发学生的兴趣,计算机程序的枯燥性,正需要这种方式去及时的改变。游戏的规则就充满着挑战性和竞争性,结合这一特点学生在游戏中可以充分发挥自己的聪明才智,学会竞争与合作,也收获了快乐。
五、结语
想要成为一名合格的教师,首先应当具有足够的耐心,使用正确的方向引导学生朝着正确的方向发展。当今社会的发展需要先进的计算机技术作为保障,因此培育出具有创新意识,敢打敢拼的计算机先进人才保障国家的长足发展非常重要。
参考文献:
[1]王玉龙.计算机学科教学计划1993[M].北京:电子工业出版社,1995.
[2]肖川.论浅谈新课改下的中职语言教学.资治文摘(管理版),2010,(7).
[3]詹自胜.浙江师范大学信息科学与工程学院案例教学法在计算机程序设计教学中探索与实践.
[4]吴俊明.新课程理念下的创新教学设计.东北师范大学出版社,2003.
[5]张淑蕴.项目教学法在中的实践探索.职业教育教学改革的理论探讨与实践.
【关键词】程序设计 创建型 结构型 行为型
1 引言
随着应用软件的发展和普及,其功能越来越多,程序开发工作量也急剧增大,因此亟需创建一种新型的计算机程序设计模式,提高编程效率和缩短软件开发周期,为此可利用先进的开闭原则、里氏代换原则、单一职责原则、依赖倒置原则和接口隔离原则,构建和研发程序开发模式。一个完整的程序设计模式包括四个基本要素,分别是模式名称、问题、解决方案和效果,其核心思想是通过增加相关的抽象层将变化部分从不变化的部分中分离出来,从而大幅度提升代码的复用性,增强程序代码的可维护性。当前,程序设计模式已经在面向对象、面向过程等软件开发中得到广泛应用,提高软件设计效率的同时也可以优化软件系统性能,更加有效地提高软件系统设计的灵活性。
2 新时期计算机程序设计模式
目前,计算机程序设计模式主要包括三个类型,分别是创建型模式、结构型模式和行为型模式,这些模式既适用于面向对象程序设计,也适用于面向过程程序设计。具体地,每一种程序设计模式的具体应用包括以下几个方面:
2.1 创建型模式
创建型模式与对象创建存在密切关系,其可以描述对象创建的详细过程,并且能够封装和隐藏对象创建细节,确保计算机程序代码不依赖于任何一个具体的对象,即使需要增加一个新对象,也不需要修改代码。创建型程序设计模式经过多年使用,已经得到了极大的改进,诞生了抽象工厂模式、单件模式。
2.2 结构型模式
结构型模式可以有效地描述和对象之间的组织结构,实现新型程序设计功能。结构型程序设计模式采用了继承机制组合类,比如适配器模式;结构型对象模式可以实现对象组装,比如组合模式、模式或装饰模式。结构型模式操作中,适配器对象是一个类的接口,并且能够通过转换成为另外一个接口;组合模式可以将每一个对象组合成为树型结构,表示一个部分―整体层次结构;装饰模式可以动态地增加对象功能;模式可以提供一个,该模式可以动态地控制对象访问程序。
2.3 行为型设计模式
行为型设计模式可以利用描述算法来分配各个对象之间的任务,其描述的不仅仅是类或对象的设计模式内容,还可以为各个模式之间提供通讯功能。目前常用的行为型设计模式包括观察者模式、状态模式、命令模式、策略模式和迭代器模式。行为型设计模式克服了程序运行时刻存在的复杂控制流,采用对象复合模式,可以完成单个对象不能够完成的任务。行为型设计模式中,命令模式可以将多个请求封装成一个对象,根据不同的请求针对客户内部的数据进行参数化。状态模式允许每一个对象的状态内部发送改变时不需要改变其自身行为;策略模式可以定义许多封装算法,将这些算法一个个地封装起来,使得这些状态可以有效地进行互换。
3 计算机程序设计新模式展望
计算机程序设计模式具有简单表达、快速复制等特点,因此已经在程序开发中得到广泛应用,并且得到了很多人的研究和改进,诞生了许多新型的计算机程序设计模式。未来计算机程序设计新模式包括以下几个发展趋势:
3.1 面向UI模式
随着移动通信、智能手机等新型“互联网+”软硬件资源的诞生,传统的软件开发已经逐渐向轻量级模式转变,因此为了提高智能应用终端软件的便捷性和友好性,程序设计新模式需要向UI模式转变,以人们的使用感知为基准,提高应用软件产品开发成效。
3.2 面向协作工作流模式
随着软件功能的增多,程序设计的内容也越来越多和复杂,设计团队的很多人需要协作才能够完成,因此为了提高程序设计的效率,计算机程序设计模式可以逐渐转向协作工作流模式,该模式结合了工厂模式和组合模式的优点,自顶向下构建应用软件功能流程,凸显了程序开发的强大效能。
3.3 集成设计模式
目前,软件开发模式集成了多种属性,这些属性可以有效地应用JavaEE、.NET、MVC、Struts等架构,构建一个多层次、轻量级、驱动型的应用程序组件模型,在处理底层的通信服务、函数调用时可以采取接口模式,简化Java、C++、C等程序语言编写的过程,更好地为智能终端、云端应用软件的开发、配置和执行提供支撑。同时这些架构的规范由微软、SUN、高通、华为、百度、阿里巴巴等公司联合制定,定义了一组可以重用的组件,利用这些组件可以像搭积木一样构建分布式应用程序,进一步提高软件开发的通用性。
4 结束语
随着计算机程序设计模式的应用和改进,其已经随着面向对象程序诞生了许多新型设计概念。优化计算机应用程序设计模式可以为开发人员带来很多好处,并且能够根据实际应用情况选择多种设计模式,彻底地改变传统软件开发模式存在的问题,比如软件复用性较低、软件错误较多等问题,同时可以利用人们的实际开况提高可移植性、健壮性和鲁棒性,进一步缩短应用软件开发周期。
参考文献
[1]孙晶,方英兰,张永梅,等.计算机类的程序设计课程教学模式探讨[J].电脑知识与技术,2015,11(32):101-102.
[2]杨新艳,苏爱玲.Java设计模式在基于MVC模式系统中的应用研究[J].计算机光盘软件与应用,2014,15(13):128-129.
[3]许涵斌,张学林,郑晓梅,等.一种基于结构查询的UML设计模式识别方法[J].计算机科学,2014,41(11):50-55.
[4]古辉,张炜星,金鹏,等.基于关联度和特征约束的软件设计模式识别方法[J].计算机科学,2015,42(02):173-176.
作者单位
计算机程序保护问题是过去20年之中各国知识产权法学界争论最多的焦点之一。争论点集中在应以什么方式保护它。作为一种新的技术进步成果,计算机程序既有别于传统的工业发明,也不同于文学艺术作品,但它同时又是重要的工业生产手段,并以一定的语言形式表达出来,故有人主张用专利法来保护它,有人主张用著作权法来保护,还有人建议制定专门法律保护它。(注:各方面具体理由参阅韦之:《试论计算机程序的法律保护模式》《法律学习与研究》1989年第3期第63—65页。)
在决定计算机程序保护模式问题上,头号程序生产大国美国一直处于主导地位。主要是考虑到著作权保护能自动产生,而且在世界上业已存在有以《保护文学艺术作品伯尔尼公约》(以下简称《伯尔尼公约》)和《世界著作权公约》为支柱的成熟的国际保护机制,故美国率先确定了著作权法保护计算机程序的主旋律,并不遗余力地在世界范围之内推行它既定的立场。在八十年代初中期,曾有一些国家,例如日本、巴西、法国等试图针对计算机的特点,为之设计特别的保护模式,结果在美国的压力和影响之下,纷纷改弦易辙,回到了美国所推动的大潮中来了。
当然,著作权法保护计算机程序毕竟有其相应的不足之处,故近年来有关用专利保护计算机程序的观点又趋活跃。(注:近年美国软件专利的授权量有所上升。单微软公司本身已经拥有了500项软件专利。 最近,欧盟委员会的内部市场和金融服务部门负责人john mogg表示, 欧盟委员会准备考虑修订《慕尼黑协定》,以便明文规定,计算机程序不再被排除在专利保护之外。see financial times,july 9 1998 p.22.
1998年7月9日笔者在慕尼黑与dietz谈及该问题时,他指出, 目前有许多专利律师支持这种主张,因为著作权保护自动产生,他们插不上手,而专利则要申请、审查,对他们来说是巨大的业务。不过他同时指出,专利保护应是一个更合适的办法,因为著作权不能保护程序的算法等构思,而这正是其创造性的关键部分。)但是,无论如何,著作权保护已成多年定论。
作为发达国家,完善本国法律尽快给计算机程序提供有效的保护符合其自身利益,故欧共体各国较快地走上了以著作权法保护计算机程序之路。(注:为此联邦德国于1985年6月24日修改了著作权法, 法国于1985年7月2日修改了著作权法,西班牙、英国、丹麦、意大利、荷兰等参阅grur int.1989.565.)
但是各国立法及其司法实践又无不打上了本国法律传统和经济利益的烙印,例如各国在保护期、获得保护的条件、保护范围等方面都出现了不少差别,其中,一些差异已经危害到了计算机程序共同市场的运营,因而这种进步实际上又同欧洲一体化的方向不尽协调。
为了在相关的高科技领域中为各国厂商和用户创造一个统一的法律环境,早在1988年欧共体委员会就了一份《著作权和技术挑战绿皮书》。其中在涉及计算机程序时建议采用著作权法保护模式。该建议在各方面引起了激烈的争论。
共同体委员会在1989年1月5日提出了一项“计算机程序保护指令草案”。(注:草案德文本载grur int.1989.564—573. )该草案力图在保护著作权和维持竞争自由方面求得平衡, 其中关于接口(schnittstelle)、允许反向工程(rueckwaertsanalyse )以及协调《指令》与《伯尔尼公约》的规定尤其引人注目。
欧洲议会对有关议案进行了研究并进一步完善其条款,它的立场在于建立一个开放的、 独立的欧洲计算机软、 硬件市场。 (注:vgl.lehmann,die europaeische richtlinie ueber den schutz voncomputerprogrammen,grur int.1991,327,328.)1990年7月欧洲议会认可了经修改的“指令草案”。接着委员会又根据议会的建议完成了新的修改稿,其中着重明确了如下问题:著作权法只保护计算机程序的具体形式而不保护其中包含的基本思想;合法用户使用程序疑问,包括备份复制、改正错误和维修(wartung)也得到明确回答; 兼容的前提条件规定得更严格,但同时也明文规定允许反向工程。
部长理事会于1990年12月13日接受了新的草案,草案经欧洲议会的法律事务委员会(legal affairs committee )修改之后获得议会批准,部长理事会于1991年5月14日最终通过了《指令》。 (注:《指令》德文本载grur int.1991,545—548.)
《指令》第10条要求成员国在1993年1月1日之前通过必要的法律或行政规定,将国内法与《指令》相协调。(注:但是,事实上大多数欧盟国家都在这个期限之后才履行国内立法的义务,其中德国于1993 年6月9日通过法律修正案,于同月24日生效。不过, 这对《指令》的作用没有太大的影响, 因为欧盟司法实践已承认了欧盟指令的直接效力。see a. raubenheimer, implementation of the ec softwaredirective in germany,iic no.5/1996 p.609,611—614.)
一、《指令》的基本原则
《指令》确定了以下原则:
1.将计算机程序视为“文学作品”。这个原则在起草《指令》之初就已为欧洲各国所普通接受(注:see h.c.jehoram,iic 1994 nr.6 p.821,828. )。此外强调的意义在于原则上所有传统著作权法保护的权利计算机程序开发者都能享有,从人身权到财产权,从保护期到国际著作权公约的适用等,计算机程序著作权
人都不应受到歧视。
另外, 《指令》明文规定, 法律只保护程序的表现形式(ausdrucksform),程序包含的思想或原则则不受保护。 通过这一规定,《指令》意在坚持著作权法保护的传统,即应促进思想的交流,而不是限制这种交流。(注:但是,对该原则历来有不同的看法。h.moritz,grur int .1991,697,702f,指出, “无论是德国的还是美国的立法者都没有规定,获得著作权必须以放弃作品内容为代价。”美国的计算机程序登记办法间接地说明了这个问题。在那里登记只要求交存前25页和后25页。如权利人能证明需要保密,甚至可以免除交存的义务。)
2.充分保护合法用户的利益。合法取得计算机程序的人有权装载、运行计算机程序,有权纠正其中的错误,有权采取必要的行为来测试程序的功能,他还有权利为了独立开发兼容软件而对程序进行反向工程,并为之进行必要的复制、翻译行为。
欧共体委员会在起草《指令》过程中有一个始终的意图,即尽可能充分地保障计算机系统的兼容机会。(注:vgl. lehmann, grur int.1991,327,329.)
3.不影响其他法律对计算机程序的保护。这意味着,著作权法保护和其他法律保护可以并行存在。例如合同法、专利法或竞争法等方面的保护。
但是《指令》强调当事人之间缔结的合同不得与《指令》中的重要内容(如第5条第2、3款、第6条)相抵触。
二、《指令》的主要内容
除了一个篇幅相当长的序言,《指令》总共只有十一条。序言之中阐述了制定《指令》的背景和基本原则,《指令》各条则分别规定了相关的具体制度。现分述如下:
1.客体和主体
第1条第1款明文规定,计算机程序是《伯尔尼公约》中所指的文学作品。计算机程序除了包括程序本身而外,还包括开发程序过程之中的设计资料(entwurfsmaterial)。
同条第 3 款规定, 受保护的计算机程序必须是“个人作品”(individuelle werke),即它必须是开发者自己的智力创作的成果。除此以外,不能设定其他保护标准,例如质量或审美方面的特征。该规定对《指令》而言具有核心意义。因为协调各国对计算机程序受著作权法保护所的不同的前提条件几乎是当初欧共体制定《指令》最重要的动因。在欧共体范围内对作品受保护的条件历来有三种标准。其一以英国、爱尔兰为代表,它们要求的作品“独创性”是指作品是作者自己完成的而不是拷贝别人的;其二是法国、意大利、比荷卢等几乎所有的欧洲大陆国家,它们要求的“独创性”是指作品必须是作者个性的表达,这种创作水平的要求在实践中很低;而第三则是德国的严格要求,它要求一定的创作高度。(注:see h.c.jehoram,iic 1994,821,828—829. )联邦德国最高法院曾在inkasso—programm(注:vgl.cr 1985 s. 22ff.)和betriebssystem(注:vgl.bgh vom 4.okt.1990,cr 1991,s.80ff. )两案的判决中要求计算机程序的创作必须高于普通水平程序员的技能才受著作权法的保护。
《指令》第1条第3款实际是采取了居中的标准,这表明德国必须放弃其过去奉行的高标准要求。
《指令》关于“独创性”的定义对欧共体后来的指令也具有特别的指引作用,它实际上全面影响了正在成形的欧盟著作权法(注:see h.c.jehoram,iic 1994,821,829.)。 例如在后来的《保护期指令》的第6条(对照片的要求),及《数据库指令》第3条第1款都有类似的规定。
第1条第2款规定,受保护的只是计算机程序的表现形式,而不及于程序的基本思想和原则、逻辑、算法以及编程语言。
2.主体
《指令》第2条规定,计算机程序的作者是创作程序的自然人、 法人。法人是否能成为作者是大陆法系和英美法系著作权的重要区别之一,《指令》对此没有下结论,任由国内法来规定。
如果程序为多个自然人共同创作,则著作权由他们共同享有。
如果程序是雇员在完成本职工作或雇主指令过程之中创作的,则雇主有权行使所有的经济权利。双方当事人另有约定者从其约定。
在《指令》的草案中,原本有关于因委托创作和计算机自动编程产生的程序著作权归属的规定,但因担心和《伯尔尼公约》相矛盾而被理事会删除。这意味着这种情况将由当事人通过具体合同来约定。(注:vgl.lehmann,grur int.1991,327,330.)
3.程序著作权的内容及其限制
根据《指令》第4条,计算机程序著作权人享有下列权利:
第一,复制权。专属权利人的复制行为包括长期的复制和暂时的复制、完整的复制和部分的复制,而且是以任何手段或形式完成的复制。复制甚至还包括在演示、运行、传送或储存计算机程序的过程中出现的复制行为。但是对于“装载(laden)、演示、运行、 传送或存储”行为是否属于著作权法意义上的复制,《指令》并没有直接回答,而是由各国国内法来定义。从理论上来说,运行、计算本身不应被视为复制,但是将程序装入(programmeingabe)机器本身则已经属于复制。 同样,任何形式的转存,也都被视为复制行为。因为,这些行为已直接触及了权利人的经济利益。(注:vgl.lehmann,grur int.1991,327,330 —331.)
第二,演绎权。即以编译、加工、整理等方式演绎计算机程序以及复制演绎所获结果的权利。
第三,发行权。即以任何形式公开地扩散计算机程序的原件或复制件以及出租程序的权利。
在这里,《指令》坚持了著作权权利耗尽原则,即一份程序复制件合法售出以后,它在共同体市场内的进一步流通便不再受权利人的限制。由于强调的是共同体市场内的耗尽,因而对维护整个欧盟市场内的货物自由流通有致关重要的意义。这个原则是欧共体法院(ecj )通过一系列判例确定的。(注:see h.c.jehoram,iic 1994,821,822. )
该条规定率先在共同体范围内确立了著作权人的“出租权”,该权利不受耗尽原则的影响。但是,对普遍存在的公共图书馆出借计算机程序现象,《指令》仍无明文规范。
《指令》第8条第1款规定的著作权保护期和《伯尔尼公约》第7 条第1款、第3款和第5款、第8条的规定完全一样,即为作者有生之年加死后50年。匿名、假名发表的程序,以及依国内法法人被视为作者的程序的保护期为从合法公开之时起50年。(注:原本指令草案曾规定保护期为从程序生产完成之日起50年。vgl.lehmann,grur int.1991,327, 335.)
考虑到德国著作权保护期特别长,即有生之年加死后70年,《指令》第8条第2款规定,在欧共体协调著作权保护期方案生效以前,成员国可以保留其现有的较《指令》规定更长的保护期。
根据《指令》第5条的规定,下列行为无需经权利人的同意:
第一,在无特别约定的情况下,合法用户为了正常使用程序(包括纠正其中的错误)而复制和加工计算机程序;
第二,合法用户使用程序过程中制作必要备份复制件;
第三,程序的合法用户为了了解程序中的思想和原则对之进行观察、分析或者测试。
《指令》对
上述三类行为的立场是不一样的,它允许当事人双方对第一类行为进行自由约定,这表明合同可以对之加以限制。当然这种限制性约定也不是任意的,它不能违反民事法律的基本原则和卡特尔法的规定。至于第5条第2、3款以及第6条规定的行为却不得以合同加以排除,否则合同无效(《指令》第9条第1款第2句)。
《指令》第6条是关于反向工程的条款, 也是立法过程中争议最为激烈的条文,(注:据学者介绍,欧共体历史上还没有任何一个具体条文的内容曾经象该条那样引起国际上如此广泛的院外游说活动。 vgl,lehmann,grur int.1991,327,333.)作为妥协的结果, 其最终文本的措辞尤其复杂。该条明文规定,为了获得必要的信息来独立开发出兼容的程序,合法用户可以对程序进行复制和编译,而无须经过权利人的同意。但该条同时对用户的行为作了如下限制:
(1)只有合法用户或“以合法用户的名义”才能进行反向工程;
(2)“必要的信息”不能从其他途径轻易取得;
(3)只能对生产兼容程序所必要的那部分程序进行反向工程;
(4)通过反向工程获得的信息不能用于非生产兼容程序的目的,不能扩散给对开发兼容产品不必要的第三人,也不能用于开发、制作或销售表达形式类似或有其他著作权侵权因素的程序;
(5>:请记住我站域名/< )反向工程不得不合理地损害权利人的正当利益或妨碍计算机程序的正常使用。
单单从条文行文来看,这更多地是一种对用户的限制性规定。(注:“我尚未听说所谓反向工程规则是否已被证实具有什么实践意义。”see h.c.jehoram,iic 1994 no.6p.821,p.832. dietz于1998年7月9 日在慕尼黑与笔者交流时亦持同样的怀疑态度。)但是,它最根本的价值仍在于为开发兼容产品和竞争开绿灯。(注:这从《指令》第9条第1款第1句的规定中亦得到清晰的体现。)难怪,《指令》一经通过, 就有代表计算机厂商利益的律师指出,反向工程有被滥用的危险。他们希望法官通过司法确立如下立场:第6 条规定的各种条件应由从事反向工程的当事人来举证,而不应由程序权利人来举证,否则,权利人几乎不能捍卫他的利益。(注:vgl. h. moritz,syndikus, ibm, stuttgart,die eg-richtlinie vom 14.mai 1991…,grur int.1991,697,701f.该作者在705页还指出, 认为在英美国家可以根据“合理使用”证明反向工程的合法性的观点是错误的。无论是在英国还是在美国,从未有过认为出于商业目的进行反向工程系合理使用的判决。)
兼容的产品即是“竞争产品”。对于是否允许为了开发竞争性兼容产品而进行反向工程,共同体委员会指出:独立开发出来的程序可以和任何程序兼容,即使是采用反向工程来实现兼容也是允许的。但是,如果不是为了实现兼容目的,而是仅仅为在开发竞争产品过程中省事省钱而进行反向工程则是不允许的。(注:zit,nach lehmann, grur int.1991,327,334.)
4.特别保护措施
《指令》第7条规定,在不影响第4、5、6条的情况下,成员国应在国内法中规定适当的措施来制裁下列行为:
第一,明知或应知有关程序系非法复制品而加以传播者;
第二,明知或应知有关程序是非法复制品而为营利目的占有者;
第三,传播或为营利目的占有专用于擅自破坏或回避计算机程序加密机制的设备者。
另外,成员国得规定对任何未经许可的程序复制件的扣押措施,以及对上述解密设备的扣押措施。
本条规定部分仍属著作权法保护的内容,但更多地已超出了该法律的思路,而属于欧洲大陆竞争法的保护措施。依英美法律的视角,则是对所谓“间接侵权”(secondary infringement)的制裁。其别值得注意的是,《指令》允许扣押、没收所有的盗版程序。这个规定至少从理论上来讲对最终消费者也适用。如果各国普遍通过国内法贯彻这样一种立场的话,将形成对传统著作权法救济手段的重大修正,从而极大地强化了对权利人的保护。
三、《指令》的特征
归纳起来,《指令》有如下突出特点:
1.妥协和实用主义
在欧洲协调各国法律,又是针对计算机程序这样的敏感问题,自然不是一件轻而易举的事情。妥协和实用主义为《指令》的出台创造了良好的条件。这种精神亦充分体现在其条文之中。例如,对大陆法系和盎格鲁·撤克逊法系对作者身份的认识、法人能否成为作者的断,《指令》并不更多地纠缠,而是由各国依国内法处理,同样,在有关反向工程的条文之中亦充分反应出了立法者的灵活性。
至于对非著作权法救济手段的规定(第7条), 则更是实用主义的典范。这在重视理论逻辑性的欧洲,的确不轻易见到。
2.不排斥其他法律保护措施
《指令》第9条第1款规定:“本《指令》的规定与有关专利、商标、不正当竞争、商业秘密和半导体产品的法律规定以及合同法的规定并不矛盾。”
从客观来看,计算机程序可以受到上述多种法律的保护,这些保护有可能同时并存。从主观上来看,程序开发者有权利选择对自己最有利的保护,这种保护可能是著作权法,也可能是其他法律。笔者认为,当不同的法律制度发生冲突时,应该按照对创造者有利的原则来解释有关规定。例如,如果有关程序属于权利人的商业秘密,权利人应可以在相关契约中设定更严格的使用条件, 甚至可以禁止反向工程。 (注:25h.moritz,grur int.1991 697,702却指出,在这种情况下权利人是否应该在合同中声明不采用著作权法保护,仍是个问题。)
3.强化保护机制
为了保护计算机程序开发者的正当利益,《指令》对传统著作权法中的合理使用制度作了很大的限制。各国法律广泛认可的个人使用行为在计算机程序著作权法律制度中已不再属于合理使用。
特别是《指令》第7条将一些不属于著作权法保护范围的手段也纳入新的体系之中,更使得对计算机程序的保护远比其他文学艺术作品要强烈。(注:根据《指令》修改后的《德国著作权法》第69f条第1款更取消了“为商业目的”的限定词,赋予权利人要求销毁任何人占有的任何非法软件的权利。)
4.简明扼要
《指令》全文只有11条,其更多集中在一些重要的问题上,对于下列问题,则未有规定:(1 )著作权法中当然适用于计算机程序保护的内容,没有必要重复;(2 )对于各国那些对共同体市场影响不大的国内法之间的差异也不加排除,而允许其沿袭下去;(3 )对于一些具体规定留待国内法来落实,《指令》只提出原则要求。
四、对中国的借鉴意义
中国著作权法制度诞生于本世纪九十年代初(注:《中华人民共和国著作权法》自1991年6月1日起施行,以下简称《著作权法》。),因而能在各方面较充分地照顾到国际著作权法的新潮流,保护计算机程序便是其表现之一。
从八十年代中期起,有关部门即进行计算机程序保护的调研和立法工作,这几乎与著作权法起草工作同步,因而国际上关于计算机程序保护的讨论,也在相当大程度上影响了中国立法者的思路。1991年6月4日国务院,同年10月1 日生效的《计算机软件保护条例》(以下简称《条例》)在采取著作权法模式方面完全吻合了国际的大趋势,但是在权利保护期、设立登记制度等方面也体现出了一定的个性。
总体而言,《条例》的规定还是比较粗糙的,它同欧共体的《指令》相比,还有如下重要的差异值得注意:
第一,复制权的定义问题。《条例》对复制的定义十分简单,即“把软件转载在有形物体上的行为”(《条例》第3条第5项)。到于“暂时复制”是否属于复制,仍缺乏明确的界定;相比之下,如前所述,《指令》对复制的定义要严格得多。
第二,“当事人意思自治”问题。《指令》在利用该民事法律基本准则方面有许多独到之处。例如,其第2条第3款关于职务作品的权利归属问题,规定得相当简明,又如对委托作品等更删除了草案中原本
的规定。而《条例》第14条关于职务软件著作权归属的规定则太复杂,加之又不能同《著作权法》相应的第16条吻合,故实践中引起种种歧义,效果并不好。 (注:参阅韦之:《著作权法原理》, 北京大学出版社1998年4月第1版,第163—164页。)
当然,《指令》对契约自由也作了明确的限制,其第9条第1 款第2句规定违反某些原则的约定无效。在《著作权法》和《条例》中却都缺乏类似的条文,因而在中国软件著作权制度中契约自由应被约束在多大程度内亦是个问题。
第三,侵权软件的持有问题。应该说在该问题上,《条例》和《指令》的立场是相似的。《条例》第32条第1 款亦使权利人得要求持有侵权软件者销毁侵权软件,“若所持有的侵权软件不销毁不足以保护软件著作权人的权益时”。差别只是在于《指令》第7 条限定在“为商业目的而持有”的范围之内。
这种规定的执行固然不无问题,但是它对强化计算机程序著作权显然是十分有益的。遗憾的是,目前正在准备过程中的《著作权法》修正案以放弃了这种立场。(注:参阅国家版权局1998年1月8日,《关于修改著作权法的被告》(国权〔1998〕1号)附件1-《关于修改著作权法的说明》,第8页。)
第四,维护技术保护手段。作为高新技术,计算机程序的自我加密措施对维护开发者的利益有着不可低估的作用,是对法律保护的重要补充。虽然,从严格意义上来说加密技术与著作权并不相关,但是《指令》采取了十分灵活的立场,维护这种技术保护手段,对非法的解密设备的使用和传播加以控制。类似的规定在《著作权法》和《条例》中都未曾出现,若从发展的方向来看,是可以考虑加以借鉴的。
第五,反向工程问题。如前所述,对该问题的创造性规定是《指令》的突出成就之一。而在中国的法律中,则采取了回避的态度,因而也给实践留下了许多疑问。从中国软件产业发展的实际需要来看,澄清该问题,为竞争创造更透明的环境是十分必要的。在这方面,《指令》第6条提供了很好的借鉴资料。因为,欧洲和中国一样, 相对于美国来说,软件生产力都较弱小,故在鼓励竞争(包括通过模仿来实现竞争)、开放市场方面有相同的利益。(注:目前,中国学术界对反向工程多持认可态度,参阅韦之:《著作权法原理》,第167 页;《清和法学研究》第3卷第2号(1997年3月),第137,147页。)
结束语
欧共体由于其完善的法律传统和广泛的司法实践,加之立法过程中充分吸收了各国的立法成就,因此《指令》创设的是一个成熟、严谨的法律制度,它在协调欧洲各国的国内法的同时,将计算机程序著作权保护水平提高了一大步。它为自由竞争和计算机工业的开放创造了法律环境。(注:vgl,lehmann,grur int.1991,327,336.)特别是,《指令》维护了反向工程的合法性,为其他国家在相应问题上的立法提供了重要的榜样。
当然,《指令》并没有为所有的问题都提供了答案,其中某些规定也仍然受到争议。这进一步表明,用著作权法保护计算机程序虽然已是定论,但是完善这种保护仍是一个漫长的过程。
《指令》颁行以来的实践表明,其不仅对欧盟各国,而且对其他非欧盟国家,如波兰等东欧国家相应的立法也产生了直接的影响。对中国来说,它同样有着重要的借鉴意义。中国应充分关注其司法实践,逐渐吸收其中的成功因素。
关键字:计算机,工程应用,程序,开发
计算机程序或者软件程序(通常简称程序)是指一组指示计算机每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上。打个比方,一个程序就像一个用汉语(程序设计语言)写下的红烧肉菜谱(程序),用于指导懂汉语的人(体系结构)来做这个菜。通常,计算机程序要经过编译和链接而成为一种人们不易理解而计算机理解的格式,然后运行。未经编译就可运行的程序通常称之为脚本程序。
为了一个程序运行,计算机加载程序代码,可能还要加载数据,从而初始化成一个开始状态,然后调用某种启动机制。在最低层上,这些是由一个引导序列开始的。在大多数计算机中,操作系统例如Windows等,加载并且执行很多程序。在这种情况下,一个计算机程序是指一个单独的可执行的映射,而不是当前在这个计算机上运行的全部程序。目前中国国内的计算机语言应用认证主要有微软的MCSD、IBM以及SUN的SCJP,常用计算机语言主要包括C、C++、Java、Cobal、Fortran、Pascal等等,但除了Java可广泛应用于不同平台,其他语言都受到操作平台类型的限制,使编程工作复杂化,重复编程工作人员的劳动,降低了效率。因此Java也就越来越多地受到重视,被广大计算机工作者接受。特别是其基于internet的操作性,更使其方便地在网络上传播应用,加之其执行速度比其他开发语言要快,更适应现代经济发展的需要。我们可以乐观地预计Java不久将成为世界上最普及的计算机程序开发语言。编写一个程序去生成另外一个程序的过程被称之为原编程(Metaprogramming)。它可以被应用于让程序根据给定数据生成代码。单一一个程序可能不足以表示给定数据的所有方面。让一个程序去分析这个数据并生成新的程序去处理数据所有的方面可能会容易一些。Lisp就是一例支持这种编程模式的程序语言。
在神经网络里储存的权重是一种数据。正是这些权重数据,跟网路的拓扑结构一起,定义了网络的行为。人们通常很难界定这些数据到底表示什么或者它们是否可以由程序来代替。这个例子以及跟人工智能相关的其它一些问题进一步考验程序和数据的区别。
编写程序是以下步骤的一个往复过程:编写新的源代码,测试、分析和提高新编写的代码以找出语法和语义错误。从事这种工作的人叫做程序设计员。由于计算机的飞速发展,编程的要求和种类也日趋多样,由此产生了不同种类的程序设计员,每一种都有更细致的分工和任务。软件工程师和系统分析员就是两个例子。现在,编程的长时间过程被称之为“软件开发”或者软件工程。后者也由于这一学科的日益成熟而逐渐流行。
因此,如今程序设计员可以指某一领域的编程专家,也可以泛指软件公司里编写一个复杂软件系统里某一块的一般程序员。一组为某一软件公司工作的程序员有时会被指定一个程序组长或者项目经理,用以监督项目进度和完成日期。大型软件通常经历由系统设计师的掌握的一个长时间的设计阶段,然后才交付给开发人员。牛仔式的编程(未经详细设计)是不为人所齿的。
两种当今常见的程序开发方式之一是项目组开发方式。使用这种方式项目组里每一个成员都能对项目的进行发表意见,而由其中的某一个人协调不同意见。这样的项目组通常有10个左右的成员,这样做是为了便于管理。第二种开发方式是结对开发。在生活中,你通常只知道「喔!原来这网站是用Java写的、「喔!原来这是手机的JavaGame。若自技术层次拆解,JavaTechnology可简单区分为Java程序语言(language)与Java平台(platform)。
Java程序语言所指是撰写程序所需的语法与词汇,像学习中、英文,有一套基本的单字与语法,只要利用单字组出符合语法的句子,这就是Java程序的基础。
至于Java平台,如大家熟知的,Java共分三大平台:J2ME、J2SE和J2EE,分别专精于嵌入式行动平台、标准平台和企业应用平台,除了共同的类别函式库(API)之外,每个平台也有其特定的API,供程序设计师们开发使用。
随着开发工具陆续推出,降低了Java开发技术门坎,要写出正确无误的Java程序不是太难的事情,但论及系统性的Java软件开发,那可就不是一件轻松事。开发大型项目有三项非常重要的因素,将会影响整个项目的进度与质量,分别是人(people)、流程(process)与技术(technology)。
这三个要素是环环相扣的,任何一项要素的成败都会影响另外两个要素,与相关开发人员的素质,这不是一项简单容易的任务,但有好的方法可以完成。真正困难的不是Java程序语言或是API的使用,而是整个对象导向程序设计的概念。也标榜与Java有着类似的对象导向架构,除执行平台不同、API的名称不同,本质与Java可以算是孪生兄妹,在渐进式的开发过程中,透过不断的提炼(refine),可趁早发现问题且找出解决方法,也确保每一工作项目的进度。不过,在架构(Architecture)方面,RUP确实着墨较少,而架构优劣也是足以影响软件系统成败的关键因素。
QoS(QualityofService)或是SLR(ServiceLevelRequirement),我想是每个系统最基本的要求,它包含可用性(Availability)、可管理(Manageability)、可信赖(Reliability)、可扩充(Scalability)和安全性(Security)等条件。
举例而言,先前某家外商银行因系统设计不良而导致外人可轻易猜出参数设定的方式,直接入侵系统窃取消费者隐私数据;也有某家电信业者为没考虑系统的负载量,而导致在耶诞、跨年等重要节日时,涌入大量简讯的尖峰时期造成服务塞车、系统当机。虽说不同的程序技术皆有其满足QoS的方法,相较之下,Java对上述五大项功能的支持应该算是最为丰富。如在J2EE的设计模式(DesignPattern)中,几乎都是为解决此几项问题而设计,之后再配合程序语言本身的强固性,开发而成的企业级应用系统,我想应可满足客户对于QoS的严格要求。先看研发人员这部分。我想,要满足技术与流程两项因素,关键都是人。如何选择对且合适的技术,要有专业人才;如何有效管理流程?如何规划满足AMRSS五项需求的系统架构?这都是需要有经验的管理人才及架构师(architect)。当然,能不能写出漂亮且可完善运作的程序代码,也是需要有一定水平的研发人员。软件开发工具有很多种,现在常见的软件一般用DelphiVBVC++C++BuilderPB等开发的,你其它有一个概念不要混淆,一般开发工具叫开发集成环境,而这些开发集成环境是基于某种语言,一种语言可能有多种开发集成环境,如C++就是VC++与C++Builder等,一个软件项目研发的设计流程是怎样的呢?以通常标准的设计方法为例。第一个步骤是市场调研,技术和市场要结合才能体现最大价值。第二个步骤是需求分析,这个阶段需要出三样东西,用户视图,数据词典和用户操作手册。用户视图是该软件用户(包括终端用户和管理用户)所能看到的页面样式,这里面包含了很多操作方面的流程和条件。数据词典是指明数据逻辑关系并加以整理的东东,完成了数据词典,数据库的设计就完成了一半多。第三个步骤是概要设计,将系统功能模块初步划分,并给出合理的研发流程和资源要求。作为快速原型设计方法,完成概要设计就可以进入编码阶段了,通常采用这种方法是因为涉及的研发任务属于新领域,技术主管人员一上来无法给出明确的详细设计说明书,但是并不是说详细设计说明书不重要,事实上快速原型法在完成原型代码后,根据评测结果和经验教训的总结,还要重新进行详细设计的步骤。第四个步骤是详细设计,这是考验技术专家设计思维的重要关卡,详细设计说明书应当把具体的模块以最'干净'的方式(黑箱结构)提供给编码者,使得系统整体模块化达到最大;一份好的详细设计说明书,可以使编码的复杂性减低到最低,实际上,严格的讲详细设计说明书应当把每个函数的每个参数的定义都精精细细的提供出来,从需求分析到概要设计到完成详细设计说明书,一个软件项目就应当说完成了一半了。换言之,一个大型软件系统在完成了一半的时候,其实还没有开始一行代码工作。第五个步骤是编码,在规范化的研发流程中,编码工作在整个项目流程里最多不会超过1/2,通常在1/3的时间,所谓磨刀不误砍柴功,设计过程完成的好,编码效率就会极大提高,编码时不同模块之间的进度协调和协作是最需要小心的,也许一个小模块的问题就可能影响了整体进度,让很多程序员因此被迫停下工作等待,这种问题在很多研发过程中都出现过。编码时的相互沟通和应急的解决手段都是相当重要的,对于程序员而言,bug永远存在,你必须永远面对这个问题,大名鼎鼎的微软,可曾有连续三个月不发补丁的时候吗?从来没有!第六个步骤是测试测试有很多种:按照测试执行方,可以分为内部测试和外部测试,按照测试范围,可以分为模块测试和整体联调。按照测试条件,可以分为正常操作情况测试和异常情况测试。
计算机程序 设计教学 抽象概念
从开始工作到现在,我已经承担了五年的中职计算机程序设计教学,这期间,教授过C语言程序设计,也教授过程序设计,在教学中,除了使用案例教学、项目教学等模式实施教学外,在课堂上,我尝试使用类比和举例的方法,将程序概念同现实生活建立联系,具体说,就是把程序中的概念和原理跟现实的生活逻辑建立关联,让学生通过生活逻辑的引导去理解程序概念及逻辑,帮助学生“消化”程序中的抽象概念,收到了不错的效果。
在讲解程序设计语言的时候,我拿自然语言跟计算机程序设计语言做类比。我这样对学生讲:自然语言,比如汉语、英语等,这是人与人之间交流使用的工具,而我们操作计算机,是利用计算机这个工具帮助我们做事情,如何让计算机知道我们需要它做什么事情,这就要跟“他”交流,程序设计语言就是我们与计算机交流的工具。自然语言有词汇和语法,同样,程序设计语言也有,这些词汇和语法就是所谓的“关键字”或“保留字”及语句格式,而这些东西我们不能穷究“为什么”,这就像交通规则,是以法律法规的形式规定好的,我们记住并遵守就可以了。通过这样的讲解,学生大都能理解比如“程序设计语言”、“关键字”、“语法格式”等在程序设计中出现的抽象概念。
在讲解变量的时候,我这样举例:对变量命名,就像小时候父母给我们起名字,有约定俗成的规定。姓在前,辈在中间,单姓不能多于三字,复姓不能多于四字,还不能与长辈重名,更不能包含一些含贬义的词汇(每逢讲到这里举例子时,学生都会哈哈大笑,很好地活跃了课堂气氛)。对于变量声明,我给学生举夏天在公路上晾晒麦子的例子。每到收麦季节,农民都会到公路边晒麦子,为了避免两家的麦子掺和在一块,每家都在公路边划出一块区域,有的还用红漆书写“占”字。这样讲,学生会立即联想到这样的场景。他们就会很容易领会,声明变量就像是“占地”,只不过,这里是在内存中“占地”。
在讲分支结构的时候,我会在课堂上“即兴发挥”,设置一个问题让学生站起来回答,然后我说:某某同学,如果(着重强调)你能回答这个问题,你就坐下;否则(着重强调),你得继续站着听课。讲多重if的时候,我会列举做饭或超市购物的例子;讲循环的时候,我给学生例举旷操罚绕操场跑步的例子和驴拉磨的例子,学生会笑逐颜开。
在讲授面向对象的程序设计时,学生最头疼的就是“对象”,“类”等概念的理解。上课时,我给学生们举某某人和人类的例子,讲“物以类聚,人以群分”,讲消息和事件的时候,我先举实际生活中放鞭炮(“点燃导线”是“消息”,“爆炸”是“事件”,“消息”导致了“事件”的发生)的例子,然后再给大家列举实际计算机操作(单击“确定”按钮关闭对话框等操作实例)的例子,进而引导学生理解教科书上的概念直至案例的编写。
在课堂教学中,我会列举很多这样的例子,帮助学生理解其中一些晦涩难懂的概念和逻辑。人们常说“艺术来源于生活”,我觉得,学问也是一门艺术,学问也是跟现实生活相通的,所以,我在备课中积极思索怎么样使用生活中的实例和思维来帮助学生理解书本的知识,以达到良好的教学效果。
总之,举例和类比作为一种教学手段,如果运用得当,可以充分调动学生的兴趣和积极性,引导他们积极思考,深入理解,启发他们领悟抽象知识和现实生活之间的联系,有效的促进学生的学习。由于程序设计具有很强的抽象性,非常适合在教学中运用举例和类比的教学手段,解决学生难于理解抽象概念的问题,使学生掌握程序设计这门基础课程。陶行知先生说过一句话:“教师之为教,不在全盘授予,而在相机诱导。”针对具体的学科教学,采用合适的教学方法去引导学生学习,这是教师的责任,更是我们积极探索的内容。
参考文献:
[1]魏书生.魏书生与民主教育.
[2]肖川.论浅谈新课改下的中职语言教学.资治文摘(管理版),2010,(7).
[3]詹自胜.浙江师范大学信息科学与工程学院.案例教学法在计算机程序设计教学中探索与实践.
[4]吴俊明.新课程理念下的创新教学设计.东北师范大学出版社,2003.
[5]张淑蕴.项目教学法在《Visual BASIC》中的实践探索.职业教育教学改革的理论探讨与实践.
1)计算机程序设计类课程体系设置不够合理
目前,不少高校计算机专业程序设计类课程的设置,大一新生一进校,第一学期就开设C语言程序设计,或者C++程序设计,其理由是认为学生在中学阶段进行过信息技术教育和简单的程序设计基础训练。而结果呢,由于中学阶段的信息技术教育在很多地区特别是农村地区得不到重视,或者没有全面的开展实施,学生刚入大学时对计算机的认识和理解不够深入,就进入了C语言或者C++语言程序设计的学习,其教学效果很不理想。因此,学生对后续课程如《数据结构》、《Java程序设计》等课程的学习也将受到很大影响,显得很吃力,而且学习效果也比较差。
2)教育理念和教学方式不够恰当
程序设计类课程的教学,如C语言程序设计或者C++程序设计,很多教师注重基本概念和语言的语法规则的教学,在相应的课程实验中也只是对基本语法的训练,而忽略了对学生分析问题的方法、思想的培养,学生的创新能力不强。因此,学生在学完一门程序设计类课程后,往往感觉到能阅读程序,能读懂程序,能理解别人写的程序,可让自己动手来编写一个稍微复杂一点的程序,却显得很茫然,无从下手。
3)教学内容的组织和安排不够符合学生的认知规律
学生对程序设计类课程的学习,很大一部分同学是:翻开教材,课本中的程序个个都会,能看明白;闭上书,自己来重写一下这些程序,错误百出。其原因还是由于教师在教学过程中没有把握住学生的认知规律,学生对课程知识理解不够牢固[2-3]。如《C语言程序设计》课程的教学过程中,指针这一部分知识是安排在教学内容的靠后章节讲授,学时短,应用少,但指针却是这门课程的重点,后续课程中的应用很多,学生对这一知识掌握不好,势必影响后续《数据结构》等课程的学习效果。
4)教材建设缺乏针对性,系统性
目前,很多普通高校计算机专业都还没有编写适合自己学生的教材,基本上都是使用高校计算机专业规划系列教材,而程序设计类课程的教材很多,每本教材都有作者自己的内容安排和章节设计方案,而且教材的选用也不固定,不同的授课教师常会选用不同的教材,这样往往会有在程序设计类课程群的教材使用中,出现知识点和讲授内容的重复、教材的难度与学生的知识水平不符等问题,教材建设针对性和系统性差。
2计算机程序设计类课程教学改革方法及措施
1)调整计算机程序设计类课程体系
针对在现行的课程体系中,学生由于C语言或者C++程序设计的学习效果不理想,而导致对后续课程的学习受到很大的影响,应将计算机专业程序设计类课程教学体系和课程设置进行调整。在大一第一学期开设《计算机导论》课程,目的是让学生对计算机学科和计算机领域的研究内容有初步的认识,了解并掌握如数据在计算机中的存储与表示、计算机工作原理、计算机基础知识,计算机硬件系统,计算机软件系统,多媒体技术基础,通信与网络基础等方面的知识。[4]在此基础之上,大一第二学期开设《程序设计基础》课程,讲授内容可以是C语言程序设计或C++程序设计,目的是进行程序逻辑训练,让学生掌握程序的基本结构和程序调试基本技能。在学生掌握了基本的程序设计基础之后,再开设《高级程序设计技术》课程,重在培养学生程序设计方法和思想,其教学内容是程序设计中的一些高级处理技术,如数据类型、指针的高级应用,文件的操作,图形界面与动画设计,键盘与鼠标操作,以及一些典型算法应用。在学生掌握了程序设计能力和程序设计思想方法基础上,再先后开设《数据结构》、《Java程序设计》课程。《数据结构》课程是培养学生根据实际问题的要求有效地组织、存储、处理数据的能力;《Java程序设计》贯穿面向对象程序设计新理念,让学生掌握面向对象程序设计思想和技术。在高年级,针对不同的专业方向,还可开设VC++、C#、LINX等程序设计类选修课程,提高学生的编程水平和实践能力,以满足社会对软件人才的不同需求。这样,就形成了“基础训练+方法培养+提高能力+拓展层面+实践应用”的程序设计教学新模式和程序设计类课程新体系。
2)改革教育理念和教育教学方式
程序设计类课程的课堂理论教学中,采用案例教学法可以取得较好的教学效果,可将一个较复杂的项目分解到各章节去讲授介绍。如在《程序设计基础》课程教学过程中,我们使用了一个学生成绩管理程序项目案例,在讲授数组这一部分知识时,就可以将这个案例引入进来,介绍为什么要使用数组来存储多个学生的成绩,要对学生成绩排序应该怎么办;当课程进行到函数这一章时,引入了案例中的模块设计思路,介绍为什么要将项目分解为成绩录入、成绩排序、成绩查找、成绩统计等多个模块,模块之间如何去调用;当课程继续进行到结构体这一章时,让学生分析理解案例中,学生的信息不仅包含成绩,还包含姓名、学号时应该怎样处理;讲授到文件这一章时,让学生理解要将案例中的学生成绩等信息存储到一个文件中去,怎样去实现。这样,通过这一个完整的案例贯穿到整个课程的学习,不仅能使学生掌握课程中的基本知识,也能让学生直观的感受到一个复杂项目的设计过程。
3)改善教学内容的组织和安排
在程序设计类课程的教学过程中,我们将教学内容进行了调整和重新组织。在《程序设计基础》课程的教学过程中,将指针这一部分知识分散到各个章节去讲授,在讲到变量定义时,就引入地址和指针的概念,讲到数组和函数部分时,将指针的应用也同时在案例中进行讲授,这样,同学们也很容易接受和消化理解。在《高级程序设计技术》课程教学中,不讲授语言的基本知识,只讲授指针、文件、图形界面、动画、键盘、鼠标等的高级应用操作和设计。《数据结构》课程中,讲授各种抽象数据类型的定义,及相应的算法设计。在《Java程序设计》课程教学中,重在培养学生面向对象程序设计思想和编程技术,对教材中的基础知识部分如常量、变量、数据类型、数组等进行略讲或不讲,只是在应用中进行简单介绍该注意的问题,这样,就可以将更多地学时放在对学生面向对象编程思想的培养上。
4)加强课程和教材建设
在程序设计类课程群教材建设方面,应该有区别的选取具有系统性的、适合自己学生水平的高质量教材,或者课程群相关教师合作编写出版教材或讲义,这不仅使课程群中的课程教学内容具有系统性,也适合自己学生的认知水平,具有较强的针对性,同时,授课教师也能熟练驾驭教材和授课内容。近年来,我校计算机专业程序设计类课程群教师编写出版了《程序设计基础》、《数据结构》教材和相配套的习题册,教学效果有了明显提高。
3结束语
程序设计类课程的教学重在培养学生的程序设计思想和创造性思维能力,课程体系设置应该合理,课程群间课程的教学内容安排应该相互协调、补充,教学方式应多以项目式案例教学为主,让学生在案例中学会程序设计思想和对基本知识的理解,应加强课程和教材建设,以保障知识讲授的针对性和系统性,这样,才能在教学中取得较好的教学效果。
关键词:实验教学改革;实验题目分类;引导型题目;兴趣型题目;必须完成型题目
中图分类号:TP311.1 文献标识码:A文章编号:1007-9599 (2010) 09-0000-01
Teaching Search of Computer Programmer Experimentation
Liu Jian
(Tianjin University Of Technology,School of Computer and Communication Engineering,Tianjin300191,China)
Abstract:What is computer programmer experimentation for students to design.The text discusses how to learn programmer.Changing by rote of learning method to induct programmer practice or interest programmer practice or necessity programmer practice.
Keywords:Experimentation teaching reform;Class experiment subject;Induct programmer practice;Interest programmer practice;Necessity programmer practice
一、程序设计实验带来的困惑
开始学习高级语言程序设计的学生,往往感觉到看书或听课时,课堂授课和教材上的内容基本能够理解,反而需要自己编写程序时却又无从下手,有些问题,教师尽管在课堂上再三强调,反复举例,实验课上机编写程序时还是错误百出、困难重重[1]。另外大学低年级的学生没有完全从中学的灌输记忆式学习方法解脱出来,或不适应大学的启发式教学方法和独立思考研究手段,使得学习困难,积极性不高。
二、对学生特点的分类
针对90后的大学生思想活跃、知识面广、学习仅凭兴趣、遇到困难容易退缩,对新潮事物接受迅速等特点,教学实践中对当前的学生对学习的态度可以分为如下几种类型[2]:
(一)主动学习类型。具备自学能力和学习程序设计课程有特殊悟性的学生,这类学生大约只占总数的10%,他们主动学习,刻苦钻研,甚至可以帮助老师去辅导其他同学,是老师的有力助手,是学习的带头人,他们不满足实验课的一般性题目编程,自己找来复杂编程问题和老师交流。
(二)被动学习类型。可以在课堂上认真听课,学习热情不高,对程序设计课程内容理解浮于表面,主要目的是为了考试通过那到学分,这类学生大约占总数的80%,他们学习被动,上课来听,实验课题目内容老师要求才做,遇到困难问题不深究,满足得过且过不求甚解。
(三)散漫玩耍类型。特指只有在课堂上老师点名才不得不出勤的学生,学习态度懒散,对计算机的理解就是上网玩游戏,在老师的催促和期末考试的压力下不得不应付程序设计课程学习,上课时睡觉或聊天,实验课编程练习一筹莫展,师生交流课程内容以及通过期末考试有困难,这类学生大约只占总数10%。
三、创新程序设计实验题目
实验课主要是根据理论教学讲授的知识点布置实验习题让学生上机实践,以加深对课堂理论内容的理解和掌握,上机题难易应有一定的梯度,以保证让不同水平的学生都能学有所获。在理解基本概念的基础上循序渐进提高应用程序难度,有意识加强综合知识点之间的联系。培养煅炼学生模型抽象、程序编辑、程序调试的综合能力。
通过计算机程序设计实验教学实践中,我们逐步总结出一些与学生互动实验教学的有效方法,选择多种不同类型题目[3],有引导型、兴趣型、必须完成型,以提高学生实验课程上的主观能动性和某种程度的强制学习。
(一)引导型题目。对于具备自学能力和学习程序设计有特殊悟性的学生,在实验课上准备一部分实用性的、有一定编程难度、可引导学生向某领域发展的题目,如小型管理信息系统、科学计算算法、图形图像简单处理等,让学生自主的构思、设计、编程直至调试完成。
(二)兴趣型题目。对于学习主动性差的学生,他们只满足于课堂教学,于是,在实验课上准备一部分趣味性的、游戏性的、编程难度不高、可以学生有兴趣动手而且容易上手的题目。
(三)必须完成型题目。在每一个教学班中,总有些对于学习懈怠的学生,他们只是为了考勤才到实验室来,针对这些学生,在实验课上准备一部分题目较为容易、与例题类似的题目,如科学数据近似计算类、数据或字符排序类、素数处理和年份处理类,通过辅导老师的督促和指导、让学生仿照教材的讲解完成构思、设计、编程直至调试完成。
四、实验课就要强调编程序
实验课上重点突出编程训练,对于每堂实验课,提前将实验大纲和题目发给学生,要求每位学生务必要在课前预习,做好课前充足准备,可事先将编制的程序写在草稿纸上。实验课前,老师要逐一检查每位同学的准备情况,如果某同学没有提前预习和做准备,只好请该同学先去做准备,然后再来上实验课[4]。
实验中充分发挥同学间互助的作用,辅助老师去解决同学在编写程序、编译、链接、调试和程序运行过程中出现的问题。引导学生逐步区分语法类错误和程序逻辑类错误,掌握添加断点、单步执行、查看内存地址、动态变量和静态变量内容变化等程序调试基本方法,力争每一堂课都可以取得进步。
五、教学改革实践小结
循序渐进的实验课教学改革后,学生在程序设计课后不会编程序的局面得到初步的扭转,一部分同学开始在实验课上相互比赛,比谁的功能完整,比谁的编译、连接和运行顺利通过。促使老师因势利导,帮助同学开阔程序设计思路,鼓励学生参加各类程序设计的竞赛,推荐优秀学生参与学校教学课程网站的建设。
参考文献:
[1]马海英.培养程序设计能力的研究[J].电脑知识与技术,2008.4
[2]赖晓晨.程序设计课程创新教学模式探索[J].中国大学教学.2008.7
[3]何钦铭,颜辉.C语言程序设计[M].北京:高等教育出版社,2008.4
目前,市面上正在流行各式各样的立体画,其特点是从外表来看与一般的图案很相似,但是双眼紧盯着注视片刻后,一恍惚之间眼前便出现了画中画——立体像。笔者第一次看到这种画便被发明者的创意所倾倒。利用众所皆知的双眼视差原理,竟能在一张平面纸上制造出如此奇幻。但是立体画本身除了其发明者的灵感和画面创作者的别出心裁之外,其原理上并无神秘之处。用计算机程序来实现它,可说是易如反掌。笔者用一个晚上时间,便在微机上用BASIC语言实现了简单形体——平面圆饼的立体画。当然,要使该程序具有完善的功能,提高其制作速度,还是应该用编译语言(如C语言)来编写。本文中给出的源程序借助于Windows中的.BMP图形文件,可使大家自己制作任意形态的立体画。
一、立体画的原理
看过立体电影的人都知道,当人的双眼分别接收不同视角拍摄的图像时便会产生立体感。这是由于人眼长期观察的习惯造成的。和立体电影原理相同的立体摄影风景照片也很早就已出现。图1中给出了这种立体照片的示意图。左、右照片分别是人的双眼角度上观察一棱锥体时左右眼看到的图像(图2)。左眼看到的是棱锥的顶端向右错动了一些的图像,右眼的看到则是棱锥的顶端向左错动了一些的图像。如果用一张硬卡片隔开两张照片
图3双眼分别看两张画,会看到一个立体的棱锥体。这种立体照片的观察方法在测绘学中也早已采用。
但是,目前的三维立体画在形式上与这些很不相同。它是怎样在同一张画面上呈现立体的呢?首先,分析一下人们是怎样从这些立体画中看出“立体形体”的。从前面所说的可以知道,人眼要得到立体感,双眼必须有视差,即双眼看到的图像应该有差异。人们在看立体画时,都有“恍惚”一下的过程。在这过程中,双眼的视中心发生了错动(如图4)。这样;图4左眼看到的是画面的“偏左像”,右眼看到的是画面的“偏右像”。只要“偏左像”和“偏右像”的内容相当于图1的左、右照片,双眼就会感到立体形体。那么,能否把图1的左、右照片分别当做“偏左像”和“偏右像”,简单重叠来得到立体画呢?
显然不行。能够合成立体画的“偏左像”和“偏右像”是要满足一定条件的。
如果图5中表现的棱锥体的表面上有图案的话,GIF;图5像素a和像素a''''应该具有相同的颜色,因为它们是从不同视角观察的@@同一个实体点。像素b和像素b''''、像素c和像素c''''的情况与此相同。把两幅画分别当作“偏左图”和“偏右图”,部分重叠成为同一画面时,在新的画面上这种关系仍应该表现为a=a'''',b=b'''',c=c''''(如图6)。但这时应该注意到,在这张合成
@@09A04005.GIF;图6画面上,点a''''既是“偏右图”上的点a'''',又是“偏左图”上的点b。而@@一张画面上相同坐标点的像素只可能是一种颜色,因此,产生了新的像素关系a''''=b。另外,点a既是“偏左图”上的点a,又是“偏右图”上的点c'''',所以,a=c''''。以此类推,点b''''和点c也有类似的情况。因此出现了新的关系表示式,...''''=c=c''''=a=a''''=b=b''''=...。这就构成了立体画面上像素必须要满足的条件:“等颜色像素链”。立体画上的所有点都从属于某一条“等颜色像素链”。这就是所有立体画图案都呈现出某种程度上的水平周期性的原因。
因此,对于任意立体形状,只要构造出相应的这种“等像素链”,并按其规律充填图案即可得到立体画。但是正如前面所述,由于这种“等像素链”条件的约束,人们虽然可以随意构造出各种形体的立体画,但其立体形体的表面图案是不能完全随人意愿的。
二、制作立体画的计算机程序
由于人的双眼的水平性,以上的“等像素链”只按水平方向分布,与垂直方向无关。因此,在程序中,各个像素行的处理过程是相互独立的。制作立体画的程序主结构图如图7。
@@09A04006.GIF;图7制作立体画的程序主结构图在以上结构图中,关键是如何建立“等@@像素链”。具体的处理如下。对于立体形体上的每一个点,首先求出该点在“偏左图”和“偏右图”上的坐标。以图1中的棱锥顶点为例,实际上其X坐标是在中心点,但由于双眼的位置并不在其正上方,顶点在“偏左图”上向右位移,在“偏右图”上向左位移,而且其位移值的大小显然与其高度有关,即该点坐标越高位移值就越大。a,b,c等点也都有这些位移。在求出一个点在“偏左图”和“偏右图”上的坐标后,再算出在合成图(如图6)上的对应坐标
,以建立“等像素”关系,如a=a''''。当立体形体的一个水平剖面上的全部点经过以上处理后,合成图的各条“等像素链”关系也就自然形成了。
另外,由于有可能出现高点遮盖低点的情况,“等像素链”的构造应该从低点到高点逐层进行,高点的“等像素”关系将替代低点的“等像素”关系。这也是程序主结构图中“首先,对于没有任何形体存在的背景平面构造‘等像素链’”的原因。
下面给出了根据以上结构图用C语言编写的源程序。程序中,每一个坐标点对应一个结构型数据,它包含“前像素”、“后像素”两个指针。“前像素”指针指向该坐标点作为“偏右图”上的一点,在“偏左图”所对应的点的坐标。“后像素”指针指向该坐标点作为“偏左图”上的一点,在“偏右图”所对应的点的坐标。程序中,“立体形体水平剖面的高低坐标数据”、“原始图案素材”和输出的“立体画”的文件格式都是采用了Windows3.1的Pbrush产生的BMP图形文件格式。图幅大小要求都是640×400,用16种颜色方式。其中,立体形体上各点的高低坐标用图形文件中的颜色值表示,因此该图形文件的图形与带颜色的等高线图安全相同。通常情况下,在16色的BMP文件中颜色值从小到大的顺序为:黑色、暗红色、暗绿色、暗黄色、暗蓝色、暗紫色、暗青色、暗灰色、灰色、明红色、明绿色、明黄色、明蓝色、明紫色、明青色、白色。本程序采用最简单的“图案充填”方案,即各条“链”上的像素点皆采用该“链”上的第一个像素的颜色。程序中的常数EYE-SPACE表示“偏左图”和“偏右图”之间的偏差,BO-DOT是表明“链”的首或尾的指针标志。
发表评论 快捷匿名评论,或 登录 后评论