唐文静 杨洪勇 田生文 李凌云
鲁东大学信息与电气工程学院 山东烟台 264025
所谓工程教育专业认证是指由政府指定认可的认证机构或社会团体对高等学校工科专业开展的认证工作[1]。2015年中国工程教育专业认证协会发布了最新的《工程教育认证工作指南》,要求各高校在制订培养目标、设置课程内容和改革教学方法等多方面要充分考虑专业认证的要求。在高校《高级语言程序设计》的日常教学中,为提高教师的专业水平,有效引导教师积极参与教学研究,本文结合新的工程教育专业认证的通用标准—以目标为导向,以学生为中心,着重关注学生的学习过程和效果[2],对该课程进行课程分析,以此展现教师的思维过程,显示不同教师对课程标准、教材的理解程度以及运用教学理论的能力,使群体智慧得以发挥,从而对应用型普通高校高级语言程序设计的教学起到积极影响。
1.1.1 所属专业的培养目标
程序设计能力、Windows应用开发能力、Web应用开发能力、数据库应用与开发能力、团队协作能力以及知识综合应用能力等是应用型普通高校的计算机相关专业学生应重点掌握的职业岗位能力。而高级语言程序设计课程主要培养学生的程序设计能力,它对于培养学生掌握程序设计的基本知识和技能,培养从事计算机相关工作应具备的发现问题、分析问题、解决问题的能力和素养具有重要作用。
1.1.2 在课程体系中的地位
高级语言程序设计是学院计算机相关专业的学科基础必修课,在计算机类本科培养方案的整个体系结构中本课程处于公共平台课程的位置,且它是相关专业学生要学习的第一门语言类课程,该门课程的学习对于进一步学习面向对象程序设计,Java,Windows程序设计等课程,掌握项目开发能力奠定坚实基础。
1.1.3 课程特点
高级语言程序设计表达能力强,使用灵活方便,可移植性好,主要特点为:(1)不限操作平台,具有强大的兼容性;(2)基础性语言,是大多程序设计及软件开发的前提与基础;(3)运用广泛,具备很强的数据处理能力和强大的绘图能力;(4)功能强大,不仅计算功能、逻辑判断功能比较强大,还可以像汇编语言一样对位、字节和地址进行操作。高级语言程序设计既具有高级语言的特点,又具有低级语言的特点,该课程对于学生理解和掌握计算机系统的软硬件知识从而有效利用甚至是开发计算机系统[3]具有重要作用,因此,该课程的学习能够满足当前课程教学的需要。
新的专业认证通用标准要求教师和学生都要清楚专业培养目标,教学应以目标为导向。高级语言程序设计课程的主要目标是通过编程解决实际问题。
高级语言程序设计是在大一第一学期开设的课程,这个时期的学生特点如下:(1)他们刚上大学,有强烈的求知欲望,但缺乏远大的学习目标;(2)他们思维比较活跃,但对专业认识还不够,专业思想未形成;(3)刚经历了高中3年的学习生活,习惯于被动接受知识,缺乏正确的学习方法。
结合应用型普通高校学生的特点和该课程的理论和实践教学需培养学生获得的能力的要求,本课程的授课理念主要有以下几方面。
(1)打破传统的注重语法的教育模式,培养学生的程序设计思想。在求解问题时,首先要搞清楚已知和未知数据,然后弄明白如何由已知求解未知,这就是算法,是程序设计的灵魂,最后把算法描述为C程序。
(2)打破传统的掌握概念的教育模式,注意与后继课程的密切联系。以后继课程数据结构为例来看二者之间的联系:一是C语言中指针这种复杂的数据类型本身就是数据结构的抽象;二是C语言中的排序、查找可与数据结构中的排序、查找结合起来做比较分析;三是把C语言中链表的学习与数据结构中的单链表建立联系。
(3)把软件工程的思想融入教学。如在教学过程中加入面向数据流的设计方法,让学生了解软件设计的一般方法或在编程过程中加入程序健壮性、安全性的问题[4],如成绩数据的范围、属性是否正确的检查等。
高级语言程序设计知识点多,抽象枯燥,让初学者学习起来感到茫然,从如何提高学生的学习兴趣、为后续课程打下基础出发,教学分三阶段进行设计(如图1所示)。
第一阶段引导入门,在理论教学中以趣味性程序或小游戏来调动教学,在实践教学中采用从简单到复杂、循序渐进的方法,这一阶段旨在培养学生的学习兴趣。
第二阶段夯实基础,将高级语言程序设计课程的内容分为七大模块:C基本概念、3种基本程序设计结构、数组、函数、指针、结构体、文件,这样将有助于学生对逐个模块基础知识的理解与掌握,从而夯实了基础。
第三阶段实践提高,围绕数组、函数、指针这一主线展开程序设计[5]以达到整合教学内容的目的,旨在培养学生利用所学知识解决实际问题的能力。
图1 高级语言程序设计课程的教学设计
高级语言程序设计课程知识点多,在课时有限的情况下,教师如何组织课程内容,做到既能引起学生的兴趣,又能让学生把握住编程的重点,不被淹没在大量的知识点中,这个问题很关键。本文以基于学生成绩管理系统的综合案例分解课程内容(如图2所示)。
图2 基于案例分解的高级语言程序设计课程内容
首先,从流程控制结构入手,依次学习顺序结构、选择结构和循环结构。通过简单的语句让学生熟悉编程环境,并让学生通过相应的控制结构完成菜单选择,实现容错性判断。
其次,模块化结构的教学,将系统中要实现的功能进行划分,利用函数实现模块功能。将学生成绩管理系统中的功能划分为数据的输入、查找、插入、删除和输出等,并用函数实现。
再次,计算机能处理的对象统称为数据。在学生成绩管理系统中需要批量处理数据,因此需要用到数组。而且,学生信息包括学号、姓名、成绩等不同类型的数据,于是引入了结构体这种构造类型。C语言中对数据的访问形式不仅可通过变量名直接访问,还可通过地址进行间接访问,于是引入了指针。数组、结构体、指针进行横向、纵向的相互组合,形成知识体系。
最后,文件为数据的长期存储提供了栖身之地,掌握文件的读写也是成绩管理系统中不可缺少的一部分。
在讲授C语言过程中,面对不同层次、不同基础的学生,教师教学难度较难把握,不过,较好地掌握重难点内容会使学生对C语言的运用更加得心应手。
3.2.1 内存结构
这是核心中的核心,涉及C语言中多个知识点,如变量类型、作用域和存储类别、函数的调用、内存的操作等。结合知识点理解内存的划分区域包括栈、堆、静态区域、动态区域,如多个函数之间的来回自动跳转的基础是内存堆栈区的支持等[6],掌握对内存的操作,即如何读取或写入某段内存的内容,让内存里的值变成我们想要的结果。
3.2.2 指针
指针是C语言的一大难点。讲解时要注意把握好由易到难的度,引导学生掌握好以下问题:指针的两大属性(指针的值就是地址编号,指针是有类型的),数组与指针的关系,函数与指针的关系等。
3.2.3 字符串处理
这是在程序中经常遇到的问题,要注意以下几个概念:字符变量、字符指针、字符数组、字符串,掌握字符串处理函数的方法。
3.2.4 链表
为解决数组连续存放的局限性,引入链表,这样链表中每个元素就不仅有本身的值,还包括找到下一个元素的线索,这涉及结构体的相关知识。链表的创建、插入、删除等操作又为后续课程的学习打下基础。
在工程教育认证的背景下,高级语言程序设计课程的实验教学力求与实际应用紧密结合,提高学生的学习兴趣。具体实验内容包括验证类、设计类、综合类3种类型,不管是实验的难度还是学生的能力培养,该课程的实验安排都是从基础到提高,逐步递进的(如图3所示)。
图3 高级语言程序设计课程的实验安排
其中,验证类实验注重学生对C语言语法的掌握,如程序运行环境,数据类型、运算符等实验,主要锻炼学生的实验操作能力;设计类实验注重学生对算法的理解,如学生成绩等级划分、学生成绩排序、二分法解方程、约瑟夫环问题等,主要锻炼学生的计算思维和程序设计能力;综合类实验注重学生对所学知识的应用,如学生成绩管理系统、趣味游戏开发、N皇后问题等,主要锻炼学生的逻辑思维能力、分析与解决问题的能力和团队合作能力。
结合多年的教学经验和课程特点,从灌输自主学习意识、营造良性竞争意识以及培育科学研究思想等几方面对课程的教学方法与手段进行了一系列的改革。采用的教学方法主要有以下几种。
(1)案例导入:通过案例引导将教学内容逐渐深入,在巩固基础知识的同时,也通过新问题的提出、思考来引入新的知识点。如在讲解分支结构时,可通过“学生成绩评定的优良中差”导入。
(2)对比归纳:在教学过程中通过对比不同知识点之间的差别及内在联系,达到对其本质有清楚认识的目的。如教学控制结构中分支结构与循环结构,通过语法、用法的对比,让学生巩固对这两种结构的认识,明确它们的使用。
(3)任务驱动:通过布置精而准的课程任务,如综合运用屏幕显示、数组知识等设计五子棋游戏,让学生明确所学知识的用处,在具体任务的驱动下让学生最大限度地理解相关知识。
(4)讨论式教学:根据教学内容的重难点设计讨论题目,组织学生进行讨论[7]。如讲授函数的参数时,让学生讨论形参和实参的区别。通过讨论,学生对相应问题的理解会更加透彻。
采用的教学手段除了常规的板书与多媒体结合把重难点内容(如递归、排序)形象化地呈现给学生,通过网站互动、QQ群、课堂派等多种交流方式外,还采用以下手段促进教学,提升学生知识水平。
(1)相应的激励机制,营造良性竞争:每个班级的学生在学习能力上都分几个层次,要使他们都能有效、良性地融入该课程的学习氛围中,可在每次实验课之后从每个层次的学生中选取1~2个进行分析总结,从实际教学效果来看,这种教学方式更能激发学生的关注度和学习热情,课堂讨论效果更好。
(2)“第二课堂”开展:在教学过程中,鼓励学生参与学院的创新实验室、教师的研究所和参加各种大赛,如蓝桥杯程序设计大赛、ACM大赛等,通过“第二课堂”,不断对学生强化“学习是为了解决实际问题”的意识,并引导学生进行程序分析和设计实践。
在工程教育认证标准的指导下,本课程通过课内实验、期末考试、课程设计等各种形式对学生的课程成绩做出综合评价,随时关注学生的学习状况,重视学生在团队合作、代码调试等方面的表现。
具体来说,本课程的考核从理论应用和实验技能两方面来进行,其中理论应用考核占70%,包括上课考勤、作业完成情况的平时成绩和考查理论知识应用的期末考试;实验技能考核占30%,包括考查学生平时实验情况的机上实验和考查学生实践能力的实验考核。
经过努力,我们在教材建设、电子教案建设、多媒体课件建设、试题库建设、网络课程建设等方面取得了一定的成果,该课程于2013年被评为山东省精品课程。但仍存在一些问题。
MOOC作为一种全新的网络教学模式能够实现网络环境中优质教育资源的最大化共享[8],在高级语言程序设计的教学过程中引入MOOC,对提高教学质量、提升学生课业参与度有积极影响。
将教师与企业的实际项目、问题作为教学素材引入到课程的实验项目中,对应讲授知识点进行现场分析或演示,这样使学生在解问题的过程中引发对知识的需求,可增强知识应用的实效性和直观性。
多年的教学实践使我们认识到高级语言程序设计这门课知识点多,晦涩难懂,但它又是学习计算机编程的基础。工程教育专业认证对高校教学质量和发展都提出了更高的要求。鉴于此,结合工程教育专业认证的通用标准,在高级语言程序设计课程的教学过程中不断总结,互相学习,共同提高,进而降低学生学习的难度,培养学生的学习兴趣。通过这种方式的交流,取长补短,取得了良好的教学效果与教学质量。