张鸣华:程序设计类课程分析与设想
发布时间:2014-10-08   浏览次数:48

程序设计类课程分析与设想

张鸣华

一、过去的努力和问题

在院领导人引领下,我们已经从10级开始教改。取得了大面积学生会编程、爱编程的成绩,有相当的学生小有成就。

成功在于:

1.     我们的理念是以能力培养为目标,培养应用型人才;我们的做法是用问题驱动,理论与实践一体化的方式教学。能根据学生的情况,让学生学得进去。特别是能带着学生进入学习状态。

2.     教学有OJ的支撑,教师能快速知道学生的情况,给学生明确要求,方便判断学生是否认真做、还是抄作业。学生能用游戏般的趣味方式进行实时互动的学习。

3.     教师大量付出。入门阶段组织ACM队学生及学长对新生多次的辅导;教师长时间用QQ等对学生进行答疑和交流;上宿舍改作业等。

4.     教学要求形式多样,有传授式、引导式、讨论式、学生先学讲演式等。

5.     考试灵活、考纪严明、分阶段测试、按内容用不同形式考。

存在问题的方面:

1.学习环境中的干扰因素较多、有时还涉及到课堂。

2.部分学生的基础欠佳,特别是个别学生的数学基础不够。第一个月学生间就产生巨大的差距,好的学生很快就开始自学后面的内容,而一部分学生要完成一个分段函数的实现都难以做到。

3.目前各门课的课时都不够,特别C语言的教学结果完全不能支撑后继课程的要求。这个课时不够主要是因为学生课后不会学习,或可支配的时间不多,我们的教学基本上要在课堂上完成。南京大学软件学院学生一门计算机问题求解的课一周课外要用6~7小时左右,上海交大的学生一门程序设计或算法类的课一周要用8小时左右。

4.新生入门学习时,有些学生没有电脑支撑课后的练习,相当学生对键盘不熟悉,操作吃力。

5C语言的入门较好,但后继教学深度还有待于提高。后继的数据结构及面向对象的教学中还是以语法为主线。能力培养还得加强。

5.学风影响了教学,学生主要自学场所是宿舍,多次查看,大多数学生是在游戏、音乐、视频之中。考风也难以控制。

6.课程之间的体系结构不大完美。有点儿为开的课程而上课。

二、IT的本质、教学的本质

1.     无论是应用型还是理论研究型的学校,都要以实践为基础。无论用什么口号,我们学生到IT业工作都要能调出代码来。

2.     教是为了学,学是为了用,怎么用就怎么教。上课关注的是学生学到了什么,而不只是教了什么。

3.     能力培养是教学的主要目标。能力在于基础和理论。IT人才的培养要以算法为核心,以数学为基础。

4.     教育的本质应该是让每一位被教育者都能尽最大可能的发展。我们没有权力去放弃哪些学生,但也没有能力强行让全部的学生都能学到同样多的东西。要做的是因人施教,多层次的要求,培养学生的是终身学习的能力。

三、教学模式分析及做法设想

目前,程序设计部分主要以在线测试平台为教学支撑平台,进行理论与实践一体化教学。在教学中以问题为驱动,引导学生自主学习。多门课程综合,共同构建学生的知识体系。各门课的要点如下:

1C语言程序设计

C语言程序设计放在第一学期作为入门课程,注重打基础和学风建设。

1)一开始就进入简单问题的实践编程,前几周对学生及时辅导。教学着重培养学生的兴趣和学习习惯;

2)大约4~5周,基本语句学完之后,要有一个非常正规的考试,即与期末同等级别的考试。第一次考试后就可以暴露一些问题,我们及时弥补,极大可能地让学生完成后继部分的学习。

3)及时控制和引导后进的学生,同时激励有能力的学生先学。

4)测试分成3-4个部分。第一次占30%;第二次与平时合占30-35%;其余为期末部分。

5)考试题目以问题的方式出现,对AC(机子通过)的答题给分。分层要求,基本分占65~70分。是教学要求的内容都考,可以多出题、多分值让学生选做。当C的教学达到完美时,再采用100分制。

2.面向对象

面向对象的教学中,还应以案例为驱动。只在语法方面打转后,学生兴趣会下降,实践能力会淡化,解决问题的积极性也出不来(事实已经表明,教学中只用语法片断培养的学生是不愿意,也没有能力进行后继的学习)。面向对象的思想是要一段时间才可以形成,面向对象的规则较多,但我们学生思维的复杂性不足,因此,在教学中要循序渐进,简单明了,在应用中再灵活变化。

目前要以面向对象的语言作为数据结构的语言,因此教学中要以后续的数据结构的使用为主要目的,也就是可以淡化窗口等方面的教学,但类、泛型等的教学要做到学生能熟练应用,这些内容的考试用OJ进行。当有能力有条件时,引导学生实现一些小项目。

3.数据结构与算法

由于每周4课时,根本完不成数据结构与算法所有内容的教学,再加上学生之间已经产生了很大的分化,因此数据结构的教学中不要急于求成,要注意随时对学生补缺补漏,着重建立算法的思想,着手算法的实现。要使我们的学生有做大项目的能力和考研的能力,就得有象ACM类的课外活动来完成数据结构中的剩余部分。

目前情况下的数据结构教学要求,还应以代码实现为主,主选学生能掌握的内容。等到有条件、有能力完成数据结构所有内容教学时,再把算法设计定为重要部分。

数据结构采用分阶段考试,大致三段,线性表、栈、队列、排序为第一阶段,成绩占30-35%,不合格的学生给予多次补考。临近期末时的考试和平时成绩占一部分。期末以树、图、查找内容为主,成绩占35-40%。当学生有能力时,算法设计应占20%左右。目前情况,以教学的变式内容为考题。

4.离散数学

离散数学不能代表数学的全部,而且每周3课时,完全学不了离散数学的全部内容。离散数学是独立的一门学科,有自己的体系、特征,不可能是用一点,学一点。目前只能抓住一些重点,并在课堂中落实,在程序设计中紧密联系。

程序设计中用到的数学思想和知识较多,应该在平时就加以渗透。

离散为数学的考试应以过程化的考试为主。也就是尽量不出选择之类的问题。

5.编程开放周

编程开放周设立以来,对我们院学生起了很大的作用。其做法是以应用的方式对多门课程进行综合,这样让中下的学生有一个回头弥补的机会,好生有个更高的目标。由于学生中巨大的差异,编程开放周应安排两种级别的活动,一是针对所有学生的基本编程;二是针对好生的竞赛。

6.再说考试

没有规范的考试就没有成功的教学。但我们的考试还是属于合格式的考试,只要学生掌握教学的要求,就要给予合格,因此我们可以通过预考,引导学生掌握应该掌握的部分。学习重在平时,因此考试可以分阶段、分层次。让想学的学生能学得下去。但是我们尝试的补考方式并不理想,补考只能是对想学的学生有用,对不想学的学生是增加了不学的理由。

一些设想

1ACM培训方面

2009年我院开展ACM活动以来,已经培养了许多批的优秀学生,这些学生的作用以及ACM竞赛产生的精神支柱,大家都能感觉到;他们已经改写了我们程序设计教学的过去。然而,我们对这种培训已经越来越不可能了,一是课堂教学的不足,学生课后要学习的内容较多,深度较大,用义务和少量的时间培训的层次不够;二是其他学校越来越重视,开设ACM课程、办假期培训班、举办多种竞赛等,我们学生与他人的差距在增大,短期的培训已经难以与他人相比。

无论是为了树立良好学风,还是要有学生参赛或做项目都必须要有好的学生支撑。以算法为核心,以数学为基础对于我们院目前是不能全面做到。要培养这样的学生应该要用正常的课程,比如设成选修课,让部分学生选修。

2.课程之间要建立互相联系的关系,如同南京大学的陈道蓄那样,把几门课上成一门课。目前多种因素,我们只能局部尝试。

3.新生入门问题

为了解决新生无计算机基础,建议将计算机实践课分解、前移。也就是新生上课的前2天连续训练。这样学生至少不会出现找不到VC、在键盘上找不到字母、或者是一直用单个手指头按键的情况。

4.对学生能力培养的设想

我们这几年对编程设计的要求逐年提高,但还不够,可以利用编程开放周提升,在课后应对学生提出较高要求,试题上要增加思考的成份。

 四、团队建设

我们的团队力量在逐年增强,目前的排课原则是以自愿申报为基础。一个循环要求完成:C语言程序设计、数据结构、面向对象、离散数学(暂定,不合理因素较多)。基本上两年一个循环。团队建设的要点是:

首先是教师的师德与专业的素质的建设。教育的成绩一定是由素质高的人进行高投入才能产生的。

其次是要有合理的评价。课堂教学的评价应以学生学到了什么、是否在学,而不是老师教了什么;工作量的评估上,每周9课时的工作量较多,只能是由熟练的教师完成常规常规部分任务;教师的投入与教学成绩的评价上,目前主要依靠个人的良心。

再次每位教师要有一定的经验积累,比如要想将离散数学与程序设计柔和,就先要有过这些内容的教学经历。教师自身要做到以算法为核心,以数学为基础。