软件工程专业编程语言课程群教学中的问题与对策初探
打开文本图片集
摘要:编程语言课程群在培养学生编程能力中具有基础性作用。该文首先分析了软件工程专业编程语言课程群教学中存在的主要问题,然后提出了改革编程语言课程群教学的几点具体措施,这些措施对于提高学生的编程能力具有重要作用。
关键词:编程语言;课程群;编程能力;过程化教学管理
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)25-0140-02
Abstract: The curriculum group of programming language has basic function in developing students" programming ability. The main problems existing in the programming language curriculum group teaching are analyzed, and some concrete measures for the reform of programming language course group teaching are posted. these measures are important to improve the students" ability of programming.
Key words: Programming Language; Curriculum Group; Programming Ability; Teaching Process Management
1 引言
编程能力是软件工程专业学生应具备的核心能力之一,它的培养是通过一系列课程来实现的。编程语言如C语言、Java、Web程序设计、Java Web等组成了编程语言课程群,这个课程群在培养学生编程能力中具有基础性作用。编程语言课程群在编程能力培养的重要性已受到广泛认同,在我校新修订的软件工程人才培养方案中,为了适应应用型技术大学转型发展需要,编程语言课程群地位更加突出,特别是作为基础的第一门编程语言教学时数大大增加,同时调整了实验学时数,基本上理论与实验学时数各占一半,而且鼓励教师在实验室上理论课,加大了学生动手实践要求和机会。
近年来,我校在编程语言群教学工作取得了一些成绩,如:公开发表了十余篇编程语言教学改革论文,多个编程语言课程改革项目获得省级、校级立项建设,出版了几部编程语言自编教材或教学辅导书等。尽管如此,目前编程语言课程群教学还存在不少问题,不适应学校向应用技术大学转型发展的需要,不适应编程能力培养的需要。在教学中我们发现至少下面五个问题比较突出。
(1)编程语言课程群的教学缺乏统一管理,部分教学内容重叠
编程语言课程群的教学工作缺乏统一管理,各门课程教学各行其是,课程之间部分教学内容重叠,课程之间的衔接不够。从总体上看,编程语言群中各编程语言的语法基础具有一定的相似性,如C语言与Java(或C++)。Java是在C语言的基础上发展起来的,语法基础与C语言相近。若在上Java课程时,对其前面的语法基础介绍与训练太多,将无法用更多的时间来介绍面向对象设计、GUI、异常处理、多线程、网络等高级主题;同时,对学生已经有一定基础的语言基础进行过多的重复,会降低学生的学习积极性和学习兴趣,甚至产生厌学情绪。
(2)第一门编程语言的基础不牢固
学好第一门编程语言相当重要,但是万事开头难。若第一门编程语言学得好,将对后继编程语言及其他课程的学习奠定基础,就可以“举一反三,触类旁通”;反之,就可能是“基础不牢,地动山摇”。目前通常选用C语言作为第一编程语言,C语言对初学者来说是一门较难的课程,学好它并不容易,需要学生用心学习才行。在教学过程中我们发现,一些学生一开始学习不上心,日积月累,问题越来越多,就容易产生厌学情绪。更重要的是,C语言的语法严谨,不能随意编写程序,少数学生从课程开始到课程结束仍然写不出几个正确的程序,总是包含语法错误或逻辑错误。有的学生阅读、编写、调试程序的时间与精力不够,软件开发平台(如:Eclipse)使用不熟练,软件工程基本素养的训练和培养不够。
(3)教学过程化管理不够
不注重学习过程的考核,期末笔试所占学期总成绩的比例大(占60%),而实验成绩占的比例小(占20%)。而且实验考试在实验成绩中的比例没有具体规定,没有明确规定:实验考试不及格,则课程总成绩不及格。实验考试过程没有期末笔试那么正规、正式,考试时间通常只有笔试的一半,试卷的批阅也没有规定。这不利于调动学生平时的学习积极性,平时的教学秩序、教学效果很难保证。实际上,学生阅读、编写、调试程序的能力主要是在平时的教学过程中培养出来的,期末笔试时间短、内容不全面,不能全面考核编程能力。
(4)课外实验、课程设计、课程实训管理不够
目前编程语言的实验主要是在老师指导下的课内实验,而缺少课程规定的课外实验。尽管现在多数学生都有自己的计算机,但是缺乏在计算机实验室的集体学习环境。编程语言课程没有统一要求学生完成课程设计,学生学习一门编程语言编码量不够。课程实训往往规定在一两周内完成,通常3-5人为小组完成项目,但少数学生没有自己写代码,学生动手独立编程训练不够。不少学生没有认真训练如何编写好的程序和较大规模的程序,软件开发平台使用技巧掌握不够。
(5)非编程语言课程的编程能力训练不够
非编程语言课程,特别是数据结构、操作系统、计算机组成原理、计算机网络、编译原理、软件工程等课程,程序设计的训练也非常重要,学习这些课程也是提高编程能力和水平的重要手段。但是,在这些课程的学习过程中,不少学生不愿自己编写程序,而只是调试老师指定的代码、粘贴来自网上的代码,这样既无法提高编程能力,也无法学好、学活相应的课程。
2 优化编程语言课程群的具体措施
2.1 加强编程语言课程群的教学管理
建立编程语言课程群教学指导小组,加强编程语言课程群的教学管理,改革课程考核体系,提高实验教学与实验成绩的比重。深入研究编程语言课程群(C语言、Java、Web程序设计、Java EE、C#等)教学内容的交叉、关联与继承关系,分析它们在培养编程能力过程中的角色和任务,对编程语言课程群的教学进行整体规划与优化[1]。必须让学生牢记:单凭阅读和学习语法结构并不能真正掌握一门程序设计语言,必须进行编程实践——亲自编写程序并研究别人写的程序。学习一门新程序设计语言的唯一途径就是使用它编写程序[2]。
精心设计各课程的教学内容、典型案例、编程项目与实训项目等,从简单的顺序结构(Input、Process、Output,简称IPO)编程,到模块化、结构化编程,再面向对象编程,再到Java Web开发、Java EE流行框架技术开发应用等。避免课程之间不必要的重复,提高教学效率。注重典型案例的基础作用,循序渐进地进行开展编程能力训练。任课教师要在教学指导小组的指导下工作,深入研究教学内容,讲究教学方法,加强教学互动,注意课程之间的教学内容衔接。
加强学生调试程序能力的培养,从第一门语言课程开始,学生就要练习编程语言和开发工具的基本调试技巧[3]。不断学习流行软件开发平台(如Visual Studio、Eclipse、MyEclipse等),最终熟练掌握开发平台的使用技巧,提高编写程序、调试程序、分析程序的能力。
2.2突出第一门编程语言的基础地位
通常C语言作为入门语言教学,C语言对初学者来说是一门较难的课程。在教学过程中,我们实施“教、学、做”合一、“课堂与实验室合一”的教学模式,通过各种教学手段提高学生阅读、编写、调试程序的积极性和主动性,尽力使他们感受到编程的快乐和成就感[4]。另外,让学生学习并掌握流行软件开发平台(如Visual Studio、Eclipse等)的使用方法,从最基本的命名规范、注释、缩进的细微入手训练软件工程素养[5]。为加强C语言的编程能力,我们在大一的下学期开设“C实例分析与应用”课程,同时为后继课程(如:数据结构与算法等)打好基础。
此外,C语言作为第一门编程语言对初学者来说有一定困难,也可以选择其他语言(如:Python)作为第一语言。Python语言的设计哲学是“优雅”、“明确”、“简单”。国际上用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python教授程序设计课程[6,7,8]。
2.3加强教学过程管理,严格实验考核
严师出高徒,第一堂课应让学生明确教学目标要求,约法三章,严格课程管理。注重教学过程化管理,根据编程语言课程实践性强的特点,要加强实验教学的过程化管理[9,10]。不仅要提高实验学时数占总学时数的比例,还要提高实验成绩在学期总成绩中的比重(如:40%以上)。加强平时的实验项目考核,学生编程能力的提高主要是在平时的实验项目中实现的。鼓励学生使用开发平台进行大量调试、修改程序训练,从中感受编程中失败的痛苦、成功的喜悦和成就感。通过在线考试系统或在线测评系统平台完成实验项目成绩的统计与管理。
实验考试过程应该正规、正式,考试时间不少于笔试。严格实验考试,若实验不及格,课程总成绩不及格。实验考试采用在线考试系统或在线测评系统方式,随机抽题,自动阅卷。为了提高学生的应试能力,以及阅读、分析、编写、调试程序的能力,鼓励学生平时在实验过程中(如:规定的实验项目完成之后)通过考试系统进行积极训练。
2.4加强课外实验、实训教学管理
课内实验是在老师的指导下进行了,有的学生一离开老师的指导就无能为力了。课外实验正好可以培养学生的自主学习能力,促进同学之间的相互讨论,实在不能解决的问题也可以找机会问老师,课外实验的学时数应不少于课内实验。
大量项目实践是提高编程能力的根本保证。课内的课程设计、单独的课程实训以及企业实训是主要的项目实践活动。通过这些项目实践活动,逐渐掌握如何编写好的程序和较大规模的程序,掌握软件开发平台的使用技巧与程序调试能力,理解软件工程的基本方法,熟悉软件工程过程(问题定义、需求分析、系统设计、算法设计、模块测试和调试、集成测试等)。还可以不断提高学生问题分析能力、规划设计能力和团队合作精神等综合能力。通过完成各种实验项目可以不断赢得自信。
上述实践活动只有通过认真、踏实的态度,不断坚持下才能够达到好的效果,因此关键是要严格管理,绝对不能流于形式、走过场,应规定实训项目成绩等级的具体标准。
2.5编程能力培养应贯穿所有专业课程
不断提高学生的编程能力,仅靠编程语言课程群是不够的,要加强非编程语言课程(如:数据结构、操作系统、计算机组成原理、编译原理、数据库原理、计算机网络等)的编程能力与编程能力训练,应提高非编程语言课程实验学时占整个课程学时的比例,以及实验成绩占学期总成绩的比例,使学生通过自己的编程实践与软件工程训练,提高对课程内容的理解和掌握。把这些课程的内容当做应用开发的工具、技术、系统、项目的成功案例,加以学习研究,特别是掌握其相关的设计与实现的基本思想和方法[11]。
此外,应鼓励学生参加各种程序设计竞赛,如:ACM程序设计大赛、中国大学生计算机设计大赛、全国大学生计算机博弈大赛等等,通过比赛展示自己计算机应用与创作才智,进一步提高自己解决实际问题的综合实践能力、创新创业能力和团队合作精神。
3 结语
加强编程语言课程群的管理,对课程群中各门课程教学内容进行总体规划和优化,精选编程案例、编程项目与实训项目,由浅入深、循序渐进地提高学生的编程能力。对于每一门编程语言课程,要加强教学的过程化管理,特别是实验教学的管理与考核。编程能力的培养应贯穿所有专业课程和专业活动,使学生在潜移默化中提高编程能力与软件工程素养。在第一门编程语言课程教学实践中,我们积极进行教学改革实践,表1是三学期“C语言程序设计”课程的成绩统计分析表,尽管这三个学期试题难度不全相同,对教师的评价指标也不完全一致,但从总的情况看,教学改革实践还是受到学生的欢迎和好评。
表1是第一门编程语言教学改革实践过程的情况分析,随着改革的进行,学生的满意度不断提高,采取了多种措施提高了学生的编程能力和软件工程素养。但全面提高编程能力,还需不断探索,采取改革编程语言课程群教学的综合措施。
参考文献:
[1]张基温.计算机课程体系整合畅想[J].计算机教育,2014(8):59.
[2]Brian W. Kernighan, Dennis M. Ritchie. C程序设计语言(第2版·新版)[M].徐宝文, 等译.北京:机械工业出版社,2004.
[3]罗先录,罗显松,胡韶峰,等.应用型本科计算机类专业程序设计课程体系建设研究[J], 工业和信息化教育. 2016(3):38-41.
[4]吴元斌. 提高C语言初学者编程能力的几点措施[J]. 现代计算机,2015(1):13-15.
[5]B. A. Forouzan, R. F. Gilberg. C程序设计-软件工程环境(原书第3版)[M].黄林鹏 等, 译. 北京:机械工业出版社,2008.
[6]梁勇(Liang Y. D.). Python语言程序设计[M]. 李娜 译.北京:机械工业出版社,2015.
[7]沙行勉. 计算机科学导论: 以Python为舟[M]. 北京:清华大学出版社,2014.
[8]嵩天,黄天羽,礼欣. Python 语言:程序设计课程教学改革的理想选择[J].《中国大学教学》, 2016(2):42-47.
[9]郭小清,谢忠红.计算机专业程序设计类实验课程教学方法与考核方式探讨[J].高校实验室工作研究,2015(1):11-12.
[10]朱晓旭,杨季文,赵雷,姜小峰,姚望舒. 程序设计类课程过程性考核研究与实践[J]. 计算机教育, 2014(22):99-102.
[11]张燕,蒋宗礼.《应用型软件工程专业人才培养指导意见》研制思考[J].《中国大学教学》, 2015(6):28-31.
上一篇:软件工程发展史及未来发展动态
下一篇:浅析计算机软件工程的管理和维护