张艳梅 姜淑娟 袁冠 鞠小林
摘要:分析国内高校“.NET编程技术”课程教育现状,结合卓越工程师培养计划的要求,提出旨在提升学生实际软件开发技能的“.NET编程技术”课程教学实施方案。
关键词:.NET编程;教学评价体系;教学改革
0.引言
Microsoft.NET是微软开发的一套具有革命性的软件和服务平台,利用互联网为基础的计算和通讯手段,通过先进的软件技术和众多的职能设备提供更简单、更个性化、更有效的互联网服务。.NET框架编程技术是面向下一代企业级的应用数据计算平台,正在广泛地应用于企业级应用、电子商务(政务)、远程教育等应用领域的开发,是当前主流的软件开发平台之一。可见,作为培养软件开发人才实际技能的“.NET编程技术”课程的重要性日益凸显。
1.“.NET编程技术”课程教学现状概述
目前,国内高等学校的计算机专业或相关专业均开设至少一门程序设计语言课程,并且通常面向软件开发人才培养,开设一批编程技术课程,其中包括“.NET编程技术”课程。然而,与其他很多工科课程一样,“.NET编程技术”课程是一门理论和实践并重的核心技术课程,课程的教学组织存在一定的难度,要取得好的教学效果,面临很大的挑战。众所周知,多数高校教师缺乏实际软件开发经验,对课程教学内容存在定位不明确、课堂教学空洞、知识与软件开发实践脱节、实践教学环节薄弱等问题。此外,学生自身也存在若干问题。例如,学习目标停留在掌握语法和个别编程技巧上,缺乏社会活动体验和软件实际开发经验,导致最终学习结果是学生只掌握零碎的程序设计语言的语法知识,很难将这些知识与工业界实践结合起来。因此,“.NET编程技术”教学改革重点是探索如何结合工业界实践设计教学内容,合理组织实践教学,构建科学的教学架构,使得其他实践类课程也可以从中得到启发。
近年来,高校内广大投身实践类课程教育的工作者、研究人员,以及软件产业界工程技术人员,均从不同角度对该类课程知识点设计和教学实施进行了积极思考与广泛探索,取得了一些研究成果。例如,结合用人单位的实际需求设计教学内容,在实践环节引入国内培训机构的成功案例,采用订单式人才培养模式,提升了学生的实践能力和实践教学效果。针对软件企业对人才实践能力的需求,采用与产业界实践相类似的案例组织教学内容。笔者所在的教学研究小组,基于日常的教学实践,提出了一种融合思维导图与知识图的KM教学方法,用于组织教学,在教学环节安排方法上,提出一体化多层次问题启发式教学方法;在实践教学平台构建方面,研究人员提出了利用校园网整合课程教学资源,实现师生互动、资源共享的目标。
2.“.NET编程技术”课程教学存在的问题
通过对中国矿业大学、南通大学、南京大学、东南大学等国内高校的软件工程实践类课程教学调研,结合多年的“.NET编程技术”课程教学实践,我们发现虽然教师对课程教学进行了广泛的改革,但并未取得公认的好的教学效果。调查发现,学生普遍对.NET在实际如何应用没有直观感受,造成的结果就是学生只是了解到.NET编程的基本语法,编写的程序并不能设计开发一个像工业界提供的应用软件或工具软件那样“有用的”软件。
2.1课程教学内容脱离工业实践
目前的教学现状之一是教师偏爱讲授理论和方法,缺少与产业界密切联系的实例,对于同样没有实践经历的学生而言,课程听来空洞无趣也就不足为奇了。目前的教学现状之二是教师臆想出一些脱离生产和生活实际的实践项目,并且在实践环节中,学生完成实践项目的目的只是为了应付任课老师检查。可见,学生和老师很难得到系统性锻炼,并且也与产业界软件行业严重脱节。
此外,现有的“.NET编程技术”教学素材大多是任课教师自己设计实例,或者从一些互联网站(如开源网站、软件公司网站)下载的小项目。作为整个课程来讲,不同素材之间大多是孤立的,联系松散,缺乏系统设计,不利于培养学生的实践技能。这样导致学生掌握的知识是零散的、不系统的,缺乏对课程的整体把握。
2.2缺乏完善的课程教学平台
目前很多高校没有“.NET编程技术”课程的教学平台,即便有些高校搭建了相应的教学平台,但是存在很多问题,如内容枯燥乏味、表现形式单一、功能无法满足学生需求、访问量较低、互动性不强等。因此,我们需要搭建一个更加完善的“.NET编程技术”课程教学平台,用以提高该课程的教学效果。
2.3缺乏科学的教学评价体系
目前,学校采用的评价系统针对的是全校开设的所有课程,参与评分的是作为教学过程中主要参与者的学生,他们属于利益相关方,因此,由于学生在评分时容易受主观因素的影响,并不能进行客观的评分。此外,通过调查发现,年轻教师会由于担心学生打分太低影响其职称评审和绩效考核等,往往导致在平时的教学过程中迎合学生的满意而降低课程的学习要求。这种互惠互利的局面并不利于提高课程教学,因此现有的评价系统片面,不合理。
3.教学改革探索
3.1以培养工业应用人才为目标,构建合理的教学师资结构
课程目标:培养学生具备从事C#编程所必需的基本知识和基本技能;初步形成解决实际问题的能力,为从事程序开发工作打下基础,并注重渗透思想教育,加强学生的计算机信息管理职业道德观念。
教师是组织和推动课程教学的主体。现阶段高校实践类教师多为年轻的博士,他们思维活跃,能适应当今社会知识快速发展的趋势,然而这些年轻教师基本上缺乏实际软件开发经验。我们注意到,一些大的IT企业,出于各种目的,往往很乐意派出企业的工程师教会学生使用他们的软件产品。因此,可以将高校教师、企业里熟悉.NET的人才结对,充分利用双方的优势,教会学生真正的工业应用软件设计、开发和测试等。
以中国矿业大学为例,通过实践,我们提出一条主讲教师与助教结对的教学模式。首先,借助搜索引擎、博客、微博、微信等媒体,了解一些工业界目前活跃又热心教育的IT人士;其次,通过沟通说服对方愿意承担助教角色,基于教学改革研究课题承担一定的助教费用。这样可以便捷地构建“主讲老师+助教”这样的结对教学组合。具体而言,主讲教师负责基础理论讲解,与来自工业界的助教协商设计实践环节内容;学生完成实践环节练习,并通过博客形式提交练习成果报告;助教则负责基于自身在工业界摸爬滚打的工作经验,点评学生提交的博客报告。这样做的好处在于,可以让学生直接听到来自工业界反馈的声音,并根据助教的点评意见改进实践内容。
3.2紧密联系工业需求,构建课程教学体系
我们将“.NET编程技术”课程的教学体系划分为个人技能训练(PSP)、结对编程、团队开发及项目管理4大模块。高校学生的人才培养目标可以分为科学型、工程型、应用型3种。教学时,我们基于教学大纲的基本要求,同时根据不同的培养目标,设置不同的要求;针对上面4大模块,划分出详细的知识要点,对不同的人才培养目标,划分出必须掌握的关键知识域,在理论教学部分重点开展教学。
对于“.NET编程技术”类课程,实践教学内容组织尤为重要。学生们期望得到适应工业界需求的技能训练,为此需要系统搜集和组织实训素材。素材的选择以助教为主,与主讲老师协商选取工业界实践软件开发案例,作为学生实训素材。在教学过程中,我们通常采用3种途径构建这些软件素材:
(1)从开源网站下载典型的开源软件。Github、SourceForge等网站通常能提供各类软件的历史版本,学生可以选择重构软件,也可基于源代码上进行迭代改进。
(2)从软件应用市场获取可运行版本的软件。安排学生安装试用,进而抽取出软件实现的实际需求,进而采用逆向工程方法,让学生采用.NET编程技术模仿已有软件来设计开发新软件。
(3)利用历次教学过程中学生开发的软件。主讲老师把历届学生完成得较好的.NET项目收集起来,用于下一届学生二次开发。以中国矿业大学为例,我们利用Github将优秀的学生项目Fork到老师的Github的Repository的某一分支,这样下一届学生开发时,可以从主讲教师的Github的Repository分支Fork到自己Github的子分支,然后基于Github开展个人技能训练(PSP)、结对编程、团队协作开发,同时利用Github进行项目管理。
上述3种素材构建方式各有利弊。第1种方式的好处在于可以直接获得工业软件的源代码,从而便于学生模仿,适用于学生初学.NET编程阶段;第2种方式由于需要学生试用软件,对学生的知识结构、编程能力、实际项目需求分析能力、软件架构能力有较高的要求,适合于结对编程、团队开发的项目;第3种方式的好处有二:一是学生可以借助Github中管理的历史版本信息,看到该软件项目开发过程中的历次提交信息、Bug修复信息,有助于避免犯同类型错误,二是主讲老师可以很熟悉该软件项目,在教学和实验指导过程中可以更有针对性地加以引导。
3.3实训驱动的组织教学
在构建科学的教学知识体系和实训素材库之后,就可以设计教学活动,科学地组织教学顺序。
“.NET编程技术”课程着重培养学生的实际动手能力,同时要求学生满足一定的工业需求素养。我们的方式是通过科学组织教学,基于实训项目,培养学生的实践能力,大力推广“做中学”教学模式。为培养学生的创新能力,根据软件编程人员工作岗位职业能力的需求,围绕软件编程人员应掌握的工作任务,同时对应于前面划分的4组课程教学模块,我们从实训素材库中分类选取其中的4个实训项目。在选取实训项目时,保证每个项目之间不是彼此孤立的,它们能够系统考核所学的知识点,能够使得学生对课程进行整体把握。同时,我们对每个项目都给出了目标和要求,由学生自行选题,进行程序设计。
在不同教学模块的项目中,我们分别提出了不同的要求和需要学生回答的问题,学生必须以博客形式,写出阶段性工作报告。教学中,我们以工作任务为中心组织课程内容,让学生在完成项目过程中来构建相关理论知识,并通过项目的实现来形成相应职业能力,充分发挥学生的学习主观能动性。由主讲教师、助教点评学生提交的博客,同时用加分形式,鼓励同学们开展博客互评。这样做的好处在于:在点评的过程中,助教和主讲教师可以引导学生理论联系实际,应用课本中的语法知识来解决实际编程问题,特别是助教可以将其工业开发经验,以点评的形式更直接地传授给学生,让学生理解和接受这些知识、经验的时候,不再感到抽象和枯燥。
以中国矿业大学为例,我们通过“项目的提出”,分解出“能力目标”,联系“日常典型案例”,引出基本知识点,结合知识点掌握“分解活动”操作要领。以上工作完成之后,提出项目要求达到的目标,使学生独立(或者分组)实现“项目目标”,结合项目的操作过程,最后完成实训体会与总结。采用实际项目导向教学,学生在课程学习中思路清晰,项目目标明确,学习积极性高,在已经实施的教学质量跟踪调查中,学生反馈效果良好。
3.4“.NET编程技术”课程教学平台构建设想
目前我们利用互联网即时通信技术(IM),实现了同学、主讲教师和助教的实时沟通、资源共享;利用互联网内容发布技术(博客平台),实现了同学作业报告和点评互动;利用软件版本控制(Github)技术,实现了实践项目的迭代开发;利用Outlook软件的RSS服务,实现了同学博客提交与点评的跟踪;利用办公软件(Excel),实现了同学们平时成绩和总评成绩的加权求和及成绩自动发布;利用免费问卷调查软件,实现了期中和期末的问卷调查。通过上述各教学环节的实践,厘清各项需求。为了进一步提高“.NET编程技术”课程教学网络化和自动化水平,我们需要构建一个教学平台,以整合上述教学需求。
教学平台建设总体目标是教学资源共享(教学大纲、课件、课程学习资料、讲课视频等),系统交互(练习试题发布、作业发布、答疑),项目实践(工具软件及其教程、实验对象程序、实践操作规范及实训任务),课程问卷调查,提供内容服务(RSS)等功能。此外,该教学平台还能与Github实现无缝链接。
教师登录平台以后,可以直接看到学生提出的问题,并给予解答。除此之外,学生和学生之间、学生和教师之间还可以在该平台中进行群体交流、讨论,充分体现“师生交流、资源共享”的特点。“.NET编程技术”课程以发布消息的形式体现在线交流共享业务,帮助教师上传资料,以辅助教师与学生的课堂教学,信息双向流通,构成“师生交流、资源共享”的交流形式。学生可以将自己的疑问、心得体会等信息发布到平台,达到共同讨论交流的目的。师生交流、资源共享贯穿于整个“.NET编程技术课程的学习过程中,方便教师和学生在使用该平台的任何时候都可以进行交流,进而提高该课程的教学效果。
3.5构建科学的教学评价反馈机制
如何评价学生的学习过程?我们的做法之一是引入助教参与设计实践素材和作业点评,可以一方面用工业界真实案例激发学生的学习兴趣,另一方面实现针对性的点评。调查表明,有“干货”的点评也是学生喜闻乐见的。我们的做法之二是建立QQ讨论群,由助教和主讲教师针对学生学习和作业中存在的共性问题,在QQ讨论群中集中开展讨论,集中答疑。我们的做法之三是鼓励学生、团队之间开展学习竞赛。通过比赛编程速度、程序质量(Bug数量)等,每周在主讲教师的博客上,以图形形式公布每个同学的得分,让同学们直观感受竞争的压力。借助教改经费购买一些奖品(如淘宝定制的T恤、计算机相关的编程书籍等),每学期开展2次优胜者颁奖总结大会,给优胜者实物奖励。
如何评价主讲教师和助教的教学组织活动?我们采用了一种灵活的调查问卷方式,分别在学期中和学期末开展2次问卷调查。期中问卷设计3个主要问题:①你觉得主讲教师和助教需要坚持做的是哪一件事情?②你觉得主讲教师和助教需要立即停止做的是哪一件事情?③你觉得主讲教师和助教应该开始哪一件新的事情?期中问卷的目的是为了让讲课教师及时对教学方式做出调整,使得教学更贴合学生的需求,也有助于平息学生中的不满,使得学生感受到自己受到重视,从而保持参与学习的主动性。期末问卷关注于当前学期的教学效果,用于对教学方式的整体评价。无论期中问卷还是期末问卷的设计,我们都强调与学生的学分无关,与教师的绩效考核无关,避免调查结果的偏向性,以尽可能做到客观公正。
4.结语
通过对“.NET编程技术”课程的传统教学模式所存在的问题进行剖析,我们对课程的师资结构、教学体系、教学内容组织、课程教学平台、教学反馈机制5个方面进行了详细的论证,提出了符合教学规律的改革措施。经过2届的教学实践,我们培养出近200名熟悉.NET编程技术的学生,取得了良好的教学效果。