叶茂枝,王 宁
(1.宁德师范学院 计算机系,福建 宁德 352100;2.厦门华厦职业学院 教务处,福建厦门 361024)
程序设计是计算机专业学生的专业基础能力,是其专业学习的主要目标。因此各地方院校计算机专业均开设高级语言程序设计这门课程,目的是让学生掌握程序设计的思想和基本方法,具备基本的编程实践能力,能利用计算机解决一些实际问题。然而,在实践中该课程的教学效果普遍不理想。麦可思《2012年中国大学生就业报告》中计算机科学与技术、计算机应用技术被列为红牌专业,报告分析称这一后果并非由于供大于求,而是由于人才培养质量达不到产业的要求造成的。[1]可见在实际教学中,高级语言程序设计课程并未帮助学生掌握好一门程序设计语言,培养起程序设计的技能。
究其原因,虽然在各地方院校制定的教学大纲中普遍强调该课程不但要注重程序设计语言基本知识的学习,更要注重程序设计技能的培养。但实际教学中的诸多因素导致老师与学生都深陷于各知识点语法细节,忽视了程序设计能力的培养。比如,开课时间短,通常仅为一个学期;入门难度大,该课程是大部分学生接触的第一门程序设计课程,程序设计思想尚未建立;传统考核方式忽视程序设计理念,侧重考语法规则等。[2]探索高级语言程序设计课程教学改革措施,明确培养程序设计技能作为课程目标定位,对于计算机专业学生程序设计技能的培养意义深远。近年来,我们尝试在课程设置上将高级语言程序设计从一门单独的课程转变成系列课程,并经过了两年的试验。
高级语言程序设计是计算机专业的必修基础课程。该课程以计算机导论为先修课,是数据结构、算法、面向对象程序设计等专业课程的基础。该课程多在大一第二学期开设,每周4-6节课,是大部分学生学习语言的入门课。学习程序设计有一个渐进的过程,在一个学期内要完成语言的学习到程序设计技能的培养,教学目标难以实现。受模块化程序设计思想的启发,高级语言程序设计这一课程可以不作为一门单独的课程来开设,而是转变成系列课程。这样既延长了教学时间又分摊了教学目标,使原本不易完成的教学目标变成多个易于完成的子目标。
高级语言程序设计要求学生在完成高级语言入门后,借助语言工具最终完成程序设计。因此,系列课程可分为高级语言与程序设计入门两部分内容。高级语言部分注重程序语言基本知识,可沿用传统语法教学为主,上机验证程序为辅的教学方式。通过学习掌握语言工具,会看程序,编写独立语句,完成语言的入门。考核侧重语法规则、语句的编写,笔试即可;程序设计入门部分注重程序设计理念的培养,工学结合,根据项目要求,学生通过编程提出解决方案。学习目标是学生能够自如地表达自己的想法,准确地描述自己的思路,能够调试和检验程序。考核侧重程序设计理念、算法的实现、程序的理解。程序设计入门阶段要求编写的程序都比较短小,人工编写能够快速锻炼基本功,所以不提倡一学程序就上机。但学生必须熟悉编译软件的使用,掌握其编辑、调试、检验程序等功能的使用。因此,考核方式可以笔试为主,机试为辅。
在系列课程结束后,教师还可根据实际教学情况,通过组建学习共同体的形式,使用项目训练方法,配合后续课程培养学生逻辑思维、自主学习、协作开发软件项目等能力,强化程序设计基本技能训练。
程序设计能力可分为5个层次:语言基础级别、基本运用级别、工具程序级别、软件工程级别、大型系统级别。传统课程设置中期望通过高级语言程序设计这门课程的学习,可以使学生程序设计能力至少达到基本运用级别,能使用程序设计解决小型问题。大二开始学生便可依托其他专业课程进一步训练程序设计能力。然而,自1999年开始本科扩招后,地方院校生源质量大幅下降。[3]学生能力与原有课程要求不匹配,教与学过程中处处是难处。学生感觉难,畏学、甚至放弃;教师感觉难,教学要求一降再降。一学期授课结束后,课程的实际教学效果非常不理想,学生的程序设计能力只能勉强达到语言基础级别,即掌握编程语言的基本要素和使用方法。更糟糕的是该课程的教学目标没有达到,严重影响后续课程的教学,学生程序设计能力培养过程中出现严重脱节甚至停滞。
在传统的课程体系未做整体调整前,作为诸多专业课的先修课高级语言程序设计的课程目标不能过度降低。考虑学生的实际能力,延长时间、分阶段的逐步实现目标是非常必要的。开设系列课程将原有教学目标分解到多门课中,降低了实现难度,增加了实现目标的时间。系列课程分别安排在大一第一、二学期。在传统的课程体系中大一第一学期只有计算机导论一门专业课,加入高级语言学生学习负担不会增加太多。且相对于计算机导论的泛泛而谈高级语言的学习内容非常具体,可以较好地保护初学者的学习兴趣。高级语言注重设计语言基本知识的学习,受先修课计算机导论相关知识点的影响不大,安排在大一第一学期争取了时间还不影响后续课程的开设。转变成系列课程后4学时课时总数增加不多,均衡了大一上下学期的课时数。
高级语言是程序设计的工具,工具没有掌握好就匆忙谈程序设计是没有根基的。因此,学习语言程序设计的学生必须先要有语言基础。在实施教学之初不宜过快,待学生语言入门后方可考虑再加快教学速度[4]。确保学生在接受程序设计理念的培养之前有一定的语言基础。
学习语言的目的是使用,程序设计能力的培养也不受限于某种语言。在高级语言教学过程中,对于部分繁杂的知识点不用过于纠结,否则容易打击学生学习积极性,产生畏学情绪。比如:C语言中输入、输出函数的格式控制符,除%d,%f,%c三种格式必需掌握,其他格式可以视能力选择性学习;复杂表达式的分析、自增自减运算等,多用于阅读和程序的维护,编写程序时可用加括号、重新赋值的方法实现相同效果。[5]总之,学习应该去繁就简,把精力集中于程序设计能力的培养。
从词、句、段、文到品词析句、文章构架是语言学习的一个过程。学习编写程序也同样需要这个过程。如果能力不够就只能放慢进度,绝不能急于求成,跳跃前进。学习初重视独立语句的练习,不能过早地要求学生完成程序编写、甚至强调算法的理论深度。
在教学过程中不管是老师讲课用的实例还是布置学生完成的题目,都应尽可能贴近学生,有实用性、趣味性,让学生感觉到学习的东西是有用的、有趣的。比如:利用函数画图、文本颜色设置、通讯录管理等例子,都能让学生在完成后产生强烈的成就感。
程序设计水平是指如何写程序的能力,和语言无关,关乎思考方式和对程序设计语言本质的理解。许多学生在校期间不断穿梭于各种工具间,忽略了程序设计能力的锻炼,最后博而不精。程序设计入门中使用的工具最好是高级语言中学习的高级语言。学校在课程设置上不宜过多地引入编程工具,要引导学生学以致用,避免学而不用。
程序设计能力的培养过程辛苦而漫长,学习动机是坚持学习不懈的唯一动力。学校在课程设置上应考虑保护学生学习热情,防止因畏难而放弃学习。将高级语言程序设计从一门单独的课程转变成系列课程来开设,是从学生实际能力出发,为保护学习热情而作的适应性调整。
[1]常红.中国大学生就业报告:2012年就业“红黄绿牌”专业出炉[DB/OL].http://society.people.com.cn/GB/86800/18143461.html,2012-06-11.
[2]刘霞,刘志明,罗江琴.高级语言程序设计课程教学改革的研究[J].软件,2012,(2):95-97.
[3]郝庆升.地方院校本科生源质量问题与教学改革建议[J].吉林农业科技学院学报,2010,(1):80-83.
[4]傅力,李志达.C语言程序设计课程教学改革的探索与实践[J].计算机教育,2008,(14):35-36.
[5]赖秀珍.探析高职院校C语言教学改革探讨与实践[J].新课程:教育学术,2011,(4).