与老师的沟通

我也是一名高校教师,常期从事“C/C++程序设计”这门课的教学,每年都低着脑袋认真地按既定的结构规律去进行这门课程的教学,但偶然地抬起头反思,觉得很多习惯了的方法不一定就是完美无缺的,所以个人觉得当教学中遇到了困难,放下来,认真地进行教学反思是很有必要的。下面,我将我的一些反思与同仁们交流,先谈总体思路,再逐步介绍“学思行”三步曲如何有效开展。

一.总体思路

1教学目标的重新审查

任何一门有效地课程教学,都应该让学生在知识与能力、过程和方法、态度与情感三个方面得到相应的锻炼。作为计算机类相关专业的最核心一门语言课“C/C++程序设计”应该做到:

知识与能力:通过理论和实践教学,使学生较好地掌握结构化编程的基础知识,能够用所学的知识解决简单的实际问题(考虑到课时安排和学生的实际);培养学生面向过程的编程的思想和编程的能力,初步培养用面向对象的思想去分析问题和解决问题的能力(考虑到课时安排和学生的实际),初步培养用系统思想规范设计和模型建构的能力(考虑到课时安排和学生的实际)

过程和方法:通过不同形式的训练过程,如上机、笔记、交流、答辩等逐步培养学生掌握编程的方法和自我学习的方法。

态度与情感:培养良好的学习习惯和学习兴趣;养成良好的的规范编程的习惯,掌握调试的技术调试,养成通过调试来解决问题的习惯,养成合作编程的习惯;培养做事认真细致的态度和勇于探索、独立思考的精神。

这些目标并非是空泛之谈,它确实是我们要努力实现的,同时这些目标的部分实现会有一种催化作用,它会更加有效地帮助你达到目标,比如说:合作编程方法的培养和习惯的养成,哪怕还没有完全形成,都会强力地吸引学生相互合作完成一个看起来不可能实现的任务。

 

2教学重点的确定

1)重点

一般都认为这门课程的教学重点是“指针”概念及其用法,但如果从培养目标重新审视,我们发现这门课的最重的重点就不是那么一个重要的概念和用法(或者这可以算作知识层面上的一个重点),而是这门课程要带给我们什么,它要带给我们最重要的东西,这个最重要的东西就是我们的重点。

当然很多人都会这样认为,这门课程不仅是学会编程,学习完这门课的最大成功就是能够编写出简洁高效,算法优越的代码,这种观点也是有问题的。追求算法优越的代码当然没有错,这是编程者追求的完美阶段,但放在这门计算机语言课程的教学中作为重点就是有问题的,它忽视了一个最大的问题:人的思想、认识的提高是需要时间的,人的思维能力的进步是有过程的,人的解决问题的能力是要不断训练提高的,人头脑中智能网络的形成是有阶段性,脱离这个最真实的背景而谈完美,这不是唯物主义的做法。

有这种观点的人其实并没有掌握这门课程的本质特点,其实也就没有相应的方法、措施去真正地教学会学生编程,也就没有了突破口,认为只要教授相应的知识点并辅助于相应的练习就能够达到或者基本达到教学目标,至于学生学的好坏只能是学生的潜质问题了。

这门课程不是让你掌握多少的精妙的技巧编写优美的程序,而是让你能够编写出程序,能够编写出规范的程序,不是求巧,是求实、求拙。

编程思想和规范化编程能力及调试能力,是这门课程里要掌握的最核心的因子,这就是重点。结构化编程思想、面向过程的编程思想是我们做事的一个准则,这门课程里就是要将这种思想揭示出来,让我们做事编程井井有条而不是乱成一团。

2)突破口

这门课程的本质就是智能技能的训练课,既然是技能,教学的重点的突破口就是规则和训练,这个规则就是将客观世界的问题域转成算法,进而转化成语句代码的方法步骤。学会编程的突破口就是学习规则并不断地演练规则,反复凝练解决问题的一般方法,从而转化为智力技能并内化为能力。

 

3结构与解构

       我始终认为结构最重要,一个好的结构可以让一个系统完美地运行下去,如果没有好的结构和运行模式,即使消耗了大量各种资源,也是浪费。那么,“C/C++”这门课程也存在这样一个结构,这个结构要综合权衡各知识点的位置、顺序,先讲什么,后讲什么,根据是什么,如何协调合作,如何反应这门课程的实质。

要找到这个结构,我以为要体现五个方面的特征:一,要有明确的哲学指导思想;二,要明确知识体系的核心;三,保证理论与实践的统一;四,必须兼顾到学生的特点;五,必须建立合理清晰编程规则。

1)要有明确的哲学指导思想

       这种哲学思想当然是辩证唯物主义的指导思想,辩证唯物主义认为世界上一切事物都是相互联系和相互制约的,所有的事物都是内因和外因相互作用的产物,不能只看到内因,不看到外因,不要一切绝对化。

这些思想对于我们认识教学内容,规划教学结构有巨大的指导意义。比如说,从相互联系和相互制约的观点来看,“数组”和“指针变量”这两个概念并没有绝对的不同,都是代表了内存空间的地址,都可以代表一段空间,只不过一个可以变化,另一个是固定的而已,所以教学中并不能够刻意将它们区分,甚至是截然分开,事实上,通过对比的方式给出这两个概念不仅不会混淆思维,反而有助于认清事物的本来面目。再比如说:数据和数据的存放位置,一个看成内因一个看成是外因,内因和外因结合在一起才是一个整体,所以将“指针”放在教材中离“基本数据类型”那么遥远显示违背了辩证唯物主义的思想。

2)要有明确知识体系的核心

这门课程的核心价值就在编程思想(无论是面向过程还是面向对象),面向过程的编程思想的具体体现就是函数。函数的思想是最应该掌握的思想,同时也应该是能够顺理成章接受的内容(这跟中学的函数思想并没有太大的改变),但教学中却也是我们屡屡失败的地方。函数是我们程序框架的基石,应该从教学开始就逐步引入,在教学中反复强调。

如果不明确这个核心,是主观上认为这个部分的内容难,不能讲,有了一定的语言基础、编程基础后,留在最后再讲,可不知道我们从头到尾又都在用这个半遮半隐的函数,从一开始就对程序编写的框架不清楚,一味地深入到细节,实际效果并没有达到“水到渠成”却落下个“只在此山中,云深不知处”的结局,极大的伤害了学生的学习热情,学生的学习变得很无力,也很无助。

3)保证理论与实践的统一

       在教学中理论与实践的统一是必须做到的,在你的教学内容设计上就要遵循这个原则,如果不是为了使用,可能这门语言根本就没有产生的必要,从实践中来当然也要到实践中去,这是一条永远不变的真理。所以,教学中不要为讲概念而讲概念,讲述每一个概念的时候要旗帜鲜明地提出一个“阳谋”,为了这个“阳谋”去使用这个概念,为了这个“阳谋”在规则中体现这个概念。

如何做到统一呢?第一点就是部分的案例来源于解决实际的问题,比如说,我们去处理一下图片,图片的颜色就变了,比如说给你一段声音数据,你简单地倒序一下就可以将声音反过来,这是直接能够感知到的,学生的印象能够不深刻吗?第二点,作为教材的解决实际问题案例要有系统性,让学生感知随着知识的积累解决实际问题的能力不断地加强。

4)必须兼顾到学生的特点

兼顾学生的特点要从以下几个方面来认识:第一,兼顾中国学生的意识形态;第二,兼顾学生(人类)的共同认知特点;第三,兼顾不同学生的实际情况

①兼顾中国学生的意识特点

其实就是关注中国人的认知特点。中国人的文化符号是水,中国的文字、书法、绘画、经义讲究的是润,比如说中国国画是山水画,沾上墨在宣纸上点撒宣连,墨自动连成一体构成非常奇妙的意境, 在绘画书法之前心中早已有了意象,而这些意象来源于悟(先悟理,可能从本质上中国人是最讲理的国家)。中国人喜欢悟,中国的教育崇尚启(孔子的不愤不启,不悱不发),这些是非常有益的思维。而西方人喜欢实验,崇尚探索探险,从实践中得出真理。这两种思维不能说哪种思维更好,或者说特定的阶段某种思维更加适用(从工业社会发展到现代社会,显示光是悟是解决不了大问题的,但从现代社会发展到文明社会就可能会更好地体现出中国人思维的优势),但我想,还是应该遵循本民族的特质,否则会不伦不类。

计算机语言学科是西方人创建的,但我们研究他们的教材结构大多是以应用案例来表达某种语法的用处,教材大都没有严格的知识体系,或许老外本来就觉得语言课不应该还有知识体系这一说,但到了中国,中国的专家就必须要创造一种根据知识的难度、重点而建立的课程教材体系,这一点确实是中国特色,但这种特色必不可少,非常重要,因为这是中国人固有的思维方式。也就是说我们设计的课程结构体系不能回避中国人的特点而盲目地追寻西方人的足迹,所以我们的教材在编写结构上采用了知识点章节划分结构,而绝对不能以案例来划分。

需要注意的是,我们对章节知识点的划分上是遵循学生的共同认知规律,遵循应用系统的发展完善规律,而不是依照专家所设定的难度顺序来定义的,更不是呈现一个知识点之后,然后再出示这种知识点是如何应用的,我们希望打破一直以来,我们的教材中的范例只是语法、句法的复现和载体这样一个惯例,体现出更科学地知识呈现结构,这或许就是我们确定教材内容结构的重要根据。

②兼顾学生的共同认知特点

根据认知心理学的观点,人的知识包括陈述性知识和程序性知识,陈述性知识是回答“是什么”的知识,陈述性知识是回答“怎么办”的知识,陈述性知识主要以例题网络的形式表征,而程序性知识以产生式系统表征。

记取陈述性知识,并力促陈述性知识向程序性知识转化是我们教学的核心。一般来说学习的过程包括三个阶段:新知识的习得阶段、知识的巩固和转化阶段、知识的迁移和应用阶段。这三个阶段都有一些专门的策略来引导(在后面的教学方法和策略里,我们还要讲到,这里要讲的是在我们的教材结构中如何体现出教学策略),而尤其重要的是第二个阶段向第三个阶段的转化,我们采用的方法是通过变式练习,精心地设计不同类型的题目,促进知识的迁移和运用。根据这个特点,我们的教材结构中应该在每个教学内容之后设计这种变式练习。

③兼顾学生的实际情况

事实上,不同学生的情况是不同的,倒并不是某位同学比其他同学聪明多少,而是思维方向、兴趣爱好或者其他情况决定了学习的进程,有的学生遇到困难多些,有的学生遇到困难少些。但不可否认的是每个同学都会遇到困难。我们希望出现的困难不致于让学生产生“学习无力感”,如果常时间出现了这种不良感觉,那么这门课程的学习对于学生来说就会比登天还难。

要消除这种隐患,至少要做到两点:首先,教学内容就不能够过难,让绝大多数同学跳一跳摘得桃子;其次,而出现的思维上的障碍之后,就必须有解决困难的措施,当然,也不能够出现一点小的困难就轻松地找到答案。

确保教学内容不难,学生容易接收,无认从教材的角度还是具体教学的角度来看,都要精心筹划。本教材内容确实不少,涵盖面较广,有些问题进行了较为深入的探讨,进行了扩展,这些部分都已经做了*号标记,可不作为教学内容,而只做为学生自己兴趣钻研的依据。在教学备课的时候,应保证非*号部分的精心准备,点拨一些扩展知识,尽量精化内容,要让大多数的学习都能够顺利掌握,而自然一部分学生就会有“学习饥饿感”,这种感觉会转化为研究的动力。需要说明的是,本教材中*号部分不讲,并不会影响教学的核心,只是见识认知的范围缩小。让不同学生得到不同的发展就是因材施教。

学习中遇到了困难,怎么办?要从教学模式和教学方式上考虑,配合本教材的“学思行”教学模式中的“思维训练课”就是解惑的时机,要抽出专门的时间来解决困难,另外,在“实验课”中也有专门的时间对个人进行辅导。

5)必须建立合理清晰编程规则

       前面分析过,教学重点的突破口就是保证有一个合理清楚的编程规则结构,编程规则的制订要符合思想(面向过程或者面向对象),同时要有明确的步骤,一定要可操作性

       对于面向过程的程序设计最重要的就是模型和模块的设计,模块是具体的解决单元,模型是指这个解决单元在整个系统中的位置,模块与模型其实是相互融合的,模块的设计中要考虑环境,而模型的设计其实就是模块的有机组合。模块对整个系统来说是小世界,但对于其下的内容又是一个大世界,所以真正会设计一个模块,就会设计一个系统。

这样看来,如果确定了模块的设计规则和模型的设计规则,通过引申、变式等手段来训练、巩固、转化成技能,进而培养出计算机程序编程能力是水道渠成了。在本教材中,我们给出模块、模型的规则如下:

①明确问题域及输入、输出:模块设计的依据是问题域,也就是模块功能,而模块设计的形式取决于问题域,这一点不难理解,虽然知道这一点,但表达出来还是需要训练的,这要求对事物关键的洞察能力和文字组织能力和提炼能力,在教材中设计一个模块时我们给出了模块图的画法要求,就是从规则上体现,从整体考虑。

②明确模块的归属关系:根据模块的功能放置模块于整体的环境中。

③明确模块的解决思路:具体地实现这个模块,这在规则设计时是一个难点。许多人不会编程,即使对程序语言已经熟悉也不会编程(当然语言都不熟悉肯定是无法编程的),关键因素在于没有解决思路,这个解决思路与选择什么计算机语言来编程根本就是两码事情,这一步是不考虑具体的计算机语言的,这是一种逻辑判断能力与计算能力的等能力的综合应用,这虽然不是一朝一夕能够解决的,但确实也是可以培养的。更关键的是要清楚,规则设计的时候,解决思路一定要清晰了呈现出来,为了体现这种思路,简单的问题可以直接写出方案,较复杂的问题可以主动地提供假设数据,手动演算直到问题解决。

④明确模块的算法步骤:这一步其实也不涉及到具体的语言。而是将第三步的解决过程进行梳理,总结成可顺序执行的步骤,以便于转化成具体的语言代码。在具体表达这些步骤的时候,即可以用自然语言来表达,也可以用流程图表达,也可用伪代码表达,只要能够表达清楚步骤,便于向语言转化即可。

以上的四步规则就是:模块功能和结构、模块归属、解决思路、算法步骤。在教材里大多数例子里都已经得到体现,这是要让学生充分掌握并不断训练的规则(不管是思维训练还是实验),训练的次数越多,越标准,那么每步之间间隙就会越来越小,以致于最后达到自动化程度,真正地掌握模块模型设计,真正地学会编程。

 

除此之外,还有一些具体知识点使用过程中的规则,比如说指针作为函数参数的使用规则就是:传地址、类型匹配、使用指针运算符三步曲(抛绣球、门当户对、芝麻开门)等。

      

4教法研究

首先要明确教学方法不是唯一的,而所有的教学方法都应当坚持启发性,针对不同的课程的特点,甚至是不同的内容、不同的学生的教学方法是不同的。

另外,教学方法一定要与课程的特点相适应,“C/C++程序设计”这门语言课程,教学的内容大多都是概念、语法、规则。概念和规则属于陈述性知识,如果能够利用概念对事物分类,利用规则解决问题,则表明概念和规则已经转化为程序性的知识。可以说概念和规则的教学是语言课程教学的一个核心,这门课程其实质是一门智能技能课,而非一门高深玄奥的理论课。比如说:指针作为函数参数就是一套规则,比如说面向过程的程序设计思想也是一套规则,这些规则里包括的众多的概念。

在教学过程中,我们先后在不同的环境里使用了多种教学方法。

1)基于认知理论的讲授教学法

这是我们本门课使用最多的教学方法,每个“理论教学课”我们都使用,其最大特点可以发挥教师的主导作用,教师可以由易到难、由浅入深地传递消息,利于学生接受,易于教师控制所传递的内容,单位时间的效率最高。这种方法有优势,同时也存在着不足局限,强调了知识的结论性,但削弱了技能的教学,勾通方式单调,教学如果准备的不好,气氛沉闷,也不利于学生的主动能动性。

这种教法的理论基础是:奥苏伯尔的认知理论。这种教学理论首先强调激活学生认知结构中原有的与新的学习相关的知识,紧接着呈现要学习的上位概念或者原理,使之起组织作用,然后再呈现下位例证。这种理论认为人的认识过程往往是先认识事物的一般属性,然后逐步认识其具体细节,强调学生认知结构中的新旧知识相互作用,以达到认知结构不断分化和融会贯通的目的。

比如说:字符的上位是整数,指针可以看成是变量(数据)的下位。

2)基于认知理论的发现教学法

发现法讲究的是通过情境的创设,让学生自己发现问题并解决问题,这当然非常有利于学生能力的提高,环境的创设在发现中尤其重要,所以我们在教学中使用的是“引导发现法”。

这种教法的理论基础是:布鲁纳的发现法。通过这种方法可以有效地培养学生的操作技能、观察技能、想像技能以及符号运演技能。

比如说:我们在做部分案例教学的时候(指针数组来完成图书馆书籍的存贮),我们就可以提供相应的环境,让同学们自己发现应该可以有那么一种数据类型,而事实上确实如此,学生的发现得到了验证,学习的兴趣会空前高涨。

3)基于情感主义的研讨式教学方式

这是一种非常强调个人参与的教学方法,每个人(包括情感和认知)都积极地投入到学习活动之中,学生是发起活动者,同时也是自我评价人。

这种教法的理论基础是罗杰斯的情感主义教学理论,这种理论认为,应该探讨完整的人,而不是将人分割成行为、认知等从属方面,一个人的大多数行为都是他对自己看法的结果,真正的学习涉及到个人,真正的学习经验能够让学习者发现他独特的品质,从这个意义上讲,学习即“成为”,教学即“促进”。

如,我们在教学的第二个环节安排的“思维训练课”就是让学生自由地到讲台上来演讲,自己给自己做一个客观的评价。在这种活动中,他自己最清楚自己想要表达什么,自己想知道什么,因此他也会去做充分的准备。

 

5学法指导

1)鼓励学生自主探索和合作交流。引导学生自主地从事观察、分析、交流等活动,培养学生自主学习的能力、合作的能力、交流的能力等。

2)鼓励与提倡解决问题的多样性,引导学生在与他人的交流中去选择合适的策略,丰富自己的思维方式,获得成功的体验和不同的发展。培养学生的逻辑推理能力和发散思维能力。

3)督促学生用三色笔记笔记,强调记录心得的重要性,培养学生良好的学习习惯和掌握有效的学习策略。

4)从教材的结构和教学的顺序强调系统的重要性,培养学生系统思考问题的能力和方法。

5)强调实践、实验,上机报告的规范性,培养学生动手能力和方案撰写能力。

以上学法的指导所遵循的理论主要是认知心理学的理论,最终的目的就是为了陈述性知识顺利进入记忆命题网络,顺利得到产生式系统,以及能够利用产生式系统解决现实实际问题,从而实现知识的迁移和应用,只有这样的学习才是真正学生想要的学习,也才是真正有效的学习。

 

       下面详细谈一谈,在良好的结构之下,“学思行”如何有效地展开。

二.如何上好理论教学课

1把握函数主线,注重规范规则

1.1每章里渗透函数教学

在教材中函数通常用“模块”这个词来表示,函数从第一章开始出现,函数并不是一个难以理解的概念,在教材第一章就要让学生掌握模块结构图,从结构图上可以清楚的显示模块只不过是一个黑匣子,将一些数据给这个黑匣子,再从这个黑匣子导出一些数据。以后的各章只不过传进来的数据格式和导出的数据格式更加丰富而已。

第一章“模型模块设计”中引入模块结构,认识模块内部的解决步骤。

第二章“程序调试”中就需要通过单步调试进入模块内部,让学生看清楚模块之间的调用关系。

第三章“基本的数据类型”对函数的格式进行完整地认识,不断强化模块其实就是问题域的解决方案,对不同的模块进行了举例,并进一步加深对不同模块之间的数据传递的认识。

第四章“指针数据类型”里,将地址作为模块传入的参数。

第五章“结构编程之选择”除了介绍选择的不同结构和特点及应用之外,继续加深对模块的应用,比如说:将菜单做成一个模块,根据三角形三边求面积,这些题目都不难,但不断地重复加深对模块的认识。

第六章“结构编程之循环”除了介绍循环的特点和运用之外,依然通过不同的问题重复模块的运用。

第七章“数组”里将一般数组的两个指标作为模块的入口参数。

第八章“字符串”将字符串的头地址作为模块的入口参数,并介绍了能够返回地址的模块。

第九章“结构体”将结构体和结构体数组作为模块的入口参数和出口参数,并介绍了标准库里提供的字符串处理模块。

第十章“文件”里除了可将文件指针作为模块的参数之外,还介绍了编程中可利用的外部模块资源,静态模块和动态模块的一些区别。

这里要注意一点,在前十章的教学中,我们使用的基本上都是面向过程的编程思路,但在介绍每一个模块的时候,我们都进行了归属,就模块应当归属于哪一个文件,这为从面向过程到面向对象提供了非常自然的过渡。

第十一章之后的连续三章,初步探讨了面向对象的设计模式,在这里,我们将模块自然归属于类,并引入UML建模思想。

1.2函数编写的规范要求

       函数(即模块)在编写的时候,强调规范,一个是命名规范和归属规范。即每定义一个模块都要按一定标准的动词英文来定义,以及每一个模块都要强调其归属于哪一类文件,以便于代码复用,在第一章里出现的模块组织方案就是为了维护这种归属,以清楚地看清楚模块之间的关系和相互调用关系;另外,从第一章开始就需要掌握解决问题的一般步骤:分析功能要求、输入输出、解题思路、算法步骤,这个一般步骤恰好也就是实现一个模块(函数)的步骤。在每一章里,都要将模块的规范编写放在最重要的位置,要让学生写代码之前就自觉地画出模块结构图。

 

2重视调试

       调试一般认为是可有可无的,但这里要说的是:调试极其重要,可以说关系到学生的自我学习能力,一个程序开始看不清楚完全正常,事实上,有很多的程序代码教师并没有时间一一讲解,还有一些代码是从别人那里拷贝来的,但如果不能通过调试之后搞明白,就不能够有效地吸收别人的经验,就说明调试部分的学习不到位,有待于加强。

       重视调试,需要告之学生一些调试的经验和技巧,并让他们产生依赖于调试器而不依赖于求教教师,依赖于自己对错误代码的翻译和分析,而不依赖于教师。

 

3有所取舍,基础与提高并行

       我认为将一门程序设计语言所有的内容在课堂中讲述并且讲清楚是不可能的,同时也是没有必要的,这门课程学习的好坏关键在于教师提供一个良好的学习结构,剩下地就是学生自己发挥自己的主动性了。教材内容很多,各位教师根据具体课时情况进行教学,不要贪多,教材中部分内容作为扩展视野选学的,教材中用***号来代表选学的难度和消耗的时间。

       有一个宗旨,就是需要全体同学都掌握的基础知识,就必须讲清楚,这些是思维训练课和实验课的基础,有些扩展的部分有时间允许的情况下,教师可适当点拨,让在编程方面有能力的同学可以有继续钻研的方向。

 

4重视思维训练和重视上机训练

       下面分别介绍

 

三.如何上好思维训练课

1两个核心因素

思维训练课是教学过程中极其重要的一环,有两个核心因素需要把握住:一个是惑,一个是解惑,两者缺一不可。就是说上课前学生如何没有惑,这堂的基础就没有,课堂教学中如果不能够解决学生的困惑,那这种思维训练课的目的就没有达到。教师要清清楚楚地告诉学生,不带惑,不带着自己解决问题的思路(哪怕是有错误的思路)来上课将无益于自己能力的提升。

1.1产生“惑”

如何让学生产生“惑”?就是给以恰当地要求,要求学生在上一节课之前必须有一些准备,这些准备包括:思考、做题、画图等,其实也就是一定量的题目要求学生课前完成,没有一定量的作业和训练,学生就不可能完成知识的掌握和知识的转化。从我们的经验来看,这些准备分两个层次,基本要求和提高要求。基本要求是必须完成的,而提高要求是对于非常有兴趣、有能力的同学去达到的。

必须完成的任务就必须完成,这是教学的基本要求,基本要求要配合有检查机制和处理机制,这点不能以任何理由妥协。在教材的思维训练课里我们提供了很多类型的题目,包括简答题、选择题、判断题、同型编程题、变式编程题、提高编程题、综合题。

一般情况下,学生课前个人必须完成的作业要从简答题到同型编程题。当然不能一概而论,要具体情况具体分析,如果学生基础不好,教学进度没有达到,或者其他一些情况的出现,要及时地调整任务要求,因此,教师在上思维训练课之前要根据情况有一个明确地作业要求。总体一个原则是不能让学生感觉到“学习无力感”,负担过轻起不到作用,但负担过重,学生根本完成不了任务,会逐步地产生无力感,甚至弃学,这个后果更加可怕,我以为这个任务的完成在2-3个小时左右为宜。

学生作业的检查可以集体交作业或者随机抽查的形式展开,并记入平时成绩,达不到要求者不能够参与其余的考核,这个要求看起来严,但有必要,没有要求、没有监控、没有执行力的教学即使看起来温情脉脉,也是虚假不负责的教学。当然,执行制度的时候在策略上也要注意细致,如果学生没有完成任务,要认真地帮助学生分析完成不了的原因,让学生心悦诚服地意识到问题所在,并努力改进,这点非常重要。

 

1.2如何解惑

解惑的关键就是学生能够积极地参与有效地智力活动。形式可以多种多样,要根据具体情况去决定,有些问题是以教师为主,学生参与;有些问题是学生为主,教师适当点拨;有些问题是以学生为主,教师评价等等。具体可以分以下几个阶段:

1)开头可以用提问的方式,让学生个别回答思维训练中的简答题,由教师统一订正和解释,这不仅活跃了课堂气氛,同时也在双向交流中教师也解决了学生认识上的一些困惑,同时也为尽可能地腾出时间来让学生答辩提供了宝贵机会。

2)随后可以由教师带领下解决学生课前的一些作业问题,也就是从选择题、判断题到同型的编程题,讲解要点是从中间或地挑选代表性的题目,分析其原理,给出明确的答案。

3)再之后的时间,由学生组唱主角,进行小组的陈述与答辩。

4)最后,对部分的提高题与综合题和学生进行共同的探讨,这个阶段,由教师设置问题或者由学生提出问题,共同分析给出方向和思路。

       这四个阶段的解惑,每个阶段的时间并不是固定的,但结构可以固定下来。具体教学的时候,可根据需要进行调整,比如说提问的时间,作业的订正时间与题目选择,学生答辩组数等可以随时调整,再比如说,时间宽裕就多提问一些,时间不足就少点提问。

就学生在解惑过程中的表现,给学生记入成绩作为答辩成绩中的一部分,这种计分采取鼓励性记分,答不出来的,可以启发,鼓励下次作更好的准备发言。

 

总之,思维训练课的形式可以多样化,但必须要有一个让学生经过动脑思考的学习过程,也必须要有一个教师纠正学生错误,肯定其成绩的过程,这样才能不断地提高学生的学习积极性,也才能使学习过程真实落实到实处。

 

2小组答辩

2.1答辩依据

知识只有经过同学们的头脑并经过加工才能够稳定下来,而让学生经过合作思索准备并用语言表达出来是实现知识同构的非常好的手段。答辩的形式非常好,历届学生的反馈意见里都提到了这种合作学习的方式能够更加有效促进问题的解决和凝聚团队精神,甚至不少同学是期待这种每周一次的答辩机会。

 

2.2答辩原则

答辩教学的原则有六点

1)涉及面要大

要求涉及学生面大,要尽可能地让更多的学生参与进来,从而进行主动的智力活动。

2)遵循规范

       这个规范指的就是模块设计的基本步骤,即模块功能、输入输出、解决思路、算法步骤、程序代码这五个方面,其实学习编程就是学习规则,而规则只有不断地训练和强化,才能进入到学生的知识命题网络,从而逐步转化成智力技能。

3)强调分析

       强调每一个模块的解决思路。对于较简单问题使用5步规范解决,强调问题情境和解决根据;对于较复杂问题,必须用面向过程的程序设计思想,分步设计各模块。

4)顺应思维过程:先模块,后模型

       模块是解决问题的基本单位,而模型是将模块进行归属分类。答辩过程宜先从主模块main开始,逐步分解后,再进行自定义模块的分析,最后使用模型图总结。这样的答辩思维过程充分体现模块的规范设计。

       注意,完整地进行所有模块分析和模型设计需要花费较多时间,有限的答辩教学时间内效果可能不理想,所以答辩训练的初期阶段应以单独核心模块的分析为主。另外,初期的教学案例和思维训练题的演示讲解也要按照先模块后模型的顺序进行。

5)答辩流程清晰,答辩时间相对固定,灵活调整

答辩流程清晰,学生要知道如何答辩,除了要求学生们充分理解答辩规则和要求之外,要求教师的教学过程给学生的答辩作出示范(前面二章的答辩要求教师参与其中,给出答辩过程的正确解题过程)。同时,要求答辩时间相对固定,转场要快,有后备时间作灵活调整。

6)实事求是,循序渐进

       教学初始阶段,学生接收缓慢,宜降低答辩难度,待自主学习习惯和能力得到发展后逐步增加难度。降低难度的方法包括:可安排较少的答辩题(前几章一般3题左右),集中注意力,不同组可答辩相同问题;预先填写答辩表(理论课后),让学生选择好答辩题目,做好充分准备,此方法也是督促学生组在一个大单元里完成至少一次答辩,有效维护教学进度。

2.3答辩设计

1)怎样将答辩的面设计的最大?

       每个人代表自己进行答辩,时间不允许,且效果也不一定最好,同时会伤害遇到问题的交流的愿望和热情。如果将个人与小组利益紧密相关,在目标驱动机制下组内成员充分交流,不仅可发挥个人主动学习精神,还能够有效解决课内时间有限问题。

因此总体答辩形式设计:分组答辩,统一计分。答辩就是以学习小组为单位,共同针对一个题目进行各方面的分析和设计,最终给出正确代码,答辩要求小组代表上讲台陈述,根据陈述确定其等级分。

2)如何确定答辩时间?

根据本课程采用的“学思行”三位一体的教学模式(每周进行一轮学思行教学),教学环节的第二个“思”阶段中进行答辩训练,这个阶段的教学设计是:第1节课对课内知识补充与自测练习题的质疑、分析、提问等,第2节课进行本章的答辩训练。按规范4步进行模块设计,经过学生课前的准备交流后,一个模块的表述时间应该在6分钟左右,留2分时间提问和总结,所以一个组的答辩时间为8分左右。一节课时间可安排5组答辩。

3)如何确定答辩分组?

本课程设计的教材将教学内容分为四个部分:模型模块、结构编程、构造类型、面向对象。每一个部分(大单元)大致包括3章左右的教学内容,所以每个大单元需要安排15组学生答辩。以两个标准班合班教学为例,共学生90人,则每组人数6(90/15),如果是单班教学则可划分每组3人。

3周进行了一轮所有组的答辩,根据具体的课时要求决定答辩的轮数,如教学课时12周(每周3次课完成一个循环),理论上可进行4轮答辩,实际教学可进行3轮答辩,余小的教学时间可用于机动和补齐。

4)答辩内容的设计

答辩题在思维训练手册的答辩部分指定,一般都是针对教材例题简单的发挥、或需从另外角度考虑解决的变式题,这些题目即能够体现对编程思路、规则的训练,同时又是对新授知识的总结和应用。

另外,根据循序渐近原则,前几轮答辩题目可由学生自选(事前填写答辩表),可起到降低难度和集中小组注意力,后几轮答辩随机抽取,可全面培养学生对所有问题的关注。

5)答辩形式

       PPT分析演讲形式或板书分析演讲形式。

6)答辩分工安排

       如果小组是3人,一人负责模块分析,一人负责撰写模块代码,一人负责回答提问。如果小组成员较多,可将多出同学分配为:画模型图、写主模块测试代码、回答提问。

2.4答辩流程

1模块设计

1)模块功能

2)输入输出

绘制模块图并就输入输出进行说明

给出模块格式

分析模块归属

3)解决思路

介绍原理或举例说明如何解决这样的一个实际问题。

4)算法步骤

       伪算法或流程图

5)模块代码

       给出模块的准确代码

2模型设计

模型图

3师生提问

说明:

1)分式安排,各负其责。

2)答辩顺序,先模块后模型。模块题直接从单独模块分析(无需模型图),程序题从main模块分析(需要模型图)。

3)根据具体情况灵活调整,对于组人数较多情况,即使是模块题,也需要给出模型图和main模块测试代码。

 

5答辩评分

教师与非答辩组组长参加答辩同学的评分,采用5A制,从5个方面进行评价,给出优、良、中、及、待定五个等级。这5个评价标准是:

1)按答辩要求准备,步骤完整,不少项

2)描述清楚,算法、代码正确

3)准确回答提问

4)举止大方,声音响亮

5)配合默契,相互支持

如果答辩没有通过,则小组所有同学成绩记为待定,每组有一次补及机会,补过的答辩题目是教师指定教材中所有可以答辩的题目或者由学生自行准备教材外素材。

 

四.如何上好实验课

1注重报告的规范性和实用性

很多人认为只要做出实验就行了,写报告就只是一个形式,这种轻视文档编写的思想是不正确的。程序设计的基本思想是将问题域转化为程序结构,编写程序的思路是:先分析问题域,理清问题;再分解出数据类型;再分析出算法;最后再用语言来实现。这里面需要大量的文档的文档说明及格式要求,这些是培养良好编程习惯、提高编程能力必不可少的环节。拿到一个问题就直接开始讲授程序编写内容,看起来是直入主题,节约时间,实际上是不利于编程发展多人合作的趋势。

       报告的格式务必做到规范,教师可以按教学中编程思路去拟定报告格式,比如说按问题域分析、模块结构、解题思路、算法步骤、模块代码去拟定报告,另外实验之后一定要有实验总结,记录心得。对于实验原理、实验步骤等可以不作要求。

 

2 注重代码的复用

实验内容是从小到大,从易到难,每一次实验内容是以前面内容作为支撑,最后一次实验是一个完整的成绩管理系统,这样不仅可以做到代码的复用,而且可以让学生将注意力完全放在增长的知识上,让知识连成一个体系。

教材中配套的实验基本上就是一个内容,即“学生成绩管理系统”,不同的章节里这个实验体现不同的特性,比如说“数组”这章的实验是为这个系统增加学生的分数,而到了“字符串”这一章,增加的是学生的姓名列表等等,学生可以导入上次的代码,并在其中修改,节省了大量的时间。

 

3 注重对上机实验效果的监控

       三期检查:检查实验前的准备工作,严格要求上机前必须有预习报告;检查实验过程中的有效性,实验中用认真调试并用兰笔记录实验数据;检查实验后实验报告的完成情况,实验后用红笔总结心得,达不到要求者要严格按规定处理。

 

五.教学要求无比重要

1对学生的要求

对于初次接触语言课的同学来说,学习过程肯定是很困难的,而反复地训练更是痛苦的,保证课程教学的最后一个因素就是:教学要求。没有教学过程的要求,一切都是空谈,如果教学过程都把握不住,教学结果更是无法预料。教学过程的要求就是要保证你去思、去想、去做、去交流,而不是仅凭一句有什么事情耽搁了就可以轻松地回避,教学过程的要求并不规定你每次都必须想得对、做得对、交流得深刻,过程的把握会在最后的教学结果里体现出来。教学要求可能看起来有些残酷,但“心慈手软”绝对不会是一个智者,一个好教师。最大程度地消除解决问题的难度和给以最严历的处理,一张一弛,为要求之道。

       比如,思维训练课中的学生个人练习部分要求必须完成,必须有检查,有反馈和奖惩措施,如一次没有完成,或者发现抄袭,以不及格处理。思维训练课中的答辩必须事先做好准备,5分钟没有进入主题或者小组合作混乱,以不及格处理。上机报告,没有完成不许上机,扣除一次上机成绩,发现完全的抄袭,双方均以不及格处理。

2对教师的要求

       教师要求不仅针对学生,对教师也有要求,对教师的要求不仅是要认真备课,耐心输导,更重要的是教师要有一套将教学思想贯彻下去的具体可操作的稳定的教学流程,这套流程让学生看得见、摸得着、用得上,让学生在稳定的教学秩序下逐步成长。以下是我的教学流程供参考:

一理论教学

1教学流程

(1)       教学目标

(2)       教学内容

(3)       教学总结

(4)       提醒、答疑(必留5-10分钟)

a)         提醒教学内容与教材的不同之处

b)        提醒教材中自我学习内容

c)         提醒思维训练的内容调整

2教学形式

(1)       板书理论教学,以此教学形式为主

(2)       演示操作

(3)       演示PPT

(4)       提问交互

3板书格式

(1)       按教材的序号

(2)       小结总结用红字

(3)       提示、注意等用黄字

(4)       模块结构中标准步骤用兰字

二思维训练

1教学流程

(1)       训练手册中个人训练部分的交流和订正(40分钟)

(2)       训练手册中小组答辩部分的交流和订正(40分钟)

(3)       训练手册中提高阅读部分的交流和订正(5-10分钟)

2教学形式

(1)       提问订正

(2)       答辩订正

(3)       提示提醒

3板书格式

(1)       按思维训练手册中的编号,不能乱写

(2)       小结总结用红字

(3)       提示、注意等用黄字

(4)       模块结构中标准步骤用兰字

三上机实践

教学流程

(1)       检查实验报告与个别指点

(2)       集体辅导订正