时间:2022-06-03 12:59:13
导言:作为写作爱好者,不可错过为您精心挑选的10篇程序设计实训总结,它们将为您的写作提供全新的视角,我们衷心期待您的阅读,并希望这些内容能为您提供灵感和参考。
0.引言
C语言程序设计实训这门课程要求学生掌握计算机程序设计语言的基本知识和程序设计的方法与技术,培养学生应用计算机解决实际问题的能力,重视学生实际编程能力和程序思维能力的培养,通过学生上机编写程序来提升学生的编程能力,培养学生的学习兴趣和创新能力。
C语言程序设计为其前导课程,是对其前导课程知识的巩固、实践与提升,是ACM程序设计课程的基础,通过此次实训为程序设计比赛和ACM大赛输送人才,使更多的学生在全国的各种编程比赛中取得好成绩,同时为学生毕业后从事编程工作打下良好的基础,为企事业单位输送程序设计人才。
本人根据C程序设计实训课程教学中存在的问题对教学内容、教学方法,考核方式进行了改革,并以本校2010级软件班学生为试点进行教学,总结了一些经验。
1.教学中存在的问题及解决对策
1.1实训内容单一
实训教学内容应该首先根据C语言的特点对知识进行整合,然后引入针对性较强的典型综合实例,从程序整体向各个核心知识点渗透。教师可以根据学生的实际情况设计实训项目,内容应覆盖学生所学的知识,突出实用性,内容最好为学生所熟悉领域或学生感兴趣的领域。如果学生层次不一,可以根据学生对基础知识的掌握情况设置不同的实训内容。
1.2教学方法单一
在实训教学过程中,应将重点放在分析程序设计过程上,培养学生良好的编程习惯,逐步提高学生编程能力。单一实训手段要达到这一目标是很困难的,这就要求运用多种实训教学方法,让学生对编程有个很好的理解过程。
可以引入多种教学方法。以前的实训课程不能激发学生的学习兴趣,主要是因为课堂是由老师主载,学生是被动的学习,不能成为课堂的主人。我们将采用多种教学方法来激发学生的兴趣,转变老师和学生的课堂角色。
(1)基于ACM模式的教学方法。ACM的教学模式是结合具体的问题讲授概念与理论,辅以课堂讨论,做习题等多项教学手段。在教学过程中,安排学生深入有关实际问题进行研究,加深对所学理论的认识,利用网站进行程序设计。以往的教学是按照基础知识、循环结构语句、结构体语句等知识点的顺序进行讲解。基于ACM的教学方式是按照习题所属知识类别进行理论讲解,离散数学、初等数论、数值计算、人工智能、动态规划算法、图算法等知识点进行讲解与练习。ACM的教学模式在一定程度上将基础学科很好地运用于程序设计当中,有利于知识的融合,可以提高学生的思维能力,在做练习时举一些趣味习题,激发学生的兴趣。
基于ACM的教学方法的优点如下:
①知识分类讲解可以加深学生对知识的理解,更加系统。
②ACM所选的题目趣味化生活化,可以激发学生的学习兴趣。
③题目所含知识面广泛,有利于知识的巩固。
④分组培养大家的团队协作精神。
⑤学生讲解培养学生的表达能力与思维能力。
(2)讨论式教学法。由于每一道程序题可以有不同的编写方法,答案不唯一,所以很适合使用讨论式教学方法。将学生以三人为一个团体进行分组,在组内讨论编程方法,上机编写程序并进行验证,由组内推举成员向大家进行讲解和演示,有不同编程方法的组可以继续演示,最后由老师进行总结,并选出时间和空间复杂度最小的程序,同时也可以发现学生在编程过程中出现的常见错误,发挥学生的团队精神,提高学生的表达能力。
(3)任务驱动法。在实训课堂上,学生需明确要完成的任务,依照实训任务完成实训。题目由易到难,知识点由单分支到多种分支情况的应用,这样适合学生学习特点及编程由易到难的编写过程。
1.3考试一锤定音
这门课程主要是培养和检验学生的编程能力,所以不能以一次考试来决定学生的最终成绩,检验过程应该贯穿整个学习过程。引入过程性考核思路,总成绩分部累加。采用平时计分和最终考核相结合的方式,以每节课的发言演示情况来给出平时等级,一学期进行累计,按累计成绩进行排名,前三分之一学生可以免去最后的考核,以平时成绩作为最终成绩,这样也可以激励大家踊跃发言,剩下的学生参加最终考核,最后成绩由平时成绩和最后一次考核的成绩各占一部分比例来组成。通过实践检验,课程考核方法改革后,考核出了学生的实际操作水平,用过程性考核思想后,在学习过程中时刻检验学生的学习接受掌握情况,加大了课程全程质量监控力度,课程考核结果基本能够反映学生学习后真正的计算机应用能力水平。考核结果公平、有效,这也是现在倡导的全过程考试。
2.总结
通过对C程序设计实训课程的教学内容、教学方法、考核方式的改革,并对2010级软件班学生进行试点后,使学生理解模块化程序设计的基本思想,掌握结构化程序设计的基本方法,掌握C语言的数据结构、程序结构、语句以及控制结构的使用方法,能用程序设计技术解决一定难度的实际问题,掌握在实际开发环境下进行编辑、编译、连接、调试和运行的方法;综合训练学生分析问题的基本方法,提高解决实际问题的能力,培养学生的专项技能和职业能力。
【参考文献】
[1]王嵩.C语言程序设计.教学探索与实践[J].教书育人,2006,(35).
[2]王美娜.C语言程序设计.教学方法探析[J].科教文汇(下旬刊),2007,(04).
[3]曾鸿.基于项目的软件工程综合实训教学模式[J].中国职业技术教育,2008,(12).
中图分类号:G642 文献标识码:B
1引言
“C语言”是从事计算机软、硬件开发和应用人员必备的专业知识。C语言既具有高级语言的特点,又具有低级语言的功能,语法结构简洁精妙,便于描述算法,写出的程序效率高,运用C语言可以编写系统底层的内核程序。C++、Java、C#、J#、perl等高级语言也是衍生自C语言,所以掌握了C语言,可以很容易掌握这些新型的语言去开发程序。因此在高等院校与计算机相关专业的教学计划中,“C语言程序设计”是一门必修的基础课及核心课程,是一门理论性和实践性均较强的课程。开设“C语言程序设计”课程主要培养学生掌握结构化程序设计的基本方法,建立严谨的程序设计思想及较强的动手编写及调试程序的能力,逐步培养独立分析问题和解决问题的能力。同时为数据结构、操作系统及其他高级语言课程等后续专业课程的学习打下扎实的理论和实践基础。
在以往的教学过程中,大部分学生对学习“C语言程序设计”存在畏难情绪,更不知如何运用C语言解决实际问题。教学效果不理想,给后续学习造成障碍。笔者在教学中调整了以往按部就班的教学模式和重理论轻实践的教学理念,将模块化案例教学引入“C语言程序设计”的课程中,进行了教材整合和强化实践教学,并围绕模块化案例展开C语言教学,以案例引出C语言的知识点。全部授课都以程序设计为目的,收到显著的教学效果。
2课程进行整合,建立模块化案例教学
2.1传统的教学模式以语言知识为主线
传统的“C语言程序设计”课程教学模式采用以语言知识为主线,按照变量、数据类型、表达式、数据输入/输出、流程控制、函数、指针、结构、文件等顺序进行教学,实训课多以验证为主。学生在学习的过程中每一知识点都是独立听记,不能将所学知识进行综合运用。因此,学生是边学边忘,学习后续内容没有前期知识支撑,学到5~6周就失去学习的兴趣和信心,甚至有些学生放弃对该门课的学习,到期末考试突击复习,不及格率比较高。
2.2课程整合以程序设计为主线
课程整合以程序设计为主线贯穿语言各知识点,就是将“C语言程序设计”课程内容分解为四个模块,即C语言基本程序设计模块、函数模块、指针模块、文件模块,每一模块都以案例展开C语言的知识点教学,讲解C语言的理论知识为目的,上机实训以授课中的案例贯穿始终,即强化理论知识的掌握,便于后续知识的学习,同时还要逐步培养学生编写C程序的能力,紧紧围绕这四个模块的案例举一反三展开程序设计的实训。
2.2.1基本程序设计模块
利用“统计一名学生的三门课程平均成绩”的程序,引导出变量、数据类型、表达式、数据输入/输出等C语言基本知识。这阶段主要是引导学生掌握C语言程序的基本结构,编写程序的基本方法,是学习C语言入门阶段。如图1所示。
2.2.2函数模块
C程序是由若干函数构成的,函数是C语言的核心知识。因此,在讲函数知识及设计函数程序时,将前面讲述的计算学生多门课程成绩组合成较完整的C程序案例。如图2所示。
通过这个案例讲清C语言中变量的存储类型的区别和功能,函数调用、参数传递的方式及要求,按值和按地址传递区别。在讲函数调用时启发学生逐步完成图2各个程序模块的组合。同时调动学生的积极性逐步扩展图2中的功能,将所学的知识进行综合应用,并提出预处理和文件包含知识概念及运用。
2.2.3指针模块
指针是C语言的重要功能,正确而灵活地运用指针,可以动态分配内存和对物理地址直接进行操作,方便地使用字符串和数组,有效地表示复杂的数据结构,在函数调用时能获得1个以上的函数值。指针内容非常丰富,而且复杂,这部分是C语言的重点,也是学习的难点。按常规模式教学,学生对指针知识理解难、运用更难,部分学生到此几乎放弃学习。采用模块案例教学,学生首先了解指针的运用,调动学生学习的兴趣和学习的欲望,然后逐步从指针案例中启发引出知识点,边学边用,通过实例反复练习,学生能较灵活运用指针知识编写程序。指针模块如图3所示。
首先利用演示链表案例引导出动态分配内存。然后演示用指针修改数组处理学生成绩排序的程序案例,或者设计较简单的对硬件操作的案例,让学生了解指针知识运用之后,再由学生模仿将函数模块中用数组存储数据修改为用指针进行数据处理。在知识引申的过程中,逐步提出字符串指针、指针数组及指针数组做main()函数的参数的运用。
2.2.4文件模块
主要讲述输入输出函数,将内存中存储的数据输出到外存上,仍然利用案例分析文件的概念及文件的运用。
3围绕案例展开教学
在基本程序设计模块中,以计算1名学生三科成绩的平均成绩这个程序开始引导C语言基本知识。程序如下:
#include
main()
{ int scor1,scor2,scor3;
float grade, total;
total = 0.0;
printf(“Enter grades: \n");
scanf("scor1=%d ,scor2=%d ,scor3=%d", &scor1, &scor2, &scor3);
total= scor1 + scor2 + scor3;
grade=total/3;
printf(“Grade average is %.2f\n", grade);
getch();
}
3.1案例启发教学,使学生轻松听课
在案例教学过程中,要求学生熟记模块中程序。例如:第一次课熟记“统计1名学生三科成绩”这个程序。然后调动学生学习的积极性和主动性,引导学生积极思考和参与,一起分析程序中语句的含义,在分析语句的过程中,采用启发式的循序渐进、由浅到深、由易到难,逐步提出新问题,引出C程序中新知识,用新知识解决新问题,再举一反三写出对应不同问题的C语言程序。例如:提出判断并输出学生三科成绩的最高分和最低分引出分支结构。提出若是8门课,进行总成绩统计的简便方法,由此引导出循环结构。根据对成绩升序或降序排序引导出一维数组,再计算多个学生中每个学生多科成绩引导出二维数组等,根据引导的知识逐步扩展和加深知识的运用。
保证学生动脑、用心听课。教师在讲解每个基本知识的过程中不要面面俱到,对常用的编程知识细讲熟练,不常用的知识略讲或用表格统解,有些基础知识是随着编程逐步引出或者以后应用时在自学,保证学生听课不疲劳。听得懂、跟得上、兴趣浓,兴趣是学习的动力,动力会产生效果。同时要求学生强化记忆判断最高分、成绩排序等程序,以便于后续课由用户建立的若干个自定义函数构成较完整的程序。在分析函数案例过程中,讲清数据存储类型的区别及参数的使用等知识。授课过程如图4所示,每节课结束前教师与学生共同总结本节课的重点知识,便于课后复习。
3.2培养阅读程序的能力
读程序是学习C语言入门最快,也是最好的方法。教师在讲述程序中各语句含义的时候,首先培养学生阅读程序的能力。在阅读程序的同时注重培养学生掌握C程序的结构。例如:编写程序首先根据表达式确定变量及变量的数据类型,然后给变量赋值(直接赋值或通过键盘接受值),再进行运算,最后输出计算后的结果等。要求学生不放过每一章中提到的所有例题,仔细研读程序,直到每一行都理解了。看懂别人是如何解决问题的,学习解决问题的方法和程序设计技巧,掌握程序结构。为了使学生尽快掌握编程思想和基本结构,教师课后给学生布置一些设计C程序作业,由学生根据自身能力,阅读程序、修改程序、给程序补充语句以及写出程序运行结果,强化训练。
3.3培养学生编写程序能力,掌握分析问题算法
3.3.1模仿编写程序
“C语言程序设计”是一门实践性很强的课程,“纸上谈兵”光学不练是学不好C语言的。在阅读程序的过程中,培养学生学会模仿编写程序,如果没有深刻地理解C语言的语句及掌握编写程序的基本方法,模仿编写程序也是一句空话。在模拟编写程序时,如果写不出来,回过头来再继续研究例题,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到熟练为止,在模仿编程的过程中培养学生养成良好的编程风格。
3.3.2分析算法
利用C语言编程解决实际问题,所需要的不仅仅是C语言语句,还需要相关的专业知识及算法。例如,如果你不知道计算π的公式,即使C语言学得再好也无法编写计算π的近似值的程序。如果不知道判断闰年的条件,就无法计算某年是否为闰年。所以在程序设计过程中,必须注重培养学生分析问题及找到解决问题的最优算法,这是设计程序的重要条件。
3.4强化编程能力的训练,树立编程信心
教师在全部的授课过程中,时时鼓励学生能学好C语言。因此教师在提供丰富多样的实验题目时,注重学生的差异,让学生根据自身水平和兴趣,选择自己能理解的训练题目。让每一个学生都能享受编写程序获得成功的喜悦,以促进学生坚定学习的信心和激情。同时教师鼓励学生在学习“C语言程序设计”的过程中,阅读一本C语言方面参考书,经常上一些好的C语言论坛进行学习、交流,开阔自己的视野。教师也经常组织学生进行师生间、学生间的学习交流活动,对实训题目采取自测、在线判题等活动。这些多种交流学习方式,其目的是充分发挥学生在教学活动中的主体地位,调动学生学习的主观能动性和求知欲望,使学生在交流中得到学习、思考,取长补短获取编程的技巧。成绩考核以笔试、实训、交流等多种形式,每一环节着重考核学生综合运用所学知识编写程序、解决实际问题的能力。
4围绕模块案例开展实训教学
在“C语言程序设计”的实训教学中,通过上机调试模块中的案例强化学生对所学知识的运用及深化理解,不仅培养学生编写程序、调试程序的专业技能,同时注重对学生的人际技能方面的培养。
4.1培养学生专业技能
4.1.1调试基本程序设计模块
初学者首先掌握C语言编程软件的使用及调试程序的基本方法,修改程序中出现的语句、语法、程序流程等错误,积累调试程序的经验。在调试程序的过程中,逐步培养学生主动思考、分析、探索、发现出错的原因,并且能独立加以解决。再通过修改已经运行程序的某些语句,查看程序发生的变化及分析结果变化的原因,加深对新学知识点的理解。实现“输入”程序加深知识的记忆,“修改”程序加深对知识的理解。记忆和理解相辅相成,相互促进编程能力的提高。
4.1.2培养综合实训能力
当学生掌握了基本调试程序方法之后,对函数模块、指针模块、文件模块案例进行调试,提高学生调试综合程序的能力,修改程序中出现的逻辑结构、流程错误。综合实训可以根据函数模块案例建立学习小组,每个自定义函数分配给小组中不同学生独立编写程序、调试、运行,逐步养成独立分析问题,运用知识解决问题的能力和自学能力。然后将小组中每个人编写的程序综合在一起,进行综合调试、运行。调动学生求知欲望及运用知识的能力,鼓励学生树立创新意识,增加程序的功能,利用开放的实训环境进行自主调试,培养学生自我发展的意识。
4.1.3撰写实验报告
实验报告是对实训的总结和知识的巩固,总结实训中调试程序的经验、收获、不足和需要解决的问题,便于后续实训课的操作。实验报告也是师生交流的最好手段,老师掌握每个学生实训过程中的问题、想法、效果等,可以调整授课进度和方法,提高学生学习效果。
4.2注重学生人际技能培养
作者简介:侯春明(1979-),男,白族,湖南吉首人,吉首大学信息科学与工程学院,讲师。(湖南 吉首 416000)
基金项目:本文系吉首大学校级教改课题“计算机课程群教学中技能培养的教学改革与实践”的研究成果。
中图分类号:G642.45 文献标识码:A 文章编号:1007-0079(2013)28-0163-02
高校信息类专业(如计算机科学与技术、网络工程、电子信息工程、通信工程、物联网工程等)课程体系中,程序设计类的课程占有相当的比重。常见的专业课有“C语言程序设计”、“Visual Foxpro程序设计”、“面向对象程序设计”、“汇编语言程序设计”、“网络程序设计”等。由于信息类专业的应用领域非常强调技术实现,普通高校学生必须具备较强的编程能力,才能满足社会对人才的要求。据统计,普通二本高校信息类毕业生,除了小部分继续攻读硕士博士学位外,绝大部分都在毕业后直接从事专业技术工作。[1]虽然不同专业对计算机编程能力的要求和应用领域各有不同,比如电子信息工程和物联网工程更侧重对硬件的控制和嵌入式方向,而计算机科学与技术和网络工程等专业更侧重系统软件开发和应用软件的开发。但是从整体上看,这些信息类专业都对学生的编程能力提出了较高要求。为了达到相应的培养目标,相关课程群应该在课程实训环节进行改进,以求提高学生的程序设计能力,进而全面提升学生的专业水平和动手能力,为国家和社会培养合格的人才,这是需要深入研究的课题。[2]
一、计算机课程群实训课的特点与不足
计算机课程群的实训课程是连接理论课程与编程能力的桥梁,程序设计类课程群对编程能力的培养尤为重要。但是在教学实践过程中,要达到全面提升学生动手编程能力的状态,面临诸多困难。
1.课时不足
随着高校课程体系的全面改进,为了宽口径的培养学生,以便学生将来能有更广阔的就业领域,信息类的各个专业被加入了越来越多的课程,程序设计类课程也面临着课时紧缩的问题。一方面要保证理论课的讲授与教学,另一方面要保证学生动手编程能力的提高。这样理论课程的时间显得非常紧张,必须在有限的时间内尽可能的把该语言中的各种各样的知识点传授给学生,还要保证他们能有足够的课时在实训课环节完成相关的实训内容,为此在时间和教学上就要合理安排。
2.技术的快速发展
信息类专业发展速度迅猛,很多技术在过去的几年快速的诞生和崛起。传统的程序设计类课程主要是侧重对基本语法的掌握和中小规模问题的分析与解决。比如运用一些经典的算法解决某些数学问题,并编程实现。这样的培养模式的结果是毕业生的动手实践能力无法满足社会上IT企业对人才的要求。
3.师资力量不足
高校教师的教学负担很重,除了要完成各种教学和科研任务外,还要负责学生管理工作。从全局来看,高校的信息类专业是新兴专业,很多高校的该专业教师以中青年为主,部分教师还需要进一步进行深造,比如攻读博士、博士后、做访问学者、参与各种学术交流等。因此,在计算机程序设计类的实训课中,很多时候都是一个教师辅导数十人学生。师资力量不足也是制约学生的计算机程序设计能力全面提高的重要因素。
二、计算机课程群实训课的教学改革建议
1.针对不同专业进行有重点的课程设计
为了提高计算机专业毕业生的职业素养与编程能力,学校应该加强学生的实训教学环节。[3]虽然信息类的不同专业都会开设各种程序设计课程,但是不同的专业侧重点明显不同,比如电子信息、电子科技、物联网等专业,从专业培养目标上看更接近对硬件的控制。在实训课的综合训练项目以及相应的课程设计的培养环节上,可以考虑做单片机、嵌入式系统中的项目。将编程能力训练放到具体的硬件控制项目中,既符合相关专业的专业培养目标,又能帮助学生有效的将程序设计课程与硬件类课程群进行融合,既提高了编程能力,又提高了综合的专业知识的应用能力。比如C语言程序设计,如果只是反复的训练经典的算法和习题,编程能力的提高还是有限。但是如果学生完成一个软硬件相结合的系统设计,对C语言在单片机控制或嵌入式中的应用开发能力就会快速增强。当然,对于计算机科学与技术或网络工程这样的专业,其专业培养目标更偏向于上层应用,也可以选择相关的实用性的软件开发项目(如数据库系统等)来训练学生的动手编程能力。在完成项目的同时,学生一方面加深了对相应专业课的认识,另一方面也加强了编程能力。
2.充分调动不同学生群体的学习积极性
在高校的专业人才培养模式中,不能按照一个固定的模式要求所有的学生,必须考虑到学生自身的实际情况,调动不同学生群体的积极性,才能最大限度的提升学生的程序设计能力。比如现在很多高校都将计算机等级考试和学位证挂钩,非计算机专业的学生必须通过计算机等级考试,才能顺利获得学位证。针对这一学生群体,应该将针对等级考试的训练合理的放入到实训环节,同时鼓励学生积极主动的多做等级考试的习题,并在上机实训的过程中多做题库中的题。一方面可以提升编程能力和动手能力,另一方面也能提高通过等级考试的概率。
最近几年,高校程序设计比赛以及其他的一些设计类比赛越来越受到高校和学生的重视。对于有志于参加全校、全省、全国甚至世界级比赛的学生,在实训环节中可以积极引导他们进行相关的训练。比如参加ACM程序设计大赛的学生,可以鼓励他们在实训环节中,在完成正常学习任务的基础上,充分调动主观能动性,多练习ACM题库中的习题,由浅入深,步步推进。而立志参加嵌入式系统设计的学生,也可以主动去编写一些嵌入式环境中的程序。使学生群体在提高自身编程水平的同时,也能更加接近相应大赛的要求,收到一箭双雕的效果。还有一些学生,立志于从事应用系统的开发,比如网站系统设计、数据库系统设计、电子商务系统、智能手机应用系统、物联网应用系统等。该学生群体对学习的实用性比较看重,更愿意在毕业前就找到专业领域的一个主攻方向,孜孜不倦地钻研该方向,往实用的方向发展。结合这些学生的兴趣和爱好,应该在相关的实训训练和课程设计中鼓励他们多动手写程序,进而力争做出对社会有实用价值的应用系统。在提升了编程能力的同时,也能更多的为社会作出贡献。
3.加强对编程能力的考核
传统的教学模式注重对知识的考察,计算机类课程群也不例外。一门专业课学习完成后,最常见的考核方式就是闭卷考试。这种方式可以很好地检查学生对该课程知识体系的掌握程度,但是对编程类的课程群来说,闭卷考试很难全面考核学生的编程能力。在教学实践中,经常遇到书本知识掌握良好但上机编程能力较差的学生。为了促使学生参与编程能力训练,应该加强对编程能力的考核。比如组织上机考试,将考试成绩纳入到整体的考核成绩中;也可以鼓励学生提交应用软件系统。但是上机考试在实践中也存在一定的困难,如普通考试,一个班级只要2个监考教师即可,但为了避免学生作弊,计算机上机考试需要大量的教师参与监考。另外,如果是固定的几个习题,在机房的环境中不便于监考,而如果是从海量题库中随机抽题,又很难做到绝对的公平,因为有的学生可能抽到较为容易的题目,而有的学生则可能抽到较困难的题目。但是从发展趋势上看,为了提高信息类专业学生的编程能力,加强对编程能力的考核还是非常有必要的。
4.在校企合作中加强编程能力的培养
信息类专业学生的一个主要就业领域是IT企业,如何培养适应现代IT企业的合格毕业生,一直是高校信息类专业教师研究的重要课题。外部社会和技术变化越来越快,高校中的很多课程和教学变化往往不能及时和外部接轨。为了解决这个问题,可以考虑广泛开展校企合作,选择一些专业对口的大企业,以实习的方式组织学生去企业学习,在实践中提高学生的程序设计能力。高校的程序设计类课程更多的是注重学生知识体系的建立和基本编程能力的培养,而各类IT公司更看重的是学生的实际研发能力。高校应该尽量和IT企业开展合作,一方面鼓励学生积极参与到企业的实际项目研发中,另一方面也可以扩宽学生的就业渠道,全面提升学生的编程能力。但是实现起来也有诸多困难,比如:高校的课程安排紧凑,学生要挤出较长的时间参与企业的软件研发,时间上比较困难;有的高校位于经济不发达地区,高校所在城市很难找到能提供相应机会的企业;低年级学生没有技术实力参与到企业的研发中,而高年级学生尤其是大四学生,又面临找工作的就业压力,到处参加面试也会给相关的实训和实习工作造成影响。
三、在提高学生编程能力上的一些实践
作为二本高校的计算机教师,在教学过程作了一些有益的教学改革尝试,初步取得了一些效果。作为班主任,在自己管理的班级中对学生进行分类,钻研应用技术的学生,鼓励他们组成兴趣小组(比如嵌入开发小组、电子设计小组、信息安全技术小组、数据库应用技术小组等),在实际项目的研发中提高编程能力。这些学生毕业后大部分成长为国内一些IT企业的技术骨干,而将来选择从事IT领域非研发方向(如管理、市场、技术支持类工作岗位)的学生,则鼓励他们学好基础知识,扩宽知识面,同时积极参加计算机等级考试和其他的一些技术类证书考试。为他们收集大量的考试资料,调动相关学生的学习兴趣,鼓励他们多通过相应考试。对于立志参加各类学科竞赛的学生,则鼓励他们更多的将精力放到比赛的训练和准备上来,并指导部分学生获得了较好的竞赛成绩。
四、结论
针对高等院校尤其是二本高校计算机课程群的实训课程的现状进行了分析,特别是针对程序设计能力不强的现状进行了分析,给出了在程序设计类课程群的实训环节进行教学改革的一些建议,并总结了为提升学生编程能力所积累的一些工作经验,以期为广大的工作在教学岗位的计算机教师提供参考。
参考文献:
1、前言
计算机程序设计是计算机专业学生的基本能力,对提高学生的就业质量是一个重要的能力,因此加强学生的程序设计能力培养对提高学生就业率,提高学生的就业质量都是很重要的。但高职学生由于基础较差、逻辑思维能力较弱,用传统的教学方式按学科体系教学,从基本概念,基础知识入手,一步步理解掌握,再到应用的方式教学,学生学着没兴趣,理解困难,学完了不会应用,教学效果很差,学生学完程序设计课程基本不会做开发设计。由于程序设计是计算机专业的主干课程,相关课程较多,学生一旦失去兴趣,放弃学习,几乎等于放弃了大部分专业学习,因此培养学生对程序设计的兴趣,提高程序设计课程的教学质量,对计算机专业是至关重要的。
2、认真做好课前准备
2.1选择好要设计的项目。项目设计教学要选择好所用的项目,项目过简单涵盖的知识面不能满足教学的要求,项目过难学生难以理解,增加教学难度。因此选择合适的项目案例进行教学,是项目设计教学的关键,项目设计教学包括课堂教学、实训和课程设计,课堂教学的案例应该是连续的,前后关联的,案例涉及的知识点要循序渐进,实训是程序设计课程的关键环节,实训的项目要和课堂教学的接近但又不要完全相同,要留给学生独立完成的内容,否则实训课就变成了打字课。课程设计是对程序设计类课程的综合应用,也是培养学生程序设计能力的必不可少的环节,课程设计的题目要和教学与实训的内容接近和相似,但要在平时上机实训的内容上有一定的扩展,要尽量涵盖所学的内容,要有适当的难度,课程设计任务太少使得设计过程中学生闲暇多,涉及到的知识点少,动手能力得不到很好的锻炼,从而影响了教学质量。设计任务分量过大,学生难以完成,导致设计过程草草收兵,应付了事,挫伤了学生的学习热情。课程设计应该选择一个较完整的项目,让学生从分析任务开始,到看到一个能运行的较完整的成果,这样能大大提高学生对程序设计的兴趣。因此选择合适的项目是项目设计的关键,只有选择了合适的项目才能达到预期的效果。
2.2做好各门课之间的协调。程序设计能力的培养是由多门课程来完成的,包括面向对象程序设计,数据库、信息系统开发等课程,在教学中各门课程要相互关联配合,前期课程要为后续课程打基础做铺垫,后续课程要结合前期课程的内容,这样学生学起来前后有连续,知识点反复使用,加深了理解,也知道这些知识的用途,学习的目的性也更强。因此制定好各门课程的教学大纲是关键,各门课程的知识点和内容要互相协调和补充。
3、做好教与导的关系
3.1理论与应用相结合
程序设计能力表现在项目开发上,开发能力的培养中,教学的重点是培养学生分析问题和解决问题的方法和步骤,高职的重点在应用,因此教学中重点是教会学生基本概念和知识点的应用,注重培养学生用学过的知识和查找别人的成功例子,开发项目中有大量的相似工作是自己和前人已经做过,教会学生看懂这些案例,把这些案例变成自己的程序,能快速地实现自己的项目,过去我们单独地讲解每个命令、控件的用法,学生用起来很困难,分离的代码学生也不会在项目开发中使用。用项目案例讲解,代码是上下文连贯的,学生就容易理解,再重点介绍针对不同的应用怎样修改哪些内容,这样学生也会在别的项目中使用,收到了较好的效果。
3.2做好上机实训辅导
上机实训是能力培养的重要步骤,有时学生课堂上听懂了,上机实训却不会做,或者只会照着书本输代码,不知道代码的用途,这样就没有达到目的,因此上机指导也是教学环节的重点,不能只训不导,老师要在实训过程中认真指导学生,对学生出现的问题要及时解决,这对老师的实际操作能力提出了较高的要求,如果老师不熟练,不能及时帮学生解决碰到的问题,学生被问题难住就会失去信心。老师在帮助学生解决问题的同时也能指导和培养学生发现问题和解决问题的能力,增强学生的信心和兴趣。
3.3做好课程设计的指导是关键
能力的培养是综合的,课程设计可以把所学的知识综合起来应用,因此课程设计的选题非常关键。课程设计中老师要认真做好准备,认真写好设计任务书,任务书应包括:(1)设计目的、任务;(2)设计依据;(3)设计相关资料;(4)设计步骤与要求;(5)成果内容;(6)设计进度安排;(7)纪律要求;(8)成绩考核标准。如有必要,还应编入相应的设计例题,供学生进行课程设计时参考,但也不能把老师做好的项目程序给学生,把课程设计变成打字和调试,这对程序设计能力的培养是不利的。课程设计中老师要随时检查辅导,督促学生认真完成任务,也要及时帮学生解决碰到的问题。对优秀的学生可以根据情况追加一些内容,这样能让好学生学到更多的知识,提升自学能力和自信心,也能带动中等学生的积极行。在课程设计中知道老师要对一些设计规范、设计方法和设计步骤做详细介绍,培养学生的职业技能和规范的设计步骤,这对学生毕业后的就业是有很大帮助的。设计过程中要倡导同学间互相讨论、互相帮助、互相学习、共同提高的团队精神,对一些学生做的好的通用类可以介绍给其他同学用,这可以培养学生的团队互助精神。项目课程设计用小组的形式比较好,这样能照顾到程度不同的学生,能力强的学生承担一些较难和关键的任务,能力较差的学生承担一些简单的任务,学生之间互相帮助,相互学习,共同完成设计任务,培养了学生的团队精神,在同学的鼓励和督促下能力差的学生也不会轻易放弃。
一、引言
随着信息技术的发展和普及,社会对信息类人才的要求越来越高,很多高校都设立了信息类的相关专业以满足社会发展的需求。其中程序设计类课程是信息类专业的重要基础课程之一,这类课程主要是通过理论知识的传授与实验结合,培养学生的逻辑思维能力和实践能力。桂林理工大学信息类专业中程序设计类课程占到了很大的比例,主要包括程序设计方法学、高级语言程序设计、面向对象程序设计、Java程序设计等,这些课程之间存在很强的互联关系,属于核心课程,所以此类课程群的建设将会促进一系列课程的良性发展。由于程序设计类课程群和生产实践紧密相关,所以它对培养“三实型人才”起到非常重要的作用。所谓新“三实型”人才主要是指实干、实践和实用,其中实干是对思维的培养,实践则是实际动手能力,实用是指所学符合社会需求。本文主要针对程序设计类课程进行探讨,首先,结合我校信息类专业的特点,对程序设计类课程群建设的现状进行了分析;之后,指出了现在程序设计类课程群方面存在的不足;最后,针对存在的问题,并结合程序设计类课程的实践教学认真总结经验,对该类课程的建设和发展提出一系列相关的研究和探索。
二、课程教学现状及存在的问题
1.地域性问题。我校位于西部地区,经济较为落后,高校生源多来自本省和其他经济落后区域。以信息类某专业某年级为例统计(表1),学生人数为81人,77.78%的学生生源地为本省,其中65.43%的为偏远山区。这些来自经济发展较慢地区的学生,大多数是在进入大学后才正式接触Windows操作系统的计算机,所以起点低、学习难度大是程序设计类课程教学中遇到的问题之一。
表1 信息类某专业某年级学生生源地统计表
学生生源地 比例
生源地来自城镇 34.57%
生源地来自农村 65.43%
生源地来自省外 22.22%
来自东部发达沿海省市 7.40%
少数民族比例 34.57%
2.课程特点的问题。程序设计类课程最大的特点就是注重学生实践思维及解决问题能力的培养。与其他偏理论的课程相比,这门课程的实验课时比例大,但是由于实验课时间比较紧张,学生在学习过程中缺乏自我约束能力,容易被各种网络娱乐吸引,所以尽管程序设计类课程要求掌握的语法和句法比较基础和简单,但由于上述问题的存在,很难达到培养学生程序设计思维的目的。课程的考核方式也存在一定的缺陷,由于理论考试分值占比偏大,实验操作分值小,所以大多学生采取考前突击、临时抱佛脚的方式应对考试,很少在平时实践中慢慢思考、揣摩和体会。
3.传统教学方法的问题。教师在程序设计教学过程中一般套用的模式是:先从语言的发展史开始,再到相关的语法、语义,之后通过简单实例和实验教学结合的方式让学生理解程序设计,培养学生的程序设计思维能力。由于程序设计语言枯燥,没有形象生动的画面,单一的教学方式让学生失去对程序语言类学科学习的兴趣。另外,由于不同的程序设计语言中很多语义和语法规则都不相同,增加了编写程序的烦琐与枯燥,让学生去记住每一种规则和含义,还要去调试找到程序错误,更使得学生学不懂、听不懂,学习思路更加混乱,极大地降低学习的效率和学习此类课程的积极性。
三、课程教学改革思路
1.教竞结合。我校信息类相关专业一共六个,可以分为计算机和电子信息通信两大类,总数达到1800余人。经过教学团队的长期教学实践总结发现,学生对参与科技类竞赛的积极性很高,所以从2015年开始每个专业都选择一项有利于本专业发展的全国性竞赛项目,而且在教学上也设置了相应的课程引导,帮助学生参赛。为让学生对ACM国际程序设计大赛有一个初步的了解,学校特设ACM程序设计实践课程,同时这也是广西高校首次将国际大赛ACM引入到课堂教学中。另外,我校仍然大力支持传统比赛,如“蓝桥杯大赛”“中国软件杯设计大赛”等,这些课程都采用了相应的算法类教学。
2.教学课程设置改革。对于程序设计类课程,除了保持原有的理论学时,还要加强对实验教学的监督和管理,加大实验考核比例,增设实训实践类课程。其中实训类课程的开展主要是在学生完成某个程序设计课程后进行的,课程时间较为集中,主要在实验室机房完成,实训题目主要由教师设定,学生也可以根据自身情况和教师商量后确定题目。而实践类课程主要是在学校的课外实习基地展开,由企业有经验的工程师带领学生完成实践,解决实际问题。教学课程的改革,将有利于理论与实践的结合,使学生增强动手能力,引导“三实型”人才的培养。
3.师资培养。由于程序设计类课程具有很强的实践性,要求教师不仅有深厚的理论知识,还需要有一定的工程实践背景。所以为了适应工程型教育的需求,学院加强了对教学团队的培养,除了引进博士学历的人才外,还引入工程型的教师,要求其有2?3年的工程实践背景,参与过企业项目开发,具备工程实践经验。另一方面,积极协助青年教师去国内985/211高校和国外高水平大学进修或者访学,鼓励青年教师申报各种基金项目。
四、总结
本文结合我校信息类专业的特点,依据教学团队多年实践教学经验,提出了一系列程序设计类课程改革和探索的新思路。相信通过课程设置的改革,将竞赛融入教学中,能有效地引导新“三实型”人才的培养,增强学生动手实践编程的能力,增加学生未来就业的筹码。此外,在今后的教学中,教师将进一步深化课堂教学研究,教学水平还会不断提高。
互联网技术的高速发展已经对我国的教育领域产生了深远的影响。与此同时,“Java程序设计”课程的教学和改革也迎来了挑战和机遇。因此,为了提高“Java程序设计”课程教学质量和教学效果,充分发挥学生的主动学习积极性,探索线下线下的混合式教学模式显得非常必要。教师要不断深化和改革课程教学,创新教学模式,最大限度上提高课程价值。混合式教学(即线上教学)与传统课堂教学(即线下教学)相融合,可以在很大程度上推动“Java程序设计”高职院校的教学获得新的成效。然而结合实际情况,虽然我国大多数高职院校开展了“Java程序设计”课程的混合式教学,但是,教学过程中还存在着不少的问题和弊端。因此,高校教师还需要深入对“Java程序设计”课程混合式教学模式的研究和探讨。
1 高职“Java程序设计”课程教学现状
“Java程序设计”是我国高职院校软件技术专业的一门重要专业基础课程,其主要内容比较广泛,而个体差异广泛存在于我国高职院校的学生中,并且很大一部分学生的计算机思维能力较弱,自我约束能力和自我学习能力较差,这就导致了在进行“Java程序设计”课程教学时存在着巨大的困难[1]。
1.1 学生正确学习意识不足
由于高职院校中的学生普遍缺乏良好的自我约束和自我学习能力,同时也对专业不够重视,对课程的认识性不足,相当一部分学生在课堂中打瞌睡、玩手机,这让“Java程序设计”课程的教学变得十分困难。
1.2 课程实训安排不合理
由于“Java程序设计”课程在很多高职院校中只会开设一学期,因此学生对于课程的整体学习和课程进度的把握显得十分有限。“Java程序设计”课程目前朝着多样化的趋势发展,然而,我国高职院校“Java程序设计”课程普遍缺乏对实训课程的合理安排,并且可能会降低已有的实训课程难度来满足基础较差的同学,导致实训效果和实训效率很低。
1.3 课程体系建设还有待加强
许多高职院校在进行“Java程序设计”课程的教学和设计时,往往都没有考虑到学生的基础能力是比较薄弱的,忽略了学生只是软件技术专业的“初学者”身份。教师在专业课程的教学过程中,也没有进行对阶段性教学成果的总结与反思,只是不断地要求学生进行专业知识和技能的学习,从而导致学生缺乏对课程的总结和反思。同时,缺乏对“Java程序设计”这门课程的后续安排,缺乏循序渐进的课程体系,使得学生的学习动力不足,课程前后衔接不完善也导致了学生出现知识脱节的情况,不利于学生的长期学习。
2 线上线下混合教学模式分析
2.1 合理科学的教学评价体系
笔者认为,一个完整的课程评价体系应当是贯穿在整个混合教学过程中的,评价体系应当完整地将学生在学习过程中的状态展示出来,在教师进行课程的全面教学过程中,要充分鼓励学生积极自主参加教学评价,从而让学生能够掌握自身的学习状态。教师也应当在教学过程中,充分地对学生知识掌握能力和技能掌握能力进行综合评价,并且设置学习小组,对学习小组长进行领导力评价。建立起这种评价体系,能够在很大程度上带动学生的积极性,提高学习积极性。
2.2 充分认识学生的学习需求
学生的学习需求是任何一门课程能够良好实施的重要基础。课程教学目标应当在充分结合了学生学习需求的基础上进行设定,为后续的教学工作最大化提供便利[2]。学生的学习需求一般来讲是分为主观和客观的。在学生的角度而言,主观学习需求就是对教学成果和教学目标实现的期望,而学生今后的职业发展、社会地位、薪资待遇等因素则是学生的客观学习需求。“Java程序设计”课程混合式教学要充分地对学生的主观和客户学习需求进行平衡,尽量做到主观需求和客观需求能够对等。
2.3 教学策略制定
“互联网+”大背景下,线上线下混合式教学已经成为各高职院校教学的基本模式。传统式教学是一种很强的主观式行为,强调的是教师的教学行为,而混合式教学策略则是充分展示教学环境和教学资源等元素。在制定混合式教学策略时,教师要注重随时对课程进行优化和改善,比如可以对学生进行分层次教学,对不同层次水平的学生安排不同的教学实施任务,能够帮助教师很好地完成教学任务,同时也能够高效地达到教学目标。
3 线上线下混合式教学在“Java程序设计”课程中的具体应用
3.1 设置合理的教学项目和情景
“互联网+”背景下,不同课程的教学项目和情景、课程设计形式等都是多种多样的。通过利用互联网将学生的学习和课程的教学紧密联合在一起,是一种当下非常新兴的教学模式,同时也是一种重要的、不同于传统教学模式的突破。在混合式教学模式中,教师需要把互联网课程与课程实施项目、理论情景进行紧密结合,比如可以在教学过程中设置图书馆管理系统、学生信息管理系统等情景,并对其进行合理设计,能够在一定程度上提高学生的学习兴趣[3]。
3.2 提高实验课程占比,提高实验教学力度
实验教学在“Java程序设计”课程中占比非常大,教师在设计混合式教学的过程中,应当着重突出实验教学的力度,充分体现“Java程序设计”教学的实用性和适用性,增加实验教学在课程中的课时占比[4]。教师还应当在每一次实训课程开展前,提前给学生布置实训任务,让学生充分地对学习任务进行了解和预习,这也能够让学生在课外进行自主探索学习。此外,教师在课程的期中考核和期末考核中也应设置充分的实验内容,这也能在一定程度上提高学生将理论知识转化为实践应用的能力。如此,才能够大大地提高混合式教学的教学效率,充分发挥实训教学和实训课程的作用。
3.3 优化和不断完善课程体系
“Java程序设计”课程旨在提高学生编程能力,提高项目开发能力,因此,课程体系的不断优化和改善对于“Java程序设计”课程的混合式教学实施显得尤为重要。“Java程序设计”前中期要求学生重点掌握语法基础、数据库等知识,后期则需要学生重点掌握面向对象、Java高级特性等知识。所以,对学生进行综合评价,掌握学生的学习需求,了解学生的学习能力,是教师不断优化和改善课程体系的良好方式。只有构建出合理且科学的课程体系,“Java程序设计”课程的教学实施效果才能得到良好的保证。
4 结语
总之,开展和实施混合式教学对于“Java程序设计”课程的教学有十分重要的作用。许多高职院校也在大力地建设和发展自己的网络课程,并已经在教学过程中实施混合式教学。教师也可以在“互联网+”大背景下不断地进行网络课程教学创新,为学生创造和提供良好的学习条件。
[参考文献]
[1]刘长旺.基于工程实践能力培养的Java程序设计课程教学改革研究[J].教育教学论坛,2017 (25 ):134-135.
1计算机专业程序设计课程实践教学的主要范畴
计算机专业程序设计课程实践教学主要包括上机实验、综合练习、课程设计、软件开发实训等几个方面。上机实验是最基本的实践教学,由任课教师根据理论教学的具体进度,设置一些简单的实验,要求学生在规定时间内完成,通过这些实验加强学生对理论知识的理解和掌握。综合练习一般在经历了一定的学习阶段之后,任课教师根据现阶段学生的学习情况,结合日常生活、工作中面临的实际问题,设置一些难度较小的综合性练习题,要求学生在规定的时间内进行调查分析,然后应用所学知识解决问题。综合练习主要侧重某一方面具体知识的应用。课程设计是在本门课程学习完毕后,任课老师根据教学大纲的要求,结合课程的特点和实际应用,设置一些难度适中、综合性强的课题,要求学生按要求完成课题任务。课程设计主要考查学生对知识综合运用的能力,培养学生利用所学知识来分析问题、解决问题的能力。软件开发实训则是通过实际软件项目来提高学生的职业综合技能。计算机程序设计实践教学都采取由浅入深的原则进行,其过程为:上机实验综合练习课程设计软件开发实训。
2计算机专业程序设计课程实践教学的重要性
2.1加强实践教学是实现计算机专业程序设计课程教学目标的要求计算机程序设计课程的主要目的是培养学生的程序基本开发能力、程序代码编写能力和程序调试应用能力,重点培养学生的算法应用分析能力和数据综合处理能力。其主要任务是通过日常教学,使学生掌握程序设计的一般方法和程序设计的具体过程,掌握计算机程序设计语言的语言特征,具备程序设计师的基础应用能力。在教学过程中,任课教师应以人才培养为目标,侧重编程综合应用能力的培养,通过具体的实践教学来提高学生的职业技能。
2.2实践教学是提高程序设计课程教学质量的重要手段实践教学是培养学生动手能力的重要手段,是提高学生的动手能力和职业技能最有效的方式,是对学生理论知识掌握程度的检验。“知识来源于实践”,“实践是检验真理的唯一标准”,计算机程序设计课程的理论知识应通过编程实践体现,通过具体的程序设计案例和实际编程来提高学生对理论知识的掌握,学生
综合编程能力的强弱是检验计算机专业程序设计课程教学质量的基本标准。
3成人教育业程序设计课程实践教学存在的问题
我国成人教育业程序设计课程的实践教学存在问题的体现在下述方面:①实践设施不足,教学条件不完善;②对教学认识不足,实践教学不受重视;③实践教学方法陈旧,考核方式单一。 转贴于
4积极探索,构建合理的程序设计课程实践教学模式
4.1实践教学要符合教学目标的需要计算机专业程序设计课程实践教学必须紧紧围绕专业培养目标、人才培养规格进行。要结合专业特点更新教学内容,调整实践教学内容、方法和手段。实践教学内容的更新,要注重对学生编程综合能力的培养和创新能力的培养,要对已有的实践教学内容进行筛选、整合,改变单一的演示性、验证性实验,增加综合性、设计性、创新性实验,要充分利用计算机课程的教学特征,提高实践教学效果。
4.2以社会就业需求为主导,开展多种形式的实践教学程序设计课程实践教学主要有上机实验、课程章节综合练习、大作业、课程设计、软件项目实训、校外软件基地实习、软件合作企业顶岗实习、校内软件课题研发等。其中实训、实习和研发都是采用“真题真做”。通过上述这些实践过程,学生的程序设计综合应用能力和软件开发能力都能得到良好的锻炼。
4.3程序设计课程实践教学设计一般要求定教学的具体内容。大多数情形下,采用实例教学效果比较明显,通过实例的演练促进学生对知识的掌握。实例式实践教学设计一般应包括教学目标、课时要求、教学组织、教学内容、实践方式、实践总结、成绩评定等几部分内容。在设计实践教学内容的过程中,应做好三个方面工作。一是要结合学生实际情况,尽量体现知识性、实用性,激发学生的灵感和创造欲,使学生对实践内容感兴趣,以充分调动学生的学习积极性和主观能动性,促进学生积极创新,完成实践内容。二是应注重理论教学与实践教学相结合,保证实践教学与理论课教学相适应,加深学生对基本理论、基本知识的理解和掌握。三是保证实践题目难度和工作量适中,学生通过自己的努力,可以在规定时间内完成实践任务,实践方式可以灵活多变。
目前,程序设计类课程已作为中职计算机专业的一门重要课程。在学生完成了计算机基础知识的学习后,通常要学习一些高级语言的程序设计类课程,如VB、C#、ASP. NET等,而这些课程要求学生必须有较好的计算机基础和灵活的逻辑思维能力才能学好。在实际的教学过程中,虽然实施了“理实一体化”的教学模式和以学生为主、项目化教学等方式,但效果并不理想。所以,必须寻找一种更有效的教学方法来提高程序设计类课程的教学效果。
一、教学现状及原因分析
相信大部分计算机教师在教学生程序设计类课程时362总有这样的感觉:讲理论知识时很多很全,学生感觉枯燥无味;实训操作时,学生没兴趣,消极应对。那么,是什么原因造成以上现象呢?我认为有以下几点。
1.课程的特点。程序设计类课程一般都是由理论知识和实训操作两部分构成,是一门专业性较强的课程,要求学生对知识点掌握十分透彻,并具备一定的逻辑思维能力。如C#语言中学生必须要掌握.NET框架和基类库、程序的构成和结构、类、数组等概念才能较好地完成实训操作。概念之抽象是学生难以学好的一个原因。
2.学生的特点。中职学生大多计算机基础薄弱、学习兴趣低、自主学习能力差。但他们又对新鲜事物充满好奇,能进行探索和思考。通过调查发现,大多数学生觉得学不好的原因是觉得课程知识点难懂,实训操作模式单一(主要是完成书本中的项目实训),没有积极性。
3.教学设计与方法。在传统的教学中,教师一般将书本的理论知识先讲授,再让学生通过项目实训来巩固所学知识,通常采取任务驱动、小组合作学习、教师引导的方法完成实训任务。然而在书本中,每一个项目对应的是一个知识点的专项实训,项目与项目之间相对独立,学生一旦没有对知识点掌握透彻,就很难完成项目实训。虽然有小组合作,但由于知识抽象,掌握知识技巧的学生也很难教会不懂的学生。
二、项目结合,大胆探索
针对以上现象,如何提高程序设计类课程的教学效果呢?本人经过研究和探索发现,要让学生学好程序设计类课程,光靠书本理论的讲授和实训是不够的,只有充分地激起学生的兴趣,学生才能想学、去学、喜欢学,主动性和积极性才能提高。对此,本人总结出了一套“项目结合”的教学方法,就是打破传统的教学法,将某一章节独立的项目重新设计,循序渐进地结合起来,提高项目的趣味性,用兴趣绑住学生。比如在《Windows程序设计案例教程(C#)》中第二章,书本中的项目依次是时钟实例、加法练习器实例、项目选择器实例、选择题应答器实例、倒计时实例和英文字母练习器实例。通过对项目和教学的重新设计,我以英文字母练习器实例为主线,将倒计时实例、选择题应答器实例、加法练习器实例中的重要知识点结合起来,形成了一个趣味性强、知识点关联性高的一个新项目。下面以《Windows程序设计案例教程(C#)》中第二章的《英文字母练习器》教学为例,和大家探讨“项目结合”的方法在实际教学过程中的作用。教学设计和教学方法分为如下几个步骤:
1.引入游戏,创设情境。教师展示一款大家都比较熟悉的“切西瓜”游戏,并进行操作演示,同时让学生观察思考,分析游戏的功能,从而激发学生兴趣,学生通过观察分析出游戏所具备的功能,为新课作铺垫。教学方法可采用学生观察法,讨论法。
2.项目要点剖析,提高认识。首先,以书本中的英文字母练习器实例为基础,分析项目的功能、关键技术、设计的方法等,如timer的功能、pictureBox的作用等。然后,对比“切西瓜”游戏,让学生分析项目中的不足及完善的方法。教学方法可采用小组讨论、教师引导。
中图分类号:TP312.1-4 文献标识码:A 文章编号:1007-9599 (2012) 16-0000-02
C#作为一种简单、现代、面向对象且类型安全的编程语言,由C和C++语言衍生而来,虽然与C和C++有相似之处,但是它有自身的特点和优点。C#语言的优势如下:
具有高度的灵活的性和强大的底层控制能力,能与计算机硬件直接通信。
具有可移植性,尽管程序的编写是针对所使用的操作系统和特定的计算机硬件系统的,但是只需要做少量的修改就可以应用于其他系统。
代码高效,具有相当的执行效率。
1 课程特点
根据高职教学的特点在课程设计上体现“以就业需要确定岗位,以岗位确定能力(技能、技术)”的原则。每一岗位技能由一个系列课程(2~4门课程+1~2门实训课程)教学进行培养,形成“岗位系列课程链”。也就是,把职业岗位要求的一项专门技术看成是一项任务,并设计成一个贯穿教学全过程的课程链;以核心知识课程打好技术和能力基础;以行动导向的实训课程或课程设计项目培养职业需要的技能。在软件开发核心能力的培养中,C#程序设计是非常重要的一环,所以在课程讲授主线上,按照“读程”、“编程”、“开发”、“测试”、“研发”的能力结构和学习过程设置教学环节,学生可按“模块化、组合型、进阶式”等方式选择学习内容,逐步深入掌握编程知识,并兼顾其他能力培养。
2 教学实施及管理
在实际教学中,教学模块设计以软件开发岗位任职要求、工作过程为导向,任务驱动,遵循由易到难的规律,形成由单一能力培养到综合能力培养的思路。把软件开发分为C/S和B/S两种模式,对于两种模式分别以综合实训项目入手,强调实际工作能力的培养,而不是单一知识点的掌握。目前,企业对毕业生的用人标准中,动手能力、学习能力、与人沟通能力和团队合作能力,是其选择人才的重要标准。动手能力和实践经验的提高,必须在实践环节的教学管理中加以训练和培养。通过实践课环节的学习,学生的动手能力、自主学习能力等技能都得到了提高。而其项目开发本身的趣味性和挑战性,很好地激发了学生对实践环节的学习积极性。因此,加强实践环节的培养是C#程序设计课程的教学重点。在教学中综合运用多种教学方法。根据C#程序设计课程的特点,并通过几个学期的教学实践证明,采用项目教学法,在不同的项目中设计小的教学情境,模拟真实的工作环境,用实际任务驱动教学的开展,采用激励式教学法、团队互助式教学法等多种方法共同使用,使学生更好的掌握各项知识和技能。对于不同的知识点灵活的运用不同的教学方法,达到良好的教学效果。
3 校企合作课程建设
深化教学改革,遵循软件技术职业能力的形成规律,发挥教师的实践工作经验,强化任务(案例)驱动和“以做为主”的教学方法,将企业中真实项目、案例和技巧融入到教学中,使课程的讲授更加贴近企业的真实工作环境和技术要求,并进一步强化“以教师为主导,学生为主体”的教学理念。
在教学中通过角色扮演的方式模拟企业的实际工作环境,使学生感受更加真实。企业技术人员和教师在软件开发实训项目中通过扮演项目经理以及系统设计师等角色,带领学生完成真实的软件项目。软件开发是一个多角色协作的过程,有配置经理、开发人员、文档作者、测试人员、维护人员几个角色可供选择,只有在实训项目中让学生通过扮演适当的角色,才能给学生真正沟通,协作体验,并获得适应未来工作需要的实际经验。
4 多种教学手段的应用
4.1 精心设计教学课件,合理设计教学情境
在课堂教学中,不是死板的运用PPT演示知识点,而是把知识点穿插在实际案例中,合理的设计教学情境,让学生更加深刻的理解所学知识点。
4.2 讲解编程思路,引导学生编程
在教学过程中,教师并不是把大段的程序发给学生,再给学生讲解程序功能,这样只会使学生一味的抄袭,缺乏自我思考。教师应该引导学生,让学生参加到程序的开发中,随着教师的思路一同完成的程序的编写,并把程序中相近的部分让学生独立完成。
4.3 利用LanStar教学广播系统
在教师讲解知识点和课后总结中,通过广播教学方式,让全体学生的注意力集中在教师身上,提高教学效果。在学生自主练习时,学生可以运用LanStar系统进行课堂提问,教师可以及时辅导,并且可以让学生自己把优秀的学生作品,通过LanStar系统展示给其他同学,提高学生的综合素质。
4.4 利用互联网进行课后教学辅导
课后教师运用QQ、MSN等软件,为学生提供远程在线指导随时解决学生在学习过程中所遇到的问题,教师可以通过QQ软件提供的远程协助功能,教师可以远程登录学生的电脑,为学生解决编程中的各项问题,使学生的学习不再局限于有限的课堂教学时间。
5 探索以技能考核的新方式
在考核方式上,知识理论性按融合了知识点与技能点的试卷形式进行考核,项目设计按作品完成情况进行考核,实训操作按操作和测试过程中学生现场表现进行考核,对于不同内容采用不同的考核方式,考核标准也有所不同,该标准应包括:实训题库(学生必须掌握的操作技能)、评价标准、组织形式等内容。实行终结性考核与过程性考试相结合的方式。以实际技能为导向,把实践能力和项目能力纳入考核范围。采用笔试、机试、综合作业、项目评审考核等方法。并以此全面衡量和控制教学质量。
所以,在课程的考核中既要考核学生理论知识的掌握程度,学生的实践动手能力,更要考核学生的团队协作能力,通过平时的知识点考核和最终的项目展示、项目答辩达到预期效果。
6 总结
在C#程序设计课程的教学中,通过与企业之间的合作,取得了良好的教学效果,教学中采用企业的真实项目开展教学,并邀请企业技术人员与学校专职教师共同完成课程的讲授,既发挥了教师理论知识强的优点,也使学生在企业技术人员身上学到了最新的实践技能。 “工学结合”项目贯彻整个教学过程,学生在课程学习中,参与企业的真实案例,让学生在真实企业环境中提升岗位技能。在教学中,强化任务驱动和“以做为主”的教学方法,将大量真实的任务、案例和操作技巧融入教学内容,使课程内容紧贴生产实践和技术前沿,强化“以教师为主导,学生为主体”的教学理念。
参考文献:
[1]王婧.任务驱动法在计算机课程教学中的应用[J].计算机教育,2011,8.
[2]游祖元.C#案例教程[J].电子工业出版社,2008,8.
C语言程序设计既是高等学校一门重要的公共基础课程,也是计算机专业的一门专业基础课。由于逻辑性和实践性强,使该课程的教学和实践存在一些误区,主要表现如下。
1) 学生不清楚本专业的特点。多数高校将本课程安排在大一的第一学期,由于对于本专业的课程体系了解不够,导致新生对各专业特点混淆不清,有的学生去报考计算机等级考试,结果有的还不如非计算机专业的学生,致使一些学生学习消沉。我们通过和学生谈心,得知不只是大一有这种现象,大二的学生甚至也存在这种心理[1]。
2) 学生学习本课程目的不明确,兴趣不高。在教学中,有不少学生问,既然C#和Java是现在的主流编程语言,为什么还要让我们学习C语言?所以我们在第一堂课介绍计算机语言发展时,将C语言和其他语言作比较,强调C语言是当前程序员共同的语言,它使程序员互相沟通,比流行语言都更接近机器。C语言更适合解决某些小型程序的编程,在编写底层的设备驱动程序和内嵌应用程序时,往往是更好的选择。有了C的基础,在需要时进一步学习其他语言,也是很容易过渡的。当然,第一堂课上,我们把重点放在培养学生的兴趣上,所以会用1个学时去展示历年实训的优秀作品,这些作品都是完整的系统,除了包涵基础知识,还有高级技术。我们向学生灌输学习这门课程的境界:Beginner―Advanced―Professional。
3) 任课教师对课程的定位、理解和把握不够。老师只有有一桶水,才能教给学生一碗水,教得了学生不等于教得好学生,学生的评教正说明了此问题。
通过实践,我们对计算机专业本课程教师的要求是:“复合型”的教师――既要精通这门课程,还要有3年以上实际项目开发经验,并且非常熟悉计算机其他学科的知识,而“教师的成功在于培养出值得自己崇拜的人[2]”。
因此,我们对本课程的定位是,以程序设计为中心,掌握语法,了解算法,重在算法的实现――编程。算法是灵魂,语法是基础,编程是中心。处理好三者的关系,直接决定了教学的成败。
算法尽管重要,但本课程不是算法设计课程,不可能过多地介绍算法,更不是在研究算法。我们要在学生学习编程的过程中,介绍相关的典型算法,引导学生面对问题去思考如何构造算法,编写程序的过程本身就是设计算法的过程。
为此,我们对本课程体系进行了改革,并将本课程与计算机其他学科进行了融合教学与实践,取得了非常好的效果。
1课程体系的改革
1) 修改教学环节。
我们把原计划一学期的教学时间调整为一学年。第一学期进行C语言程序设计基础的教学,第二学期进行C语言程序设计的进阶教学,在学年末进行该门课的实训,接着的暑假进行校外实习。根据不同专业,我们还开了小学期,在小学期里有连续12周的实验环节。
2) 修订培养计划和大纲,改革考核方式。
我们把本课程的教学改革与本学院的“卓越工程师计划”相结合,组织教师外出考察、研讨,然后重新修订了培养计划、教学大纲、实验大纲、实训大纲、实纲。相应地,考核方式也作了调整:基础教学由笔试转向机试,试题难度高于非计算机专业的等级考试,每次考试的题库都将重新命题和审阅。进阶教学由考试转向完成3 000行以上大作业形式的考查,实训由过去的全班一个模拟题目转向提供多个实际验收签定过的项目,进行C版本的再次开发,实习由过去的只是到实习基地参观调整为直接进企业拜师跟班学习。
3) 丰富配套的教学资源。
我校组织编写了《C语言程序设计基础及进阶教程》,被评为“十一五”国家级规划教材,已于2010年由清华大学出版社出版发行。我们还配套编印了上机实验的实践教程(将在今年教材的第二版时一并出版),以及实训时的实训教材和实习的实习教程,并建设了精品课程在线学习平台,供师生讨论和交流。制作了与教材配套的课件与教案,供教学参考。
我们专门搭建了学校ACM/ICPC在线测评平台,并组建了容纳120人的竞赛专用机房,成立了ACM/ICPC竞赛班。2008年起,河南省计算机学会主办一年一次的河南省大学生程序设计竞赛,我们每年都组队参加,在过去的三届竞赛上,共获得4枚金奖、2枚银奖、1枚铜奖。2009年参加亚洲区赛现场赛获得优秀奖。2010年参加第35届亚洲区赛,通过预赛,获得天津赛区、杭州赛区和成都赛区的决赛资格,并在成都赛区获得1枚铜牌,排名第59名,是河南省该项赛事最好成绩,为学校争得了荣誉。在学校内部,我们从2009年开始每年组织两次全校程序设计竞赛,至今已经主办了四次校级竞赛。
4) 转变教学理念。
我们提出了C语言与计算机相关课程的融合教学与实践的教学理念。
5) 采用新的教学方法。
在课堂教学中,我们使用任务驱动、课堂讨论、3W1H教学法、现场编程教学法、课堂陷阱教学法、任务分解教学法、任务贯穿教学法、分散集中教学法、两段教学法、实训优秀作品展示激励法、融合教学法等多种教学法,在课外使用网上在线讨论与答疑、竞赛辅导拨高法、课题组观摩讨论法。我们打破大学考试试卷不评讲的一贯做法,在第二学期的进阶课程第一堂课评讲上学期期末试卷[3]。
(1)3W1H教学法。即:What――解决什么问题,Why――通过实际生活例子引入为什么要解决这个问题,Where――在什么条件下能够解决,How――如何运用学到的方法、技术来解决问题。
(2) 现场编程教学法。在讲授有代码编写的理论课时,当一个理论知识介绍完后,教师出一个难易程度适当且有代表性的题目,让学生随堂写代码,并抽学生到黑板上写,或者抽几份学生作业当场点评。
(3) 课堂陷阱教学法。在期中检查座谈会上,有的老教师说学生很难发现自己程序的错误,而课堂上即使是老师手下的一个笔误,学生也能发现并喊错了。我们正是可以利用学生这种“容许自己范错,不许老师失误”的习惯,对于学生书写代码时容易出错,或者上机碰到的共性问题,我们在课堂上演示时设下陷阱,故意把代码写错,有的学生当时就能发现,而有的学生在编译时才发现有错,我们用自己的错误来吸引学生注意力,加深学生的印象。
(4) 课题组观摩讨论法。我们组织本课题组教师每两周进行一次教学观摩讨论,取长补短,相互学习,推广好的教学方法。
(5) 实训优秀作品展示激励法。我们在第一学期基础课程的第一堂课上展示往届的优秀实训作品,让学生觉得既好奇又深奥,极大地激励了学生的兴趣。临到毕业,大部分学生还能对这堂课记忆犹新。
2与计算机相关课程的融合教学
通过近5年的实践与总结,我们认为如果把C语言程序设计与计算机相关课程进行融合教学,必将促进学生对该门课程的理解,同时凝聚专业特色,促进其他课程的学习,对于学生的自学与综合能力的培养都有积极的作用。
1) 与数据结构融合。
在讲到C语言中的基本数据类型与构造类型时,围绕数据结构的一条主线――四种结构两种存储,联系数据结构中的数据类型,在抽象数据类型ADT中只定义了基本操作,复杂的操作是通过基本操作实现的。在抽象数据类型中定义的操作与C语言中的各种类型的运算,比如取余运算符“%”,在C语言中仅限整数。在讲到查找与排序时,对照数据结构中的查找与排序,介绍一些经典和效率高的算法。在讲到递归函数调用时,用数据结构中的递归调用时栈的进栈出栈变化过程讲解。在讲到scanf函数和其他读取字符函数时,将内存与键盘输入缓冲区结合,使学生更容易理解数据的输入格式。
2) 与操作系统融合。
在讲到变量的数据类型及变量的存储类型时,结合操作系统的内存结构,讲解内存区域分为6个不同的部分来存储不同的数据,使学生了解内存组织的有序性。特殊地,寄存器变量不占内存,而字符串常量存放在符号常量区,通过讲解内存结构,学生就明白静态变量为什么第一次使用时会初始化,以后再使用时用的是上一次的值。在讲解数组的连续存储、链表的动态存储时,结合内存就会理解得更透彻些,甚至可补充内存中堆与栈使用的知识[4]。
3) 与计算机组成原理融合。
入学时,教师介绍计算机发展,一般都会讲到冯•诺依曼原理,那么为什么要学习语言呢?还得从计算机组成原理来讲,从电脑城装配电脑介绍起,首先运用BIOS程序,然后再启动操作系统,最后再运行用户的应用程序。而BIOS程序、操作系统和应用软件都是用语言开发出来的软件,之前都曾经有过C语言版本,BIOS现在还是C语言编写的,而操作系统的一些内核也还有C语言的许多代码。因为大一第一学期的计算机科学导论与本课程是同步开设,学生对计算机的了解还是有限的。同样地,在讲到C语言的三种进制数、位运算、指针时,与计算机的字长、补码运算、指令加以对照,就容易理解些。
4) 与面向对象语言融合。
掌握好一门语言,可以自学其他语言。做到这点不容易,因为大学专业课的特点是学一门结一门,没有哪所大学或哪个专业开设了所有语言,所以在语言课之间融合对照学习,会收到非常好的效果。比如讲到结构体时,与面向对象中的类对照,将结构体变量与对象对照,就比较好理解数据类型和类不占内存,对象与变量占内存了。讲到函数时,与方法对照,讲到函数参数时,补充面向对象中引用的使用,对将来学习面向对象语言和数据结构非常有益。
5) 与数据库原理融合。
程序所需数据从哪儿来?运行结果保存到哪儿去?在讲到文件操作时,将C语言中用到的文件与数据库中数据文件作比较,再联系结构体成员与数据库中的字段、记录,使学生对程序的理解更完整一些。
6) 与编译原理融合。
在演示程序开发过程、多文件的操作、编译预处理时,均可以联系编译原理中编译器的词法/语法分析,教师可以演示单步编译,鼓励学生思考编译的过程。
7) 与高等数学、线性代数、概率论、离散数学、数值分析、运筹学等融合。
如果能将学习C语言与离散数学中的集合论、代数系统、图论结合,再解决高等数学、线性代数、概率统计、几何、数值分析和运筹学中的数学问题,能够极大提高学生的兴趣,也巩固了所学的知识。
8) 与网络融合。
使用C语言可以开发C/S结构的客户端与服务器端程序,在实训和实习时可以分层次进行一些高级的练习,比如C/S结构的网络编程。再提出一些问题,比如如何实现抓图和打印等,培养学生的自学习惯。
9) 与软件工程融合。
结合专业特点,讲解软件开发不仅仅是写代码,还是一个模型的开发过程,对于学生将来毕业做好毕业设计与写好毕业论文有指导意义。特别是软件工程和软件测试专业更是需要了解。
其实,我们在讲授C语言程序设计时,几乎可以和所有计算机专业课程联系起来,比如选修课算法分析与设计,还可以和ACM/ICPC结合,通过ACM/ICPC竞赛的题目寻找合适的教学切入点,有时也可以引入离散数学中的逻辑推理知识,或者构造一种教学情境,让大家感兴趣,能被吸引住,使学生一步步跟着往前走,比如抽几名学生排队讲排序算法。
也可以和非计算机专业课程联系起来,比如计算机英语。同样地,在教学过程中,融合一些新的技术,比如物联网、CPS计划等,学生会更感兴趣。如何融合比较教学,既能深入浅出地完成教学任务又不拖延学时,需要把握好这个度。
3与计算机其他课程的融合实践环节
除了做到融合教学外,在实践环节上如何融合也至关重要。
1) 搭建ACM/ICPC校内在线测评平台。
我们采取竞赛辅导拔高法,成立竞赛班,采取“讲-帮-带”的方式,建立了郑州轻工业学院在线测评平台,如图1所示。丰富了题库,组织校内选拔赛,教师带队参加竞赛。
自2009年开始,我们每年举办两次全校性质的大学生程序设计竞赛:12月举办新生程序设计竞赛(个人赛)、5月举办一次全校程序设计竞赛(组队赛)。均有IT公司赞助,并有开幕式和颁奖仪式,极大地提高了学生的编程热情。
参加ACM/ICPC竞赛,有助于培养学生的抽象思维、逻辑思维、心理素质、团队合作和协同能力[5]。
2) 与考研结合。
我们从大一第一学期就让学生思考自己将来的出路:工作或考研。如果工作就必须学好知识,重视实践,提高动手能力。
3) 与操作系统、C++融合实训。
在后续的操作系统和C++的实训时,安排我们C语言程序设计课题组的教师参与实训,使得C语言程序设计课程的学习更加长期有效。
4) 把等级考试当做门槛。
我们把全国和河南省历年计算机等级考试的题目穿插到平时的教学中,让学生把握每个知识点。
5) 介绍学生参加教师的项目。
我们在授课的同时,也有心培养一些勤于思考用心的学生,介绍他们参与到教师的应急系统、嵌入式、GIS、网络等实际项目开发中,引导学生自学C++和Java、JSP等工具,让他们从实践中得到锻炼,积累经验。
6) 跨学科实训并总结。
在第二学期期末的实训环节,我们让学生分组去做一些稍微大一点的题目。比如C语言语法分析模拟器、BIOS模拟器、科学型计算器、TC模拟器、Windows小游戏、信息系统等。在实训结束后,我们安排优秀实训作品展示总结会,也是对一学年课程学习的总结。有很多外专业的学生自愿来参加。通过展示交流,学生看到了别人的成绩,也看到了自己的差距。
4结语
通过对C语言程序设计存在问题进行思考和分析,我们结合学校实际,提出了C语言程序设计与计算机相关课程的融合教学与实践。经过4年的教学与实践检验,取得了较好的教学效果,对C语言程序设计,以及其他程序设计语言的教学都有一定的指导意义。
参考文献:
[1] 李玉梅.“C语言程序设计”课程的“教、学、做”一体化的探索与实践[J]. 科技创新导报,2010(28):164.
[2] 朱立华,俞琼. C语言教材建设的研究与实践[J]. 计算机教育,2009(13):150-153.
[3] 徐小青,李晓东.“高级语言程序设计”课程教学改革与实践[J]. 计算机教育,2009(13):46-48.
[4] 王祥瑞. C语言中的内存泄漏分析[J]. 长春大学学报,2009(6):27-29.
[5] 武建华. 基于ACM模式的数据结构实践教学改革与探索[J]. 计算机教育,2009(13):114-116.
Integrated Teaching and Practice of C Language Program Design and Other Subjects of Computer
YAN Hongyan1, JIN Baohua1, ZHANG Xiaojuan2, XU Hongxia3