时间:2023-06-01 09:45:54
开篇:写作不仅是一种记录,更是一种创造,它让我们能够捕捉那些稍纵即逝的灵感,将它们永久地定格在纸上。下面是小编精心整理的12篇程序设计,希望这些内容能成为您创作过程中的良师益友,陪伴您不断探索和进步。
1、Agent程序简介
Agent是指驻留在环境中的自主执行动作,同时,与其他Agent进行交互合作从而达到设计需求的行为实体,其基本特征是驻留性以及自主性和社会性[1]。MAS即多Agent系统是由一组相互交互的Agent共同组成的综合性Agent系统,且此系统因Agent本身的驻留性和自主性,对不同的网络环境具有良好的适应能力。
2、MAS程序设计层次
2.1个体Agent层
软件Agent是AOP中目标软件系统的最基本的运行单元,由于Agent的自主性是其与其他程序设计实体相区别的最为主要特征,故如何实现并充分发挥Agent的自主性是面向Agent程序设计(AOP)的关键内容,包括Agent自助行为本质、Agent自主性变成的实现以及Agent的激励和模型等方面。
2.2Agent交互层
对MAS进行分析可知,其内部的每个单元Agent并不是单独存在和孤立封闭的,对不同的Agent单元来说,其所拥有的信息、资源以及知识等具有较强的局限性,因此,不同的Agent需要彼此进行交互方可实现MAS的软件设计目标。此外,由于Agent具有较强的自主性,而传统的OOP,即面向对象编程中,消息传递的机制难以对Agent单元的交互予以良好支持,所以,在交互层,AOP需要研究和解决的主要问题则是对Agent软件的交互及其相关工作,通过建立支持Agent的社会交互机制,从而建立起MAS系统的社会互、协作的理论体系。
2.3环境层
无论是单一的Agent单元,还是由众多Agent单元集成的MAS,其均会驻留在特定的环境当中,并通过同环境之间进行交互,实现对网络环境产生影响的功能。首先,环境为Agent提供了在MAS中的生存条件与上下文;其次,环境又可充当一阶的独立构造对MAS系统的内部结构搭建予以支持,最终实现网络环境内全部关注点的分离。
2.4多Agent组织层
由于Agent具有行为自主性,故为了保证MAS能够协调运行,且保持运行目标的一致性,AOP需要向其提供相应机制,并对自主Agent的行为进行有序组织和管理。AOP在组织层需要对MAS中的Agent单元行为进行约束,并在多个Agent组织层当中,设计出对单元个体的行为进行约束的语言结构和框架,确保MAS整体目标的实现[2]。
3、MAS抽象及模型
3.1个体Agent层
AOP程序在个体Agent层设计和模型研究中的主要目的是帮助Agent实现自主决策行为而提供决策描述软件,而Agent中构成的高层概念与抽象的核心是对Agent内部的决策部件进行描述,同时,建立起个体Agent的软件模型,本节主要对个体Agent软件模型中的认知型模型和知识型模型进行分析。认知型模型将Agent看作一个具体的认知系统,从目标、期望、规划和意图等认知科学与大众心理学等学科角度出发,对Agent软件的内部构成进行描述,通过姜恩柱BDI指数查询和KARO逻辑框架,为Agent软件个体行为的自主决策予以理论支持。知识型模型将Agent视为一个整体的知识系统,从信念、知识等AI领域中的抽象和概念出发,对Agent的内部构成进行描述,并通过借助逻辑工具以及知识推理与信念修改等相关办法对个体Agent软件的自主行为决策予以支持,帮助Agent实现决策的自主性。
3.2Agent交互层
AOP程序在Agent交互层的设计抽象与研究目的在于帮助个体Agent解决交互和协调的相关问题。核心是对Agent的交互进行正确的理解,并合理引用抽象与概念对不同Agent单元之间的交互予以支持。以基于事件和消息的Agent交互方式为例,对其交互过程进行说明。基于事件和消息的交互是指,Agent单元通过对相关事件和信息进行发送和接收进行的彼此交互,为实现此种交互,AOP语言特别提供了相应的语言结构来定义MAS中的事件和消息[3]。例如,ConcurrentMetate对Agent的显示定义个体进行说明,允许其接收和发送显示消息或时间,同时,借助广播的方式帮助不同的Agent实现消息与事件的通信。
3.3环境层
AOP在环境层的程序设计抽象和模型研究目的在于对Agent环境进行讨论,并分析构造Agent的环境和描述Agent与环境的交互关系。在MAS环境的抽象、模拟以及相关程序设计领域,可引入MAS规约语言和2APL等为Agent的环境构造和Agent与环境关系的交互予以支持。MAS规约语言,即Slabs以显示的方式对Agent环境进行定义,内容如下:MAS中同某一Agent相关的一组Agent的集合统称为Agent环境。而2APL则通过提出一种现实语言结构对MAS环境的描述予以支持,即对象状态是环境状态的具体描述,对象方法则描述了MAS中Agent能够实际对环境进行作用的相关操作。
3.4多Agent组织层
AOP在多Agent组织层中程序设计与抽象模型研究的目的在于,为MAS中Agent行为的协调组织与调整提供有效的概念,进而从整体上确保MAS协调的一致性。以MAS中的团队组织为例,对多Agent组织层的抽象设计展开分析。团队组织将彼此之间互相协作,共同完成一项复杂任务。多个软件Agent个体视为一个团队,团队模型通过将传统软件Agent的BDI模型进行扩展,在结合团队规划要素的基础上,对MAS的团队Agent模型进行建立与描述,以达到对Agent决策进行指导、约束的目的,从整体上实现不同Agent的合作。
4、结语
作者:王海舜 蒋巍巍 刘师少 单位:浙江中医药大学信息技术学院
1依据课程内在联系
构建软件设计系列课程群构成学生程序设计能力的计算思维、算法设计、程序设计与实现和系统分析能力四个基本要素,关键是提高计算思维、抽象思维、逻辑思维的能力,一两门孤立的语言或算法课程无法完成,这需要从系统工程的角度进行整体设计,组合相关的系列课程构成相应的教学和实践系统,并有一个循序渐进的深入过程,这一过程一般需要经过知识的积累、程序设计课程学习、软件开发实践等不同的环节,也就是要经历启蒙入门,发展提高和开发应用三个阶段[2]。通过贯穿大学四年的程序设计类课程的学习,学生在程序设计启蒙入门、发展提高和开发应用的不同阶段都能够很好地达到各个阶段的教学要求,形成良好的学习习惯,循序渐进、潜移默化地养成程序设计能力。因此,依据程序设计能力不同培养阶段的教学规律,我们应选择对学生程序设计能力培养有着关键作用的课程组成软件设计类课程群,课程群的主要课程可由以下课程组成。1)启蒙入门阶段:计算机导论、程序设计基础、面向对象程序设计等。2)发展提高阶段:数据结构、面向对象程序设计、计算方法、数据库基础、软件工程、Java程序设计等。3)开发应用阶段:网络程序设计、数据库开发实践、医学信息学、信息系统设计、医学图象处理等。建设课程群的目的是把原本相对独立的课程在教学过程中有机融合,前后课程互相呼应,逐步深化,把学生引入门。在课程群内涵建设中,按“点—线—面—体”的思路构建课程群框架,即以每门课程的主要知识点为基础,把程序设计类主干课程串成前后有机衔接的教学“线”,在课程群的“面”上构建课内外相关的任务驱动学习激励机制,最终形成软件设计课程群的体系结构和系统化的程序设计类课程教学框架[4]。在具体实践中,从分析课程群每门课程的知识点入手,从知识点内涵、教学要求、教学策略以及与前驱知识点和后续知识点关系等多个维度建立课程群中课程的知识架构的点、线关系,进而形成相关课程知识点前驱、后续知识点互相融合汇聚的知识面和课程体系。在此基础上通过完善相关课程教学大纲,达到目标明确、层次分明、定位正确、强化基础、拓宽专业知识面的应用型人才培养的要求。
2建立基于混合式学习的程序设计课程群教学模式
混合式学习(BlendingLearning)将传统的课堂学习方式和数字化学习方式有机整合,根据程序设计能力培养的启蒙入门、发展提高和开发应用不同阶段教学特点,围绕程序设计能力的“算法设计与分析能力、程序设计与实现能力和系统分析、开发能力”的递进培养目标,从混合式学习课程导入机制、多元化的程序设计课程活动组织策略、课内外学习支持以及教学评价等四个教学环节,从启蒙入门、发展提高、开发应用不同阶段组织开展混合式学习[5-7]。2.1启蒙入门阶段从程序设计能力入门训练入手,其重点在算法设计与分析能力的培养。针对大一、大二学生程序设计启蒙课程主要有计算机导论、程序设计基础等;教学围绕基本知识点训练编程思路、算法设计与分析方法,引导学生入门;教学活动组织中侧重于以班集体为单位的理论和实验教学,同时结合程序设计竞赛、课程设计、大作业等开展课外编程学习;建立BB平台、开发上线ZCMUOJ(ZhejiangChineseMedicalUniversityOnlinejudge:浙江中医药大学在线编译)系统,使之成为程序设计阶段课外学习平台,把师生面对面及借助网络和BB平台的辅导相结合,通过检查平时程序设计作业完成情况和程序代码数量和质量,以及期末的现场程序设计实验考试,进行学习成绩综合评价。2.2发展提高阶段发展提高阶段重点在程序设计与实现能力培养,从软件工程的角度,研究从程序设计到软件设计能力培养。本阶段主要是针对大二、大三学生,主要课程有数据结构、面向对象程序设计、计算方法、数据库基础、软件工程等;该阶段的教学侧重在程序设计的综合性、整体性素养培养,综合相关课程设计任务,以设计性、综合性实验为主,重点围绕软件开发的完整流程开展实践,强调团队分工与协作;以小组协作方式为主,根据各课程知识间的依赖特性从课程群的角度组织开展课程设计与假期实践;同时,强化软件集成开发环境(如VisualStudioTeamSystem、Eclipse等),版本控制工具(如CVS等)等协同开发环境的应用;教师的角色也随之从“教”师变为“导”师,提供实践思路与方法的指导,引导小组成员协作学习、角色扮演、讨论交流;教学评价侧重于程序开发、文档撰写、软件评测、团队协作等多个角度,通过小组自评、组间互评与教师评价等方式综合考量。2.3开发应用阶段开发应用阶段重点在系统分析、开发能力培养,软件团队合作开发训练,基于常用团队协作软件开发平台的软件开发训练。针对大三、大四学生结合计算机应用领域,特别是我校医学领域信息开发的优势,从医学信息学的角度,开展跨学科的医疗卫生信息化项目开发实践。该阶段课程群主要课程有医学信息学、信息系统设计、Java程序设计、网络程序设计、数据库开发实践、医学数字图象处理等;该阶段以项目实训、企业实践为主,重点围绕医学信息工程软件开发、网络管理软件、数据库管理软件开发等以及软件测试等多种角色开展教学;以团队分工协作的方式开展课程设计、项目实训和科研项目开发,并与相关卫生信息化企业合作开展企业实践,组织学生参与医院信息化项目研发;由相关教师组成导师组,以客户经理、项目经理等角色给予项目团队方向、思路、策略的指导,教师参与并鼓励学生借助网络等相关资源共同研究解决完善相关问题;通过项目答辩的形式检查实训成果。
3以任务驱动的课内外程序设计推进机制
程序设计能力的培养,仅靠课内的教学是远远不够的,需要建立完善的课外程序设计学习机制,激发学生学习积极性和学习潜力,为此,我们主要采取程序设计类课程布置的课外大作业、课程设计任务以及参与教师实际科研项目开发等多种途径来驱动学生的课外参与程序设计能力训练,同时建立多种形式的验收讲评和评价激励机制,任务驱动与激励机制的结合是引导学生课外开展程序设计一种有效措施[8]。3.1启蒙入门阶段以程序设计竞赛为抓手在低年级学生的程序设计能力启蒙入门阶段,以实施课外程序设计竞赛为抓手,从程序设计能力培养与训练入手,根据程序设计能力的教学规律,建立不同难度、不同层次的课外程序设计训练和竞赛为主的学习激励机制;设计开发适合我校学生特点的ZCMUOJ系统,使之成为学生参与程序设计的主要学习支持平台。为了吸引同学参与课外程序设计,我们建立了周赛、月赛、学期比赛以及单挑赛等多种形式的程序设计竞赛机制,刺激学生的参与兴趣。平均每周组织一次程序设计周赛,每月组织一次个人单挑赛和团体月赛,每学年分别组织学院比赛和学校比赛,参与人员覆盖了计算机专业一二年级70%学生。以程序设计竞赛为主要抓手的程序设计能力培养使学生程序设计能力明显提高,低年级学生完成课程设计的编程难度和代码数量明显提高,学习程序设计的兴趣明显上升,特别是在ACM比赛中,我校2011年浙江省ACM程序设计竞赛中获铜奖三项;2011年4月,我校在ACM-ICPC亚洲赛区晋级赛福州站比赛中获铜奖1项,学校排名25位;在2011年9月第36届ACM-ICPC国际大学生程序设计竞赛亚洲区预赛大连站比赛中获铜奖1项。3.2发展提高阶段以课程设计为抓手大二和大三学生已初步掌握程序设计基础,需要提高发展程序设计能力,突出软件工程角度的软件工程化开发能力的培养。软件团队合作开发训练采用企业通用的集成开发环境和软件版本控制工具进行软件开发训练。此阶段主要采取相关课程的课程设计和二年级小学期的集中课程设计等多种形式实现程序设计。例如在“数据库开发”课程中,采用案例教学,启发学生开展课程设计,通过剖析数据库开发案例,详细展开需求分析、模型设计、程序设计、程序测试以及系统等各个环节的实现方法,引导学生从单一程序设计到较为复杂的软件系统开发的过渡,培养学生软件工程素养和软件开发能力。3.3开发应用阶段以项目开发为抓手大三和大四学生已经掌握了软件开发的基础,但需要更多的实际项目开发实践,以便迅速提高软件开发能力。对此,我们采取课程教学中的模拟项目开发和实际软件项目开发相结合的激励机制。针对全体学生,在后续的医学信息学、信息系统设计等课程中开展模拟软件工程开发全过程的程序设计。例如在医学信息学课程教学中,把完成一个医院信息系统子模块设计开发作为贯穿于整个教学过程的任务,要求人人都参与项目开发,并且要用软件工程的方法来实现项目开发。以班级为单位,开发医院信息系统的一个子系统,模拟实际项目开发,分层管理,班级设立项目经理和技术总监,负责项目实施管理和技术管理,3至4人为一组,设立项目组长,负责项目模块的开发,要求每组完成需求、概要设计、详细设计和软件测试四个文档,并且结合医院信息系统参观调研,完善需求分析和设计。通过课程设计,尝试对软件设计全过程,特别是软件开发团队的合作,这对提高同学们软件设计能力有很大的帮助。同时,在课程设计成果考核评价中,我们让项目团队中每个人上台宣讲自己所做的工作、演示系统,学生代表评分与教师评分相结合。自2005年级至2008年级,共五届490名计算机专业的学生参加医学信息学课程设计,共完成22个门诊或住院子系统,100个子模块。同时,通过公开招募考试等形式,召集一些软件开发能力较强或学习能力较好的学生参加寒暑假教师的实际科研项目开发,并使之形成班级软件开发的骨干力量,进一步带动整个班级的软件开发氛围。
4结语
在实践中,我们认识到程序设计能力培养是一个从启蒙入门、发展提高到形成综合软件开发能力的循序渐进过程,在程序设计能力培养实践中,我们根据程序设计能力培养的教学规律,依据课程内在联系构建软件设计类课程群架构,针对各个不同阶段,制定培养对策,采取网络混合式学习、任务驱动、竞赛激励等多种形式的教学策略,特别是注重营造学习程序设计的氛围,激发学生主动学习的激情,在教学实践中取得了较好的效果。
【关键词】程序设计 娱乐 兴趣 好奇 生活
程序设计是职高计算机专业学生的必修内容,亦是学习计算机必须掌握的知识,通过学习程序设计课程培养学生发现问题、解决问题的能力,培养学生发展思维、学会学习、自主探究和合作交流的能力。同时,要学好计算机的相关课程,必须熟练掌握一门程序设计课程。然而,由于学生的个体差异,他们对于学习的态度、热情程度、学习的方法、自主学习的策略的不同,直接影响学生学习程序设计的效果,特别是在实际教学中如果处理不当,就更加导致学生兴趣丧失,挫折感增强,进而影响程序设计课程及其他相关课程的学习。那么,怎样才能使学生不畏惧程序设计?怎样使他们一直怀有浓厚的兴趣?对这些问题,我尝试寓娱乐于程序设计教学,让学生在学习中体验快乐、收获成就感,下面就以我在教授数据库程序设计VFP6.0过程中的几个有趣的例题为例进行讲解。
一、制作QQ动画图片――病毒效果图片
初见这个时,可能会被吓一大跳,以为自己真的中病毒了在安装木马病毒。其实,这并不是木马病毒,不会伤害他人的电脑和数据。这是一款最新很热门的QQ动画图片,把图片发送给对方的时候,上面的字会一排排的依次显示,效果很逼真,接收的人会以为真的同意执行下载接受木马病毒的指令,进而很紧张,达到娱乐他人的目的。在数据库程序设计VFP6.0中,在第四章讲解分支语句之前要学习几个标准的输入输出语句(又称非格式化输入输出语句),其中一个是WAIT语句,WAIT语句的功能是接受单个字符和显示信息,它的基本格式是:
WAIT[][T0][WINDOW][TIMEOUT]
如果按照传统的方法讲解,从语法功能到子句的运用,则同学们肯定觉得很枯燥必然听得昏昏欲睡,因此我设计在这堂课一开始什么也不说就给同学们演示这副QO图片的效果,必然会一石激起千层浪,同学们首先是一震撼进而激发他们强烈的好奇心,然后告诉他们通过一个命令就能够完成这一效果,同学们学习的热情必然空前高涨,借机展示例句:
WAIT“小庆要发送给您文件‘木马病毒.exe(119IKB)’;
您是要接收(Y),另存为(A),还是谢绝(N)该文件”TIMEOUT 3
WAIT“您同意了接收文件‘木马病毒.exe.重命名’,正:
在建立连接,如果要中止接收文件,清按取消”TJMEOUT 3
WAIT“文件‘木马病毒.exe’已经发送完毕”TIMEOUT 3
WAIT“正在安装‘木马病毒exe’请稍候…” TIMEOUT 3
WAIT“安装成功,重新启动计算机后生效!”TIMEOUT 3
这样先观看效果对同学们感官造成巨大的视觉冲击,再讲解语法功能然后让其自行编写,这样同学们有了浓厚兴趣和亲身的实践体会必然对此知识接受的很快,并且印象深刻不易遗忘。
二、肯得基吃午餐
针对同学们喜欢吃快餐的特点,演示通过手持不同的金钱可以购买不同的肯得基食物,由于和实际生活紧紧相联系,金钱的数日也和实际生活中获取的食物一致,更加能够激发同学们强烈的实践心理、求知欲以及实物转换成程序之后的巨大成就感,借着他们这股强烈的学习欲望引出程序,进而讲解多分支选择结构的语法结构和语法功能,这样必然达到事半而功倍的效果。
三、超女选拔程序
这个年龄阶段的学生都很喜欢追星,大多有自己喜欢的偶像,虽然我们不公开颂扬他们追星,但如果能善假于物,充分利用这些已有的资源为教学所用,也不失为“化腐朽为神奇”之举。每年一度的超女快男比赛最受中学生们的热捧,比赛期间,同学们茶余饭后谈论的最多的就是选手的晋级问题,针对他们本身就感兴趣这一特点,如果提出让他们设计程序来抉择超女们的命运,他们的参与性和热情度必然空前高涨,就此引出循环结构并且引出结合表的程序设计的学习,同学们经过反复的实践和修改就得出了以下程序。
一、对教材中的“歌手大奖赛评分”程序进行拓展引伸,设计出比较智能多用途的程序
1.程序界面设计。新建一个标准exe工程,添加如表1所示的控件,并设置控件相应的属性。(见附图1)
表1 “时钟的时针和分针重合的问题”程序用到的控件及其属性说明
2.算法分析。① 请输入这次大奖赛的满分分数(如10分或100分等等)以及评委的人数,赋值给系统的公共变量public_min和public_i,这里要求事先定义好这两个系统的公共变量。
系统公共变量的定义方法:单击“工程”菜单,选择“添加模块”命令,在“Module1”框中输入Public public_min As Single, public_i As Single即可。
② 输入各评委的评分并计算。如果输入的数值超过事先输入的满分的值,系统则提示:“出错啦,分数超出范围。”在这里,用到了For …Next循环语句和输入函数InputBox(提示信息,标题,默认值,位置)和输出函数MsgBox“”。
③ 输出:去掉一个最高分和一个最低分后其余分数的平均分。
3.编写事件过程。在“大奖赛评分系统”程序中,用户单击“请先输入满分和评委人数”按钮后,开始读入满分分数和评委人数。
二、下面针对教材的第103页和第107页的“创新活动”中的问题,给出比较详细的程序编写过程
(一)教材第103页“创新活动”的问题。在12小时制的时间中,在钟表正常走动的时候,有多少个时针和分针重合的位置?它们分别表示什么时刻(精确到秒即可)?
请编写一个界面如附图2所示的“时钟的时针和分针重合的问题”程序,单击“开始计算”按钮,程序计算并显示出答案,单击“退出”按钮,结束程序运行。
1.程序界面设计。新建一个标准exe工程,添加如表2所示的控件,并设置控件相应的属性。
表2 “时钟的时针和分针重合的问题”程序用到的控件及其属性说明
2.编写事件过程。由于在“时钟的时针和分针重合的问题”程序中,用户单击“开始”按钮后,就在List框中显示出时针和分针重合的位置时刻,因此我们在“开始”按钮处编写Click事件过程。
对于“结束”按钮,我们只要在它的Click事件过程中写下一个语句“end”即可。
对于“哪些时刻时针与分针成平角或直角”等问题,做法类似,这里就不再赘述。
(二)教材第107页“创新活动”的第一个问题。编写一个猜数游戏程序,程序界面如附图3所示。单击“开始”按钮后,电脑随机产生一个1到100之间的整数,然后程序提示你猜一个数,如果你输入的数太大,则程序会提示你“太大了!”,如果你输入的数太小,程序会提示你“太小了!”,直到你猜中为止。最后程序还会报告你一共猜了几次。
1.程序界面设计。新建一个标准exe工程,添加如表3所示的控件,并设置控件相应的属性。
关键词:Java程序设计;Unicode字符集;编码/解码
中图分类号:TP391文献标识码:A文章编号:1009-3044(2007)03-10773-01
1 引言
在基于Java程序设计中,我们经常碰到非英文字符处理及显示的问题。一大堆看不懂的乱码肯定不是任何人所希望的结果,怎样才能够让那些基于特定字符集编码的非英文字符正确显示呢? 怎样才能够恰当地选择字符集编码方式并正确地处理?本文从基本的字符集知识出发,通过对Java程序设计中有关编码转换的问题进行的分析并结合编程实例,详细介绍Java的多语言支持(Unicode编码)特性。
2 关于字符集的知识
正如大家所知,计算机的信息处理建立在二进制之上,可以这么说,计算机只理解0/1,为了便于阅读和理解,需要将这些0/1的串映射为人可以阅读的字符,这些映射称之为字符集;而字符在字符集中的编码称为字符编码[4]。例如“A”在ASCII字符集中的编码为“0x41”。早期的计算机系统使用了7位二进制的ASCII编码作为缺省的编码方式,于是,在计算机中一切处理程序最初都是以单字节编码为准进行处理。对于英文来说,ASCII码0-127就足以代码所有字符,对于其它语言,如中文,日文等,则必须使用两个字节(byte)来代表一个字符,在习惯上称为双字节(即DBCS:Double-Byte Character Set),相对的,英文的字符编码就称为单字节SBCS(Single-Byte Character Set)。按照这种使用双字节来编码的思路,发展出了简体中文的GB2312,繁体中文的BIG5和日文的SJIS等针对特定语言的字符集。当不同语言的字符混合在一起的时候,必须经过字符集的转换,非常麻烦。例如:中英文混合情况。为解决这个问题,国际标准组织提出了容纳全世界所有语言文字的Unicode字符集。
Unicode的学名是“Universal Multiple-Octet Coded Character Set”,简称为UCS[2]。UCS可以看作是“Unicode Character Set”的缩写。UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是占用双字节的Unicode编码,UCS-4就是占用4个字节的Unicode编码[4]。本文中所有的内容均以UCS-2为准。
在Unicode出现之前,许多的信息系统和数据都是基于特定字符集编码开发的,例如,大量的中文电子文档,企业遗留的财务系统,服务部门的计费系统等等。当需要对旧的信息系统和数据进行升级时,系统对多语言支持往往是很重要的部分,在信息国际化的大环境中非常必要的。但很多开发人员没有认识到Unicode编码是多语言支持的核心,或者不熟悉Java语言中正确的编码转换方法,经常写出这样的代码:
new String(source.getBytes("GB2312"), "ISO8859-1")
new String(source.getBytes("ISO8859-1"), "GB2312")
这样的代码存在如下的问题:(1)可读性差,不便于维护;(2)将系统和 GB2312 字符集紧紧绑在一起,多语言支持难以实现;(3)每次都要进行 new 操作,频繁的产生不必要的对象,消耗系统资源。
事实上,Java语言在设计之初,就考虑到对多语言的支持,默认在Java程序内部使用Unicode字符集,在本文接下来的部分就Java语言的这一特性进行详细的介绍。
3 Java程序设计中的编码转换
在Java程序内部,所有的字符都是按照Unicode字符集来编码,所以在Java程序运行时,就存在由一个本地字符集(与特定语言相关的操作系统)编码向Java内部Unicode字符集编码的转换过程,称为解码(Decoder);同样的,由Java程序内部输出信息,是从Unicode字符集编码向本地字符集转换的过程就是编码(Encoder)[1]。
Java程序中保证非英文字符能够被正确显示的条件只有一个:解码过程和编码过程使用相同或者兼容的字符集编码。
从JDK1.4起,Java提供了java.nio.charset包,其中有三个类用于解码和编码:Charset、CharsetEncoder和CharsetDecoder来帮助我们完成编码转换[3],下面我们就用这三个类来演示Java程序设计中的编码转换。
在Java程序设计中默认支持下列字符集编码[3]:
US-ASCII:7 位 ASCII;
ISO-8859-1:ISO 拉丁字母;
UTF-8:8 位 UCS 转换格式;
UTF-16BE:16 位 UCS 转换格式,大尾数法字节顺序;
UTF-16LE:16 位 UCS 转换格式,小尾数法字节顺序;
UTF-16:16 位 UCS 转换格式,用标记(marker)识别的字节顺序。
然后,不同的平台可能支持特定于该平台的额外字符集(例如,在 Windows 平台上,您会发现它支持 Windows-1252 字符集)。如果您需要支持其他的字符集,您可以创建自己的字符集。请参阅 java.nio.charset.spi 包中的 CharsetProvider API[1]。
在得到一个解码器或编码器之前,需要获得用于特定字符集的Charset 。例如,GB2312 是用于GB2312字符集的名称。您只需象下面这样把该名称传递到 Charset 的 forName() 方法中即可:
Charset charset= Charset.forName("GB2312");
一旦有了 Charset,只需按如下所示请求 CharsetDecoder 和 CharsetEncoder:
CharsetDecoder decoder = charset.newDecoder();
CharsetEncoder encoder = charset.newEncoder();
有了解码器和编码器后,您就可以在特定字符集编码和Unicode字符集合之间进行转换了,如下所示:
ByteBuffer bytes = …;
CharBuffer chars = decoder.decode(bytes);
bytes = encoder.encode(chars);
以字符“中”为例,可通过以下方式得到其在GB2312字符集中编码为“D6D0”。这是一个编码过程。
String str = "中";
String CHARSET = "GB2312";
char nativeChars[] = str.toCharArray();
Charset nativeCharset = Charset.forName(CHARSET);
CharBuffer nativeCharBuffer = CharBuffer.wrap(nativeChars);
CharsetEncoder encoder = nativeCharset.newEncoder();
ByteBuffer nativeBytebuffer = encoder.encode(nativeCharBuffer);
byte[] nativeBytes = nativeBytebuffer.array();
System.out.println("\n#----- " + CHARSET + "encoding output -----#");
for (int i = 0; i < nativeBytes.length; i++)
{System.out.print(Integer.toHexString('\u00FF' & nativeBytes[i]).toUpperCase());}
GB2312字符集编码的输出结果:
#----- GB2312 encoding output -----#
D6D0
而后,我们将字符“中”的GB2312字符集编码转换为Unicode字符集编码,这是一个编码过程。
CharsetDecoder unicodeDecoder = nativeCharset.newDecoder();
CharBuffer unicodeCharbuffer = unicodeDecoder.decode(nativeBytebuffer);
char unicodeChars[] = unicodeCharbuffer.array();
System.out.println("\n#----- Unicode encoding output -----#");
for (int i = 0; i < unicodeChars.length; i++)
{System.out.print(Integer.toHexString(unicodeChars[i]).toUpperCase());}
System.out.println("\n" + String.valueOf(unicodeChars));
Unicode字符集编码的输出结果:
#------ Unicode encoding output ------#
4E2D
中
字符“中”的Unicode字符集编码为“4E2D”,并可以被正确的显示。
类似的,我们可以获得字符“中”在日文字符集SHIFT-JIS中的编码为“9286”,从SHIFT-JIS字符集向Unicode字符集编码转换的结果仍为“4E2D”。
String str = "中";
String CHARSET = "SHIFT-JIS";
char nativeChars[] = str.toCharArray();
… …
输出结果:
#------ SHIFT-JIS encoding output ------#
9286
#------ Unicode encoding output ------#
4E2D
中
通过以上的程序实例,可以得出结论:无论字符原来用何种本地字符集表示,在Unicode字符集中都被表示成相同的编码。或者说,Unicode字符集和语言的种类无关。
可以推断出,无论输入的数据最初由何种字符集编码表示,只要在进入Java程序后,进行Unicode字符集编码转换,并按照Unicode字符集编码输出,都可以被正确的显示。Unicode字符集为不同语言中的所有字符都提供了唯一的编码。
那么,我们现在就可以回答本文开篇提出的两个问题。
第一,借助于java.nio.charset包中的Charset、CharsetEncoder和CharsetDecoder将特定字符集编码的字符转换为Unicode字符集编码;
第二,选择Unicode字符集编码将字符输出。
做到了以上两点,处理任何语言的字符都不会遇到类似于乱码的显示问题。
4 结束语
本文从Unicode字符集编码角度分析了Java的多语言支持特性,并对由字符集引起的显示问题进行了分析和解答,相信大家能够更好的理解和运用这一技术,从长远角度出发,设计,实现符合国际化规范的应用系统。
参考文献:
[1](美)Bruce Eckel. Java编程思想[M]. 机械工业出版社,2002.9.P170-174.
[2](美)The Unicode Consortium. The Unicode Standard, Version 4.0[M]. Addison-Wesley出版社,1996.
[3]Unicode官方网站. /.
关键词:小额诉讼;程序设计;独立性
在2013年修改并颁布的《中华人民共和国民事诉讼法》(以下简称《民事诉讼法》)中新增加了一条关于小额诉讼案件的审理规定,即第一百六十二条。这一条文规定:基层人民法院和它派出的法庭审理符合本法第一百五十七条第一款规定的简单的民事案件,标的额为各省、自治区、直辖市上年度就业人员年平均工资百分之三十以下的,实行一审终审。第一百五十七条第一款规定的是简易程序的适用范围,即基层人民法院和它派出的法庭审理事实清楚、权利义务关系明确、争议不大的简单民事案件,适用简易程序。从这条规定来看,小额诉讼案件的认定有两个条件,一是符合适用简易程序的要求,二是标的额的限制。小额诉讼程序可以看作是简易程序制度的一种特殊情况,唯一的程序上的区别在于其实行的是一审终审制。 就小额诉讼在民事诉讼法中的体系来看,其作为简易程序的特殊情况来对待是值得商榷的。
一、将小额诉讼程序从简易程序中独立出来的必要性
首先,从诉讼法的法理层面上看,小额诉讼程序的独立性与特殊性,不仅表现为小额诉讼的程序规则特殊,而且还表现为小额诉讼的程序法理特殊。通常诉讼程序的程序法理不完全适合于小额诉讼程序。而简易程序恰恰适用的是诉讼法理,诉讼法理最基本的要求就是赋予当事人以程序保障,其中重要的是审级利益保护,强调给予当事人以更多的辩论机会来发现案件真实,以期求得正确的裁判。小额诉讼程序虽然解决的也是诉讼事件,其也本应适用诉讼法理,然而小额诉讼程序如果完全适用这一诉讼法理,就无法实现"诉讼效益"这一目标。因为诉讼法理追求的是"慎重而正确的裁判之程序保障",这无疑会花费更多的劳力、时间、费用;而"小额诉讼请求程序所追求的理想是不需要法律技巧的简易和效率",强调的是"简速裁判之程序保障"。因此,在立法上确认小额诉讼程序的独立性,契合了"民事纷争的程序设置应与案件类型相适应的程序法理"要求。
再从新民诉条文来看,小额诉讼程序没有其独立性,只有相对于简易程序的特殊性。这样的一种制度设计并没有真正适应小额诉讼案件的需要。我国立法将小额诉讼规定在简易程序当中,不仅继承了其程序上的设定,还延续了简易程序的缺陷。首先,简易程序立法规定十分简单,只有5个条文,可操作性较差。虽然最高人民法院在司法实践过程中先后了最高人民法院《关于经济纠纷案件适用简易程序开庭审理的若干规定》、最高人民法院《关于适用简易程序审理民事案件的若干规定》,对有关内容作出了一定补充,但是由于其在性质上属于司法解释,所以在效力上远远不能统一司法实践。其次,简易程序的适用范围模糊不清,导致了普通程序与简易程序界限的并不十分明朗。我国现行《民事诉讼法》将简易程序的适用范围界定为"事实清楚、权利义务关系明确、争议不大的简单民事案件",过于笼统和抽象。从立法目的和程序理想上看,简易程序无法替代小额诉讼程序。鉴于此我认为将小额诉讼程序从简易程序中独立出来十分必要。
二、具体制度设计的思考
1、小额诉讼程序的适用范围的具体界定
在新民诉中小额诉讼程序的适用范围界定为标的额为各省、自治区、直辖市上年度就业人员年平均工资百分之三十以下。这一界定确定了两个方面的要求,一个是案件是关于钱债纠纷,另一个是标的额的限定。其实这大大限制了其能适用的案件的范围。很多相邻关系、劳动争议、婚姻家庭等适宜基层法院处理的案件都无法适用小额诉讼程序,这样不仅耗费大量的诉讼资源,也增加了当事人行使诉权的成本。在程序的总体设计上可以考虑在尊重当事人程序选择权的基础上,适用小额诉讼程序。
2、在诉讼管辖方面的思考
小额诉讼程序作为效益优先的民事诉讼程序,本身具有自己的特点,其标的额通常都极小,当事人大多为一般消费者和社会普通大众,而在很多小额案件中,其相对方却可能为实力相当雄厚的公司或商家。如果我们对小额程序继续采用原告就被告的管辖原则,让普通消费者为小额利益到公司或商家所在地去,将使诉讼收益与所得发生严重的失衡,从而很可能在一开始就让消费者望"诉"止步,不仅不利于保护社会弱势群体的利益,而且也不利于有效制止民事违法行为,从而使小额诉讼程序的价值大打折扣。因此,为保障诉讼公平,维护以诚实信用为基础的交易行为,充分发挥小额诉讼程序对于普通消费者权利的救济功能,应当在被告一方为法人或其他组织时,赋予原告住所地法院的管辖权。
3、具体程序的简化
在和答辩方面,为方便广大民众尤其是农村民众诉讼,和答辩可以采取口头形式,或者采用格式化的诉状或答辩状。以口头形式的,法院应将内容记入笔录,由当事人签名或盖章。法院可以根据各类小额案件的性质和特点预先制作格式化的诉状,供当事人选择和使用。随着网络的普及和发展,将来也可以考虑在网上和答辩,以最大限度的发挥小额诉讼程序简便、快捷的特点。在法庭调查和法庭辩论的简化方面,小额诉讼原则上以一次开庭审理即告终结,因此,在法庭调查和法庭辩论环节,应尽可能灵活进行,而不应机械地适用普通程序的程序规则。具体而言,在小额诉讼的法庭调查和法庭辩论环节,应当注意以下问题:(1)在证人作证问题上,为了节约当事人的诉讼成本,在法官认为必要时,在开庭阶段证人不必亲自出庭作证,可以采用电话、多向视听传输设备等先进的通讯方式作证。法官可依据自由裁量权决定询问证人的顺序等;(2)在法庭调查中,对当事人认可或无争议的事实与证据,可不必经过调查、质证,而将事实记录在案卷中,即作为定案的根据;(4)如果当事人对案情没有争议,只是对法律适用有疑问,可以不经法庭调查直接进入辩论环节;(5)小额诉讼中的法庭调查和法庭辩论不必机械的分开,法官可以依据案件审理的具体情形,依职权决定二者的适用或者二者交叉进行,边举证边辩论。
4、关于小额诉讼程序的救济
如何对小额诉讼程序进行救济在民事诉讼法中规定的并不明确。小额诉讼程序实行的是一审终审制,对于争议的解决强调的是效率,因此其适合提出再审的救济方式。申请再审的提出意味着小额诉讼裁判一经作出立即发生效力,当事人可以据此申请执行从而迅速实现权利。由于小额诉讼案件大多为法律关系简单、争议标的额较小的案件,通过申请再审的方式进行救济在总体上是能够保证审查的公正性和质量。这样的一种救济方式有利于实现小额诉讼程序的效率性,也有利于保障当事人的诉讼权利。
三、结语
小额诉讼程序设计需要在整合民事诉讼法和民法基本原则的基础上进行架构,此中难度可想而知,但我们应该为小额诉讼程序的设计确定一个总体的思路。我认为这个总体思路的核心在于对司法效率和司法公正的总体利益的最大化。小额诉讼程序在一定程度上限制了公民对其诉讼权利的实现,但从其实现过程来看,公民能够通过这一程序更接近司法权利的实现。这种努力是一般国民能够得到具体有程序保障的司法服务。在整体的司法资源的分配上也能够更加实现司法效率和司法公正。总的来说,关于小额诉讼程序的设计,我国民事诉讼法仍存在很多需要完善的地方。
参考文献:
[1]许尚豪.小额诉讼--细节正义的主旨与要求[N].人民法院报,2006-12-18.
[2]范愉.小额诉讼程序研究[J].中国社会科学,2000,(4).
[3][日]小岛武司.诉讼制度改革的法理与实证[M].陈刚,郭美松,等,译.法律出版社,2001.
[4][日]新堂幸司.新民事诉讼法[M].林剑锋,译.法律出版社,2008.
计算机程序设计类课程具有实用性强,和应用广泛的特点。C语言作为现代非常流行编程的语言,更是具有通用性强和面向对象等众多特点,作为大学计算机基础编程类课程被广泛学习。C语言存在一定的复杂性并且授课时限制,授课方式限制等等问题。将计算思维融入到C语言的教学中,合理调整针对各专业授课内容,将计算思维融入课程,并与MOOC教学模式对接。笔者结合十年的教学实践经验,总结出授课效果不佳的原因,提出若干改革措施。
关键词:
计算思维;C语言程序设计;MOOC;
黑龙江省教学改革项目《高等院校计算机基础程序设计类课程综合研究性教学改革与实践》项目编号:JG2014010854
1教学内容与模式存在问题
1)先理论后实验
C语言程序设计课程在传统的教学中,理论部分采用课堂讲授的模式,边讲知识点边进行编程,实验课则是在理论课城讲完之后,单独进行实验教学,单人单组,这种教学模式容易出现理论与实践脱轨,接连不上,理解不透彻等问题。
2)创新性实验不足
一般教学模式下,设计性实验和创新性实验占的比例在20%以下,创新性项目不足。这种模式下,学生在课堂上的学习积极性大部分依靠于教师的授课技巧或个人魅力来吸引学生,教师把知识点讲授得清楚明白,但是学生自己动脑思考相应问题的时间短,并且大部分学生课前预习基本没有,不能真正发挥学生主观能动性和自主学习能力。
3)直接灌输
大多数学生对与课前预习做的并不出色,可能大部分学生是完全没有课前预习的。学生在头脑中并没有带着问题听课,而是老师直接灌输C语言定的设计结构、数组、指针等复杂内容。学生没有预习,没有思考,只有类似直接灌输式的教学模式。
2从教学模式改良教学内容
1)将计算思维能力培养融入课程中
程序设计类课程的教学方法要注重将“不可见”变为“可见”,变“无关”为“相关”,把大问题碎片化,把复杂问题进行分离与分层处理。例如,将C语言中的语法有融合到程序设计中,在程序中讲语法,又在学语法的同时练习训练了编程,这样就避免了枯燥乏味的讲述语法,将语法融合入程序设计中。
2)在C语言程序课程中扩展计算机思维的改革模式
①改进教学方法。不将C语言程序设计课程的教学内容做大量调整,而是通过改进教学方法来启发引导学生认知知识点背后蕴含的联系与规律,比如设置问题导引,问题讨论,追溯反思,新建构架等等方式来潜移默化的渗透计算思维,使计算思维模式逐步走进学生的思维方式中。②重新构架体系结构。并不对课程教学的知识点做大量更改与替换,而是以计算思维模式为主干重新构建知识体系,只是课程内容授课顺序和结构有较大复读调整。例如容易基本的数学问题,生活常识问题,即由C语言外而进入C语言内的知识体系的调整。③更新大量陈旧项目。以往的教学内容包含一些生硬死板的程序项目,其目的只是为了说教语法和结构。取而代之的融入计算思维的程序项目则更加新颖,更加联系实际,更加突出对计算思维的训练,例如,爱因斯坦天国的阶梯;生肖属相轮回等项目,不仅生动、引人入胜,更能训练思维。
3)依据计算思维融合传统科目内容
我们可以将一部分学生选出来进行试验性教学,打破传统的几门课程包括C语言、数据结构、算法分析、VC程序设计,等系列课程的教学方式,采用根据不同专业设定的包含基础数学、程序设计技巧、算法分析的一体化教学内容,打破传统的教学内容,该体系能够更充分利用学生的自主能动性,课下的工作量比课上的工作量要大得多,学生在课前要进行大量的准备工作。
4)加大课前预习量
打破传统的理论教学与实验教学分开的模式,在理论教学中同样需要学生进行大量的课前准备,然后在课堂上进行分组讨论老师提出的问题,根据每组学生的讨论内容,讨论结果设置而在实验教学方面,可运用本校的网络教学平台,提前发放讨论内容及作业题,在实验课中以项目提交的方式来完成实验教学。
3对接MOOC网络教学
1)MOOC兴起
网络技术的不断发展,人们更愿意使用电子产品依托网络进行学习。MOOC大规模网络公开课程(MassiveOpenOnlineCourse,MOOC)[1]是2012年在美国兴起,它作为一种大型的开放式网络课程,为学生提供免费的学习平台。随后全球的各大知名大学逐步开设MOOC课程,纷纷涌入到MOOC的浪潮中。在中国的很多知名高校也加入其中,纷纷开设MOOC网络课程,当前的coursera、udacity和edx的火热应用,实施了翻转课堂进行教学。
2)登陆MOOC
C语言程序设计的授课,为了适应新时期的教学发展趋势和教学需求,要将传统教学与在线教学平台融合,更好地使二者相互补充和促进。MOOC也将教育推上了全球化的舞台,这种变化带来的好处显而易见,最明显的一个特征是打破了教育壁垒,令教育资源平等化[2]。
3)重组设计课程内容
C语言课程登陆到MOOC,并不能简单的将课堂的内容简单,直接的传送到MOOC平台上,而是应该结合C语言程序设计课程的特点,和MOOC平台的优点,进行课程内容的整体策划,重新设计设计整门课程的体系结构。
4总结
我们要通过分析教学中存在的问题,教学模式和教学内容进行多管齐下的相关改革。改革并不能与从前的单一模式相同,要针对课程的特性,改革教学内容与计算思维相对接,改革教学模式与MOOC相对接,实现多管齐下,真正达到教育教学目的,让学习者能真正学以致用,转换思维模式,无论在哪一方面都收获良好的教育教学效果。
作者:逯柳 陈刚 孙毅 耿姝 王树芬 单位:哈尔滨石油学院信息工程与计算机技术系
参考文献:
【关键词】网络系统设计;程序设计;复杂性
网络系统设计中的程序设计并发复杂性问题是由于现今网络系统的性能和设计理念等多种因素所共同导致的,因此只有在做好前期分析工作的前提下,才能够促进网络系统设计中的程序设计并发复杂性得到有效的遏制。
1网络程序并发性与复杂性简析
网络程序并发性与复杂性是由多方面引起的,以下从环境差距过于明显、设计理念的限制、驱动模式有待优化等方面出发,对于网络程序并发性与复杂性进行了分析。
1.1环境差距过于明显
网络程序并发性与复杂性主要是因为单机环境和网络环境差距过于明显所导致的。大家都知道随着近年来高质量网络程序的不断开发,之前传统程序设计过程中存在的许多问题都被暴露出来。在这一过程中可以发现网络环境与单机环境之间的巨大差异性成为影响程序开发设计的关键。其次,并发性问题的存在实际上成为了网络程序设计发展的重要限制瓶颈,因此,如何能够对于并发性问题进行有效的解决,成为了摆在程序设计人员面前的要点。与此同时,环境差距过于明显还意味着混合性并发模型发展时间短和实际应用少的缺陷也会暴露出来,因此其对于并发性问题的解决效果还需要进一步的观察。
1.2设计理念的限制
网络程序并发性与复杂性的存在也跟之前的设计理念被软硬件功能限制有着密切的联系。通常来说网络程序的并发性问题的表现形式通常会以分布性、异构性、异步性和访问延误等形式表现出来。因此工作人员在将问题整合成一个整体后就会发现,并发性问题变得极其难以解决。其次,设计理念上的限制还会使得网络程序设计的整体效率受到非常大的影响。
1.3驱动模式有待优化
网络程序并发性与复杂性和驱动模式有着千丝万缕的联系。由于网络并发任务处理方法实际上可以根据语义将其分为反应式和前摄式两种。在反应式模型中应用程序必须通过接收到相应的事件通知,然后才能够在此基础上能够更加具有针对性的发出具体的操作指令,在这一过程中如果操作的结果是错误的,则工作人员可以从函数的返回值中即时获知。其次,驱动模式有待优化还指的是操作的错误情况通常会作为完成事件的参数,传递给应用程序如果需要同时发出多个相似的并发操作,则需要在发出操作指令时,增加一个标识参数,从而能够在此基础上对于并发操作进行更加细致的区分。
2网络程序并发性与复杂性问题应对
网络程序并发性与复杂性问题的应对应当从许多方面出发,以下从优化多线程模型、协调程序运作顺序、开发新型并发模型等方面出发,对于网络程序并发性与复杂性问题的应对进行了分析。
2.1优化多线程模型
网络程序并发性与复杂性问题应对的第一步是合理优化多线程模型。工作人员在优化多线程模型的过程中首先应当根据多线程并发模型多线程并发模型的线程调度来对其进行分别的分析。其次,工作人员在优化多线程模型的过程中应当确保线程的运行状况与应用层的控制无关,在这一过程中CPU是由调度器来进行控制的,并且调度器对于线程的调度是强制性的。与此同时,工作人员在优化多线程模型的过程中应当合理的实现CPU控制权的强制转移,从而能够在此基础上有效的规避因为上一个线程没有处理好当前线程所需要的各种数据,引发数据竞争,严重的甚因此,在对线程协作复杂或者并发性高的任务进行处理,最终可以减少系统出现崩溃的概率。
2.2协调程序运作顺序
网络程序并发性与复杂性问题应对的关键是协调程序运作顺序。工作人员在协调程序运作顺利的过程中首先应当理解到与抢占式调度相比CPU的控制权具有更强的优先度,因此这意味着只有在当前线程放弃数据处理后实际上才会将CPU的控制权转移到其他线程。其次,作人员在协调程序运作顺利的过程中还应当确保应用程序的线程操作必须经过系统调用,在这一过程中由于线程代码的移植具有很高的难度,因此实际上非常严重的影响了其普遍适应性,所以只有通过合理的协调才能够确保其运作顺序的合理优化。
2.3开发新型并发模型
网络程序并发性与复杂性问题应对离不开新型并发模型的开发与利用。工作人员在开发新型并发模型的过程中应当优先对于混合性并发模型进行应用。其次,工作人员在开发新型并发模型的过程中首先应当理解到无论是事件驱动模型还是多线程并发模型实际上都具有各自的优点和不足,因此这导致了其在实际应用中始终存在一定的局限性。对因此设计人员在开发新型并发模型的过程中应当勇于打破常规合理的将这两种模型融合在一起,最终能够期待形成全新的并发模型,最终能够促进程序设计合理性的有效提升。
3结束语
在网络程序的设计过程中并发性问题实际上是一个难以进行规避的复杂问题。因此工作人员在认清当前的技术条件下应当通过有效的提升网络程序的并发处理能力,并且在此基础上并发模型的性能进行完善,才能够促进网络程序设计效率的有效提升。
参考文献
[1]李慧霸,田甜,彭宇行,等.网络程序设计中的并发复杂性[J].软件学报,2011(1):132-148.
[2]高伟,张学红.关于网络程序设计中的并发复杂性研究[J].网络安全技术与应用,2014(12):49-51.
[3]潘珂,田勇.网络程序设计中的并发复杂性研析[J].科技致富向导,2014(27):84-85.
摘要:围绕教育信息化应用背景,在分析目前计算机程序设计类课程教学满意度现状的基础上,探究计算机程序设计类课程游戏化教学的影响因素。经调查分析得出,大部分学生都有学计算机程序设计类课程的经历和玩电脑游戏的经历,计算机程序设计类课程的教学模式乏味是学生最关心的问题,认为游戏化教学可以提高计算机程序设计类课程的趣味性,而排名、虚拟物品奖励、积分等游戏激励元素可以提升学习积极性,研究结果为计算机程序设计类课程的教学模式改革提供些许参考。
关键词:游戏化教学;计算机程序设计类课程;游戏激励元素
随着“云计算”、“互联网+”等新技术的不断出现,教育信息化也变得越来越引起广大教育工作者的重视。根据《教育信息化十年发展规划(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)为学生搭建趣味互动的计算机程序设计类课程学习平台从前文对计算机程序设计类课程的教学满意度分析、电脑游戏吸引力分析可以看出,趣味性是学生关注较多的话题,也是目前计算机程序设计类课程课堂教学的不足之处。游戏化教学思想为计算机程序设计类课程教学潜在地搭建了一种趣味互动的学习平台,教学过程游戏化组织学生在游戏规则、游戏目的、游戏反馈、竞争性任务等游戏元素中完成学习任务,通过游戏化这种潜在的动机诱导能力为学生搭建趣味性的学习平台,以学生为中心,以学生认为较具吸引力的排名、虚拟物品奖励、积分等游戏元素激励学生积极主动获取知识,以进一步提升学习效果和学习质量。未来,本研究还将结合具体的课程教学进一步完善计算机程序设计类课程游戏化教学模式创建及实践运用。
作者:王志英 单位:江苏科技大学经济管理学院
关键词: 程序设计 课程群 建设内容
引言
目前,为了调动学生在程序设计类专业课方面的主动性、积极性和创造性,越来越多的高校在教学模式上进行了改革。程序设计类课程作为计算机专业的核心课程,学生的程序设计能力是其必备的基本功之一,也是教学成果的重要考量标准之一[1]。因此,程序设计类课程群的提出与建设对目前计算机专业程序设计类课程教学中存在的一系列问题起到了很好的改良作用。
课程群[2]是指在同一学科专业下若干课程的集合。此集合要求课程之间内容紧密,联系性强,承前启后,形成一个具有较强逻辑性、内在联系性和相互促进的专业课程体系。程序设计类课程群是指与程序设计相关的课程紧密耦合构成的一系列课程。在教学实践别针对程序设计相关的一系列课程进行紧密的组合编排与重新架构,紧紧围绕专业培养目标通过此课程群的建设使程序设计相关课程一体化,突出整体优势。
1.目前程序设计类课程建设中存在的问题
1.1课程体系过于松散。
在目前各大高校中,教学内容往往注重单一课程本身的内在联系,却忽视了课程与课程之间的联系[3]。对于老师来说虽然完成了教学大纲安排的教学内容,但是学生在学习之后仍然没有形成完整的知识体系,使学生对于知识的应用仍处于混沌状态。
1.2教学内容重复,连贯性差。
虽然现在的专业课程也有考虑将其作为一个体系进行建设,对于教材的选定、教学的内容都进行了一定的联系,但是多数情况下仍处于静态联系的状态,也就是说还停留在单一化的一维联系中,没有形成一个多节点的网络群沟通。这就使得老师在教学内容中容易重复教学,也使得教学内容前后脱节连贯性差,对于学生掌握的知识架构和对课程之间知识的相关性而言容易产生断点与理解盲区。
1.3实践教学简单独立。
对于程序设计类课程来讲,目前很多高校还停留在以书本语法讲解为主,实验教学为辅的教学模式上。教材中匹配给出的语言语法概念的例子往往过于简单,对实际程序设计过程删繁就简,因此产生对于理论的学习,学生大多能够理解掌握,但是当真正需要上机实践的时候却发现无从下手。
1.4不利于学生课程学习兴趣的培养。
就目前计算机专业学生的学习状态看,厌学、逃课、挂科的现象存在于很大一部分学生当中。因为没有一个连贯的、紧密的、具有创新性和实践性的课程体系让学生发现所学知识的应用价值和课程之间的巧妙结合之处。
1.5不利于师资和设备资源的充分利用。
由于课程建设缺乏课程之间的融合性,师资力量就会出现重复利用的情况。对于高校的教学设备,除去一些不可调因素,也使得资源并没有充分利用。再加上教师水平参差不齐,学生自身素质具有一定的差距性,一个不多元的课程体系必然造成师资和设备资源的浪费。
2.程序设计类课程的改革思路
以上分析了在现有计算机专业程序设计类课程的教学内容和教学模式中所存在的问题,鉴于这些问题,课程体系的重新架构与改良势在必行。
(1)针对计算机专业人才培养目标,对所要教授的每门课程进行最清晰准确的定位,制定详细的课程教学目标。
(2)对教学内容进行整合与重新规划,建立课程群体系,在对每一门专业课知识点的联系性、逻辑性、连贯性及相互之间是否存在促进性进行研究之后,重新进行教学计划或教学大纲的拟定,形成初步的课程群教学体系。
(3)以此课程群为教学依托,以培养实用型人才为目标,改变传统的教学方法,培养学生建立自己的编程思想和创新能力及编程技巧和思维模式。
(4)在实际教学中老师与老师之间,老师与学生之间多沟通,真正实现多通路、多脉络、多节点的多维教学课程群体系的不断建设和完善。
3.程序设计类课程群的建设内容
常用的程序设计教学语言有很多,针对本科教育,不同阶段的语言教学应有层次的划分,比如一般情况下多数高校都会选择C语言作为程序设计的基础语言在大一或者大二第一学期进行教授,再加入数据结构,算法分析与设计等课程的教学,起到层层递进相辅相成的作用,这是目前多数高校都会选择的一种教学模式。
课程群建设作为计算机专业课程建设的一部分,旨在应用型人才培养上做出精准定位,针对应用型人才的培养目标,程序设计课程群应当“程序设计”为核心,重组实践与理论的知识链,注重学习兴趣的培养。
3.1课程群课程科目有机整合。
根据专业需要和各课程之间的内在联系,课程设置需要根据课程群的紧密性、连贯性、逻辑性等特点前后有序地进行编排以避免教学内容重复、知识链脱节,导致学生形成知识断点与盲区。
例如从面向三实型人才培养方向入手,首先,通过C语言或汇编语言的学习夯实基础;其次,通过面向对象程序设计或Windows程序设计进行素质培养;再次,通过数据结构、程序设计方法学、算法设计与分析的学习进一步提高能力;再通过Java程序设计、网络编程等拓展应用层面;最后,通过Web技术、PHP应用开发、Net应用程序开发、智能手机客户端等软件项目开发的学习进一步向三实型人才培养方向迈进[4]。
3.2程序设计课程群的实践体系的完善。
虽然目前多数高校都很清楚程序设计类课程作为计算机专业的核心课程,其核心的真实意义便在于较强的实践性,但是因为一些客观因素无法真正做到增强学生的实践能力,而课程群的建立则增加了实验的比例,同时也避免了实验安排的随意性。
第一,通过理论实验相互穿插的形式提升理论教学与实验教学的交互融合度,相较于目前很多高校先集中讲解理论后集中上机实验的教学模式,很大程度上加深了学生对语法等知识的理解。
第二,增加上机实验的教学课时。目前,相比对语法的理论授课,上机实验所占的比例还是较少的。虽然语法知识作为上机实验的理论基础,但是计算机培养的是将来面向企业的应用型人才,有时理论教学上的避重就轻通过实验中的设身处地往往更能达到期望的效果。
第三,以课程群建设为依托,学生的期末设计或者期末考核等经过课程群内任课教师的讨论做到多课程之间存在衔接与知识联系,则能最大限度地促使学生更多地查阅课外知识,更能动性地、自主性地、创新性地完成设计。
第四,培养学生作为一个“码农”的基本修养,包括编码能力、代码维护能力、团队合作能力、内容设计、资料收集、主题选择的锻炼及表达能力,包括写作能力、交流沟通能力。
3.3构建程序设计课程群的实用体系的方法。
高等教育最终是要为社会和企业培养并输送应用型人才,所以课程群的建立必须与当下企业与社会需求相匹配,邀请校外企业工程师等企业大牛到校内讲授目前社会上最前沿最急需的技术,通过内外结合的形式,将外部新型力量引入课程群中。
结语
计算机专业作为一个旨在培养高水平程序设计能力与编码能力的专业,除了要有好的软硬件教学条件、强大的师资力量外,更需要有一个实用的课程教学体系。我们在分析了目前程序设计类课程中存在的各种问题后,给出了程序设计类课程教学改革的基本思路,同时通过对课程群课程科目有机整合,程序设计课程群的实践体系的加强,构建程序设计课程群的实用体系的方法等程序设计类课程群建设的探究,让大家明白为什么要进行课程群的建设。
参考文献:
[1]何昭青,彭立,傅红普.基于程序设计能力培养的计算机专业实践教学体系的思考[J].湖南第一师范学院学报,2012,12(1):62-65.
[2]安德智,王秋云.数据库原理课程群建设的实践与探讨[J].中国电力教育,2010(8):41-4.
【关键词】 C程序设计教学改革教学实践
【基金项目】河西学院教学研究项目(HXXYJY-2012-020)资助。
【中图分类号】TP311.52 【文献标识码】A 【文章编号】2095-3089(2014)05-0244-02
《C程序设计》课程是目前各高校计算机专业普遍开设的第一门专业基础课程,它具有功能强大、效率高、简洁灵活和可移植性强的特点,使其在软件开发领域颇受开发人员的青睐[1]。从目前的教学情况来看,学生在学习C程序设计时往往存在着一定的问题,实际掌握的情况并不太理想。笔者在多年的 C程序设计教学的基础上,总结经验,逐渐探索出一些行之有效的教学改革措施,并进行了相关的实践,取得了显著的成效。
一、C程序设计教学存在的突出问题
第一,难入门,C程序设计前几章介绍的是运算符和表达式,如果按课本顺序来讲,这些内容足使学生产生枯燥感,从而慢慢失去对本课程的学习兴趣;第二,生源的计算机基础参差不齐,导致部分学生学习进度缓慢,每次的实践任务在规定的上机课内难以完成,越积累多,最终可能放弃;第三,教学案例的选择和教学方法的选取不当,难以提起学生的学习兴趣;第四,课时不断压缩,教学任务难以完成,教学压力越来越大,不得不减少教学内容,有些学校甚至把可以称作C语言精华部分的指针都已经取消;第五,考核方式不合理,造成应试教育效果,难以达到能力培养的效果。
二、C程序设计课程改革与实践
(一)上好第一节课
上好C程序设计的第一堂课很重要:首先讲明C程序设计的重要性;其次结合一些生动的C程序实例,展示C语言强大的功能,使学生对C语言的学习产生兴趣并狠下决心;再次 提出该课程的学习要求与学习方法,给出平时作业、上机试验、考试方式等具体要求[2]。
(二)教学模式改革
C程序设计教学模式改革以程序设计为主线,编程案例为驱动,培养高素质应用型专门人才为目标,注重分析问题、解决问题的能力的培养。该课程要求学生掌握结构化程序设计方的法和步骤,具有阅读和编写一定应用程序的能力,具有上机调试、正确运行程序的能力[3]。因此必须以学生为主体、教师为导向,利用现代化教学手段,改革《C程序设计》课程教学模式; 同时以应用型能力培养为导向,制定合理的教学大纲和教学计划,形成一套科学的课程教学体系。
(三)理论教学方法改革
课堂上采用案例教学和任务驱动教学等教学方法的有机结合,理论联系实际,有针对性地提出恰当的生活实例,让学生在一个个有趣的典型实例的驱动下,进行教学活动,引导学生逐步完成一系列任务,从而掌握了清晰的思路、解决方法和知识的脉络,并且在完成任务的过程中,培养了分析问题、解决问题以及程序设计的能力,同时拓展学生知识面。
(四)实践环节改革
1.C程序设计是一门实践性很强的课程,需要大量的上机实践。由于学校每周安排的上机时间仅仅为2小时左右,所以需要学生在上机前按照上机试验的要求,确定解决问题的思路并编写程序。这样既锻炼了学生独立调试程序的能力,又增强了学生编程解决较难问题的信心。
2.教师也要认真对待每节上机课,要细心组织安排每一次试验内容,让学生在试验前都有明确的上机目的和必要的编程准备。在实践过程中,作为教师对于上机试验内容应尽量精心设计,与所学的课堂知识结合起来,便于学生对知识的理解和消化,注重内容的实用性。 同时还要在实际操作中采用各种办法克服困难达到实验教学的效果。
3.试验结束时,学生按统一要求,提交实践程序到FTP,个别试验按老师要求写试验报告,教师把学生提交电子文件作为试验报告评分的参考依据。
(五)提高教师的效能感
教师效能是一种教师对自己的教学能力和专业知识能影响和帮助学生的信念。这种信念表明了教师对本身教学能力的自信程度。教师效能感通过对教师心理的作用影响教师的教学及其它行为,并以教师对待学生的外部行为为教师传递教育效能感的必由方式,并最终体现在对学生学业成就和人格等因素的影响上。教师效能感也会影响学生学习的积极性,影响学生的学习兴趣、学习态度和情绪情感活动。本团队强调教师必须具有效能感,方能更好的提高教学质量。
(六)教材修订
当前大部分C程序设计教材是传统的编排模式,即先介绍入门知识,然后是基础语法知识、数据类型、程序结构、指针、结构体、文件的读写。这种方法以知识点为主线,容易陷于语法细节,使学生容易判别错C程序设计课程的重点。本教学团队在以趣味性案例为目标的前提下重新编写了C程序设计教材,该教材以程序设计为主线,在阐述基本理论的基础上,组织了大量有趣的生活实例,每个实例包含了即将教学的理论知识。这样通过大量经典实例讲解和实训,使学生带着兴趣积极努力,不断培养和提高了学生的编程能力和创新精神。
(七)网络教学平台的构建
本团队努力构建了C 程序设计教学网站,该网站充分利用网络的开放性、共享性和协作性等特点和优势,对C程序设计教学内容重新进行规划和组织,为学生创造了一个集知识和趣味于一体的、包括个性化学习环境和协作式学习环境的开放性网络教学平台。将该课程的大纲、电子教案、教学进度计划、课件、经典程序源代码以及课外学习资料等教学资源上传到网站,为学生营造了一个自主学习的网络环境,将教学延伸到课堂外。这样学生既可以利用教学资源自主学习,还可以使用Email、QQ或 论坛等方式与教师进行交流,完全避免了时空限制,以达到更好的教学效果。
(八)改革单一的考核方式
本学院对C程序设计考核不再采用仅仅笔试的形式,而是笔试和机试相结合。与传统的笔试相比,上机考试可以考核学生实际上机调试程序的能力,考核分析问题,编程解决问题的综合能力,督促学生真正掌握程序设计课程的精髓。
三、近六年的期末平均成绩分析
笔者将本院计算机专业近六年的C程序设计课程的期末考试成绩进行了整理(每年选本届第一个班整理成绩),C程序设计课程期末考试中各项考核的平均成绩,按时间顺序分析发现尽管每年参加C程序设计考试的学生不同,但总体成绩大体呈现稳步上升,尤其是上机考试成绩在逐步提高,甚至出现超出笔试成绩的情况,这说明本团队对C程序设计课程的教学改革与实践取得初步成效,应用能力培养的结果逐渐凸显,诸多情况完全符合我校应用性本科建设的要求;笔试成绩尽管有所提高,但不太显著,说明学生的理论知识点掌握基本稳定。
本团队实施以上改革措施后,学生不仅对C程序设计课程有了极大的学习兴趣,而且程序设计思想和编程能力有了明显的提高。总之,教师应精心选择并钻研教材,把教材和学生实际相结合,再运用灵活多样的教学方法和恰当的教学手段,使教学过程最优化。C程序设计教学改革应该重视理论与实践相结合,在今后的教学过程中将不断地去完善。
参考文献:
[1] 谭浩强. C程序设计教程[M]. 北京,清华大学出版社,2007.
[2] 杨平. C语言教学改革探讨与实践[J] .电脑学习,2011(4). [3] 冯运仿. 《C语言程序设计》课程教学模式的研究与实践[J] .福建电脑,2012(1) .
作者简介:
祁昌平,男,(1976-),硕士,副教授,2013年国家青年骨干访问学者,主要研究方向为模式识别、人工智能、数据库技术等。
关键词:教学内容;教学手段;教学方法;考核方式
C语言是早期最经典、最强大的面向过程的程序设计语言之一。虽然现在面向过程已经全面转向面向对象,但是C本身的中级语言的设计理念以及对现有VC/C#等语言的深刻影响,使其至今仍是程序设计入门的首选语言,也是工科院校计算机专业学生接触的第一门程序设计语言。对于计算机类专业学生来说,一旦掌握了C语言,就可以较为轻松地学习其他任何一种程序设计语言,为后续的面向对象程序设计以及Java程序设计等语言的学习打下基础;对于其他非计算机专业的工科学生来说,比如电子、机电专业来说,该课程为学生用计算机编程解决实际问题提供了方法,是学习单片机技术教学的基础和重要工具。
一、C语言教学中面临的问题
C语言程序设计是一门基于dos操作系统下的面向过程的程序设计语言,随着面向对象语言的开发,C语言在界面交互性上逊色不少,作品上也不如Flash、三维动画效果吸引眼球,难学、难懂、难以应用的课程,对学生越来越缺乏吸引力。针对这种状况笔者认为,更新教育观念、探索新的教学模式才是根本出路。笔者根据多年的教学经验,对C语言程序设计课程从教学内容、教学手段、教学方法、考核方法方面进行了一系列的创新改革。教学内容主要解决如何调动学生积极性,激发学生创新能力,如何提高学生的创新能力、实践能力、研究能力、发现问题和解决问题能力等综合素质;教学方法主要解决如何实现“以人为本”,分层次教育,如何通过引导、启发等方法,激发学生的发散性思维。同时要利用目前课堂和实验教学在培养学生创新能力和实践能力方面的优点,利用大学生实训基地,为学生的创新和实践能力的锻炼和培养提供一个良好的平台。
二、教学内容的创新
课程内容的选取与组织是课程教学改革的基础。人才培养方案对C语言程序设计教学内容进行重新整合,把课程学习划分成培养学生的基本程序设计能力和培养学生的专业程序设计能力两个阶段。
第一阶段安排在大一第一学期,主要针对没有程序设计经验的大一新生,重点讲授C语言的基本知识,包括三种基本结构、数组、函数的概念。在第一阶段教学中,笔者采用案例教学方法结合具体的程序实例,创设情境,引导学生自己总结掌握C语言的基本语法和程序设计的基本方法。第一阶段的学习结束的时候,学生可以具备基本的程序设计能力,独立编写具有初等难度、几十行的程序,并且能够较顺利地完成程序调试与测试。第二阶段教学放在大一第二学期初,针对具备基础程序设计能力的学生,重点培养学生的专业程序设计能力。在第二阶段的教学中,以学生为主体、以教师为引导,采用国家火炬计划河北省软件人才工程实训课程,使学生融会贯通所学知识,完成一个具体的项目,以达到提高学生程序开发能力的目的。迄今为止,学生完成的项目包括“银行储蓄管理系统”“彩票信息查询系统”。教学实践证明,这种理论和实践技能并行的教学模式,更加有助于学生的创新能力的提高,使学生在不断实践中掌握技能,在技能学习中提高基础理论。
三、教学手段的创新
在学习过程中除了发挥教师的引导作用,还需要充分调动学生的参与主动性。在授课期间灵活采用多种教学手段,如:自学、演示、对比、课堂提问、学生演练和讨论等,通过不同方法,寻找创意思维“契机”,安排创意铺垫内容,培育学生的创意萌芽,营造创意环境,引发学生争鸣,为学生提供更多的思维空间,诱发学生的思维灵感。例如,在教学中讲解“循环结构的循环嵌套”的时候,提出马克思手稿中的数学题的案例:伟大的思想家马克思的手稿中有这样一道有趣的数学题:有30个人,其中有男人、女人和小孩。他们在一家饭馆中吃饭,共花费50先令。如果每个男人吃饭要花3先令,女人要花2先令,每个小孩要花1先令,问男人、女人、小孩各多少人?先提出问题,引导学生分析、讨论案例,提问学生运用数学知识完成案例提出的问题需要进行哪些操作,这样学生就会比较有兴趣,课堂气氛就活跃起来。然后帮助学生从案例分析中理解并掌握什么是多重循环,并且如何使用双重循环解决问题,最终完成程序的编写。
在学习的第二阶段采用开放式训练教育方式,利用专题设计和课外指导方式,鼓励学生课外自主进行训练。如:完成的项目“彩票信息查询系统”,教师提出设计方案,学生完成基本功能以后,自己可以对其他功能进行完善。
四、教学方法的创新
课程每个章节内容结构主要由三部分组成:
知识点:介绍本章需要掌握的知识或技术。
应用案例:介绍本章知识应用的案例。
创新训练:针对具体的问题,应用本章技术来完成知识点的应用。
在整个教学过程中,教师采用框架式教学,像建筑工程师修建筑一样,先采用精讲的方式,让学生建立整门课程的知识框架;接着通过案例教学、项目式教学等多种教学方式,让学生逐步去进行细节知识点的填充;最后通过综合训练方式,完成整门课程的学习。
例如,在讲解C语言程序设计中的函数时,搭建出例如综合排序等程序的框架,给学生留出函数,让学生自由开拓思想,独立完成一些小型实例的编程,经过具体知识点的训练后,还要重点进行综合知识的应用训练,开展一系列的创新应用,以达到知识综合运用和培养创新能力的目的。
五、考核方式的创新
传统的C语言程序设计考核模式一般以标准化的笔试题为主,这种考核方式侧重语法知识的考核,忽视编程实践能力的培养。为此,笔者改革传统的考核方式,将考核分为平时实验和期末考核两部分。平时实验成绩考核的是学生每一章知识,实训作业就是在每一章节结束的时候,布置相关的习题,学生利用业余时间编程,并且在实训期间进行调试,调试成功后上传到服务器上。期末考核成绩采用的是教研室开发的上机考试系统。上机考试系统模拟C语言二级考试建立了知识面齐全、题量充足、难易度合理的试题库,采取随机抽题的形式重点考查学生的程序设计能力和程序调试能力。这种考核方式督促学生在平时学习中加强对编程举一反三的实践环节。实践证明,这样不仅能有效培养学生的实践编程能力,还激发了学生动手实践解决问题的兴趣。
总之,经过不断的摸索与实践,通过以上的教学方法与教学手段的改革和实践,不仅提高了学生的学习兴趣,让学生从枯燥无味的语言学习中解放出来,从被动学习走向主动学习,同时也培养了学生分析问题、解决实际问题的能力,充分发掘了学生的创造潜能,锻炼了创新和协作精神。
参考文献:
[1]郭芹.对高职高专计算机专业程序设计教学的思考[J].中国科技信息,2008(1).