摘要:针对程序设计课程考核办法的现状,分析现存课程考核办法使课程教学过程偏离课程的培养目标,提出以技能为导向的全新课程考核体系。该体系通过3个循序渐进的考核指标:开发环境的使用、TLOC(Total Line of Coding,编程累计行数)以及SLOC(Source Line of Coding,单个程序行数)来引导教与学,使学生具备较强的编程技能、计算思维和创新思维能力。
关键词:程序设计课程;考核体系;TLOC;SLOC;课程设计
考核是评价学生课程学习效果及验证课程培养目标的有效手段。考核内容和考核方式的设定对于课程的教学过程会产生一定的导向作用,课程考核体系会在本质上影响课程的培养方向,决定课程的培养目标是否合理并得以实现。合适的课程考核体系能够指引学生以正确的方式学习课程内容,提高学生的学习兴趣,督促学生积极主动地学习,更能修正课程的教学方向及培养目标,使之适应时代需求,满足创新型、开拓型人才的需要,指引课程向正确的、先进的方向前进;而不合理的考核体系则会牵制教学活动偏离课程的培养目标,偏离新时代对课程的需求。因此,建立合理的考核体系对于学生的培养和课程的进步至关重要。
1 程序设计课程的特点及现有考核办法的不足
程序设计课程作为我国高等教育培养计划中必修的计算机基础课程,有很多不同于其他课程的特点:
1)普QXprO8Od20kbf6HqCLy6Ue71uMyPTWiFRVD44cJ6Jg8=及范围广,授课对象众多。
在我国,文、理、工、医、农、法等高等院校绝大多数专业学生都必修程序设计课程,并且针对不同专业开设了包括C、C++、VB、C#等多个分支,课程的授课范围很广,授课对象众多。
2)课程的实践性强,实用性强。
程序设计课程中的大部分内容需要学生进行上机实践才能更好地理解和掌握,具有很强的实践性。同时,该课程内容在学生的课程设计、毕业设计、各种竞赛以及职业生涯中都得到了广泛应用。
3)以培养学生的编程思维和开发技能为目标,与其他语言课程有巨大的区别。
程序设计课程的教学虽然依附于一门具体的程序设计语言,但是与传统的语言课程有很大的区别:程序设计课程的目的不是教授语言,具体的程序设计语言在该课程中只是一个工具,课程不仅要求理解、记忆该门语言的词法、语法等内容,其最终目标是通过一门程序设计语言,培养学生的计算思维和编程设计技能,培养学生使用计算机技术,尤其使用程序设计和软件开发技术来解决实际应用问题的能力。因此,这与传统语言课程的课程要求和课程目标是大不相同的。
课程的考核体系要吻合课程的特点,体现课程的培养目标。然而,当前程序设计课程的考核体系还存在很多不足。
目前,国内大部分高校对于程序设计课程的考核包括两个部分:平时作业(或实验任务)与期末考试。对于平时作业,部分高校实现了电子版的提交,但更多学校还是使用纸质虚拟编程,教师根据学生提交的电子文档或者纸质作业进行打分;期末考试多数学校采用的是纸质方式,更多是考核学生对一门程序设计语言的词法、语法的掌握情况,部分学校期末考试采用了机考方式,但也仅仅是在传统纸质考核的基础上增加了对开发环境简单应用的考查。
这种考核体系使得教师的教和学生的学过分集中在程序设计语言本身,教学过程中过多纠缠于语言细节,对学生编程技能和计算思维涉及不多。很多学生在学完该课程之后依然不会编程,甚至对开发环境的使用都不是很熟悉,如调试和帮助都有很大问题,更别提借助程序设计技能来辅助毕业设计、解决实际应用问题。因此,针对课程的培养目标和时代对创新型人才的需求,设计以技能为导向的程序设计课程考核体系至关重要。
2 以技能为导向的程序设计课程考核体系
以技能为导向的程序设计课程考核体系包括3个阶段的考核,分别为初级的开发环境使用情况考核、中级的基本编程技能考核和高级的开拓创新技能考核。每个考核阶段有其独立的考核指标,以下对这3个阶段进行详细介绍。
1)开发环境使用情况考核。
教学过程中,大部分教师都有过这样的经历:课程马上要结束了,学生还不会调试程序,甚至连简单的编译错误信息都读不懂,不会使用帮助来辅助自我学习。由于大部分开发环境是英文版的,不可否认造成这种状况的原因之一是学生的英文功底不够扎实。但如果把全部原因都归结在外语水平上就太过牵强了。笔者认为,造成这种后果的最主要原因还是学生在真实开发环境中历练太少,实践时太过依赖教师。为了避免发生这种状况,以技能为导向的程序设计课程考核体系中的第一环节就强调学生对于开发环境的使用。
开发环境使用情况的考核包括常用菜单的使用、怎样使用MsDN或网络资源获取帮助及调试技术,其中尤以获取帮助和调试技术为重。
开发环境中的常用菜单基本在经历过一到两次实验后学生就能熟练使用,因此这部分内容的考查一般不成问题,考核题目可以设计为新建一个程序文件并最终生成可执行文件等。
强调获取帮助的能力考查主要是为了实现学生的自我学习和自主学习,只有当学生能够具备充足的获取帮助能力,才能够在自我实践的过程中随时解决遇到的问题,提高其自主学习、挑战难题的积极性和信心。例如,在一次考核中设计的题目是“编写C程序实现声音文件的播放”,大部分同学从未见过这样的要求,大多数教材中也没有涉及多媒体的处理,因此就要求学生能够使用开发环境的MSDN或者网上提供的函数手册,甚至是网络论坛上某些程序爱好者的帖子来找到恰当的解决办法。
调试技术是大多数学生不太熟悉、不愿深究的问题,这种情况的出现与课程日常作业和书中例题太相似、实验任务难度不高、实验教师指导过程大包大揽有很大关系。实验任务难度太低或者与书中例题太相像都会失去调试的必要性,而实验过程中一旦程序出现问题,很多教师根本就是一手包揽直接帮忙把程序调试正确。久而久之,学生轻视了调试技术的重要性,即使教学过程中教师强调调试技术并专门设计题目来教授,但是调试技术的重要性仍无法深入学生内心。所以,新的考核体系中,除了在日常实验任务中增加需要进行调试才能解决的题目,例如,提供一些包含简单的算法或逻辑错误的程序让学生借助于调试来完成修正。还增加了对调试技术的专门考核,如借助于条件断点读取循环过程中满足某一个条件时某个变量的当前值等。
通过对开发环境使用情况的考核,敦促学生熟练使用开发环境,是课程后续过程中快速、正确解决问题所需的基本技能。
2)基本编程技能考核。
基本编程技能是指学生能够熟练应用程序设计中的各种控制结构,熟练使用程序设计语言中的各种语句、函数等,强调基本的计算思维和编程思想的培养,注重借助于程序设计技能完成初级应用问题求解的能力。此阶段的考核指标为TLOCt(Total Line of Coding,累计编程行数)。
由于程序设计课程实践性强、学习难度大,学生需要通过大量的练习才能成功培养其自身的计算思维和编程思想。因此,基本编程技能考核阶段跨越了几乎整个课程学期,涵盖了几十甚至上百个简单应用题目的求解。例如,2012年,西北工业大学程序设计课程组规定学生完成60道编程题,TLOC必须大于800行才能获得及格成绩;如果学生想要获得90分以上的成绩则必须完成100道编程题,TLOC必须大于1500行。对于此阶段如此大的实践强度不仅需要学生全力以赴、教师全力配合,更需要相关教学软件的支撑。对此,西北工业大学程序设计课程组开发了在线作业管理和自动评阅系统,根据学生学号不同向其个人网络硬盘空间中分发不同的题目,有效地避免学生之间互相抄袭作业的现象;通过在作业完成过程中设置游戏关卡和恰当的激励措施来调动学生的实践积极性;通过在课程的网络社区中提供针对实验题目的视频帮助、文本资料等建立学生解决问题的自信;通过使用网络硬盘实现作业分发、提交及保存等一系列管理工作来解决教师难以管理海量作业数据的难题;通过使用作业在线自动评阅功能将教师从繁重的作业批改工作中解脱出来。
以上各种措施保证了对学生基本编程技能的公正、客观的考核。学生经历此阶段后,具备基本的计算思维和编程思想,对程序设计的含义有了较深的理解,
3)开拓创新能力的考核。
第二个考核阶段过后,学生对语言的使用基本没有问题了,解决简单的应用问题也无压力。但是,课程的培养目标是希望学生能够借助于程序设计来解决实际应用或本专业中较大、较复杂的应用问题,甚至解决其职业生涯中可能遇到的问题。因此,学生具备基本编程技能之后,仍需对其进行拔高培养和更高要求,即要求学生具备一定的开拓创新能力,具备使用程序设计知识解决较大、较复杂应用问题的强计算能力。而用来衡量学生开拓创新能力的主要指标是学生使用程序设计解决实际应用问题的难度和复杂度。用来描述其所解决的问题难度和复杂度的标准当属SLOCt(Source Line of Coding,单个程序代码行数),即为了解决这个应用问题而编写的代码行数。一般来说,SLOC指标值越大,代表该程序所解决的实际应用问题难度和复杂度越大。因此,考核体系中借助于SLOC作为此阶段的考核指标,如2012年,西北工业大学程序设计课程组就规定学生必须完成一个SLOC大于200行的project才能及格,必须完成一个关联Windows、OpenGL、图形与视觉、机器人专题之一且SLOC大于200行的project才算优秀。
因此,在此考核阶段借鉴国外先进的计算机教育理论,采用课程设计的方式来考核学生的开拓创新能力。教师提出对学生课程设计的技术、工作量等硬性要求后,提供给学生各种难度系数、各个专业领域的不同设计题目,并允许学生根据自己的专业和爱好等实际情况进行课程设计的自主选题,学生应提交解决某一个实际问题的程序或软件。课程设计相较于传统的期末考试有下面两个优点:
①进行课程设计时,学生面对一个实际的应用问题,需要通过思考来决定该如何使用课程中所学知识进行问题的求解,培养学生的编程技能和开拓创新思维。
②课程要求学生完成的课程设计作品是针对初具规模的实际应用问题进行求解,这个作品的制作将持续相当长的时间,甚至整个课程的学习周期。学生能够在课程的从始到终都有一种主动学习的动力,能够把原本的期末考试压力分散在整个课程设计制作周期里,很大程度上杜绝了传统考试中学习过程中松散、考试前突击的不良学习方式,最大程度上确保了课程的每一个环节都具有良好的教学效果。
为了将课程设计顺利地进行下去,教师需要在课程设计过程中以现场技术指导、网络教学等多种途径给学生提供技术支持,建立学生完成项目的自信。同时,大量的课程设计作品批改也会耗去教师的大量精力,因此课程组开发了相关软件来辅助课程设计作品的批阅。
新的课程考核体系中取消了传统的期末考试,但通过3个考核阶段的扎实训练确保了学生在学习过程中做到脚踏实地,获得每一个学习阶段的良好效果,最终促成课程培养目标的达成。
3 实行效果
以技能为主导的程序设计课程考核体系从2009年开始在西北工业大学部分专业实行,到2012年已推广到全校的课程教学中,这种考核体系对学生和教师都产生了很大的影响。
每个学生平均一个学期完成超过80个题目,用来完成基本编程技能的训练,TLOC指标值为1500,达到了CC2005建议标准。学生所完成的课程设计题目涉及界面编程、数据库编程、网络编程、多媒体以及图形图像处理等各种领域,SLOC平均在300行以上。通过这种考核体系的考核要求后,学生具备较强的编程能力和开拓创新思维,能够积极参加各种软件竞赛,申请软件专利等。
教师在教学过程中不再纠缠于语言的具体细节,而更加注重培养学生的程序设计方法和开发技能,教师的教学过程更加清晰,主次分明。同时由于新的考核体系下有相关教学软件群组的支持,教师用以管理和批改作业、处理期末考试等事宜的工作量大幅减少,从而有更多的精力去思索课程的前进方向。
4 结语
采用以技能为主导的课程考核体系对课程进行考核,在我校试点运行效果良好。它克服了传统考试中的考前突击、课程效果不佳等弊端,强调学生编程技能和开拓创新思维的培养,考查了学生使用计算机工具进行实际应用问题求解和自主创新的能力,这符合课程目标和课程发展趋势的要求,也贴合计算机教育的发展方向。
(见习编辑:刘丽丽;编辑:郭田珍)