程序教学法论文合集12篇

时间:2022-07-04 04:25:49

程序教学法论文

程序教学法论文篇1

选择性与实效性相结合。学校应根据学生的特点以及地域、气候、场馆设施等不同情况确定课程内容,课程内容应力求丰富多彩,为学生提供较大的选择空间。要注意课程内容对促进学生健康发展的实效性,并注意与中学体育课程内容的衔接。

科学性和可接受性相结合。教学内容应与学科发展相适应,反映本学科的新进展、新成果。要以人为本,遵循大学生的身心发展规律和兴趣爱好,既要考虑主动适应学生个性发展的需要,也要考虑主动适应社会发展的需要,为学生所用,便于学生课外自学、自练。

民族性与世界性相结合。弘扬我国民族传统体育,汲取世界优秀体育文化,体现时代性、发展性、民族性和中国特色。

2.教学方法要讲究个性化和多样化,提倡师生之间、学生与学生之间的多边互助活动,努力提高学生参与的积极性,最大限度地发挥学生的创造性。不仅要注重教法的研究,更要加强对学生学习方法和练习方法的指导,提高学生自学、自练的能力。

由以上规定可以看出,把现代新兴的教学方法运用到体育教学中来是非常必要的。所谓现代教学方法,国外认为,现代教学方法是与传统教学方法相对而言的。当今出现的现代教学法有程序教学法、发现教学法、掌握教学法、类比迁移法、情境诱导法、电化教学、问题教学法等等。现代教学方法一般都具有以下5个特点:(1)以发展学生的智能为出发点;(2)以调动学生学习的积极性和充分发挥教师主导作用相结合为基本特征;(3)注重对学生学习方法的研究;(4)重视学生的情绪生活;(5)对传统教学方法适当保留并加以改造。

现代教学法在排球教学中的应用可谓有很大的空间,例如,类比迁移法可用来进行扣球与跳发球的教学,两个动作具有很大的相似部分;情境诱导法可用来进行战术保护的教学,将排球比赛中可能出现的几种情况在教学过程中进行模拟训练,让学生明白应该如何进行保护;问题教学法可以作业的形式留给学生思考,不占用课堂时间。这些方法都具有其各自的优点,完全可以引入现代排球教学中来,本文仅以程序教学法为例进行相关阐述。

二、程序教学法的定义、具体形式和优点

程序教学法就是把教材按教学目的,根据学生的实际情况,将其内容划分成若干单元编成一定的程序,向学生传授,学生在每一个单元上作出应答,然后由教师、同学、自和进行评定,在掌握动作之后,再进行下一步学习。它的具体形式可表示为分支式、直线式和循环式三种。所谓分支式就是把教材的某个内容看成是一个主题干,然后把它分解为若干个题支,接着再将题支分解为若干个亚题支,依次分解,逐个解答。这种方法的优点是可以帮助学生直观的把握教材反映的理论观点,从而在思想上形成一个比较清晰的理论轮廓。直线式就是把材料的某个内容分成若干连续的步骤,后一步是对前一步的说明解释或提示。这种方法可以使问题简单化、明了化,若再配以简要的解释说明,学生易于理解和掌握。循环式就是从一个方向出发,经过一步步的分析、说明、最后又回到起始问题上来。

三、排球教学的一些特点

排球教学有其自身的特点就是能把某些技术分成小环节进行教学,根据排球比赛的规律性,我们可以进行适当的模拟特定情境,另外学生还要掌握基础的排球理论知识,等等。排球教学不同于一般理论知识的学习,它的教学任务就是要学习排球基本技术、战术,也要掌握排球的基础理论知识。这样就要求学生要从两个方向进行学习,一个是技能训练,另一个就是课本的知识框架。技术战术的训练主要是让学生掌握排球基本技术和战术,为学生将来工作打下扎实的基础,理论部分则可以让学生从掌握课本的知识框架来加深对所学技能所处的地位有所了解,另外也可以为学期末的考试进行有效的准备。这里我们引入一个学习方法,就是宏观概括法,即看课本时首先要看目录,把目录在头脑中形成一个框架,可以用大括号的形式,也可用其他的形式。把每一个分支的内容到课本中去学习好,以后复习时就可以只看目录就能掌握课本的所有知识结构,省时省力。这种方法与程序教学法中的分支式有同样的效果。

四、程序教学法在排球教学中的运用与分析

程序教学法的前两个分支可以分别运用于排球教学的技术战术教学与理论教学。这样就可以使两者相互支持,学好了理论知识,学生就能明白哪个技术比较重要,它的学习重点在哪里,自身缺少的东西是什么,使学生能够有针对性的进行学习。

首先,程序教学法中的分支式可以用于排球基本理论知识的学习,以现有排球教材为例。如果看着目录进行分支的话,我们最后可将一本教材做成一个树形图,哪个分支属于哪个部分一清二楚,对于学生全面掌握理论知识有很大的帮助。每个章节讲的是什么,哪些章节是重点章节,都能从这个树形图中看的出来,学生复习所用时间的比例就会相应增加。

其次,直线式可以用于技术的学习和掌握,因为排球有很多技术可以进行合理分解进行教学,这样就可以把这些动作进行小环节的学习,学生掌握了第一个环节之后,再进行第二个环节的学习,一步一步地前进。举例说明这个问题如下:在教授学生扣球动作时可以合理地将整个技术分成三步,第一步,助跑起跳;第二步,空中姿势和击球;第三步,落地缓冲;第四步,连贯动作。这样就可以使学生逐步掌握每个动作,最后在进行连贯动作的练习,能够起到很好的任用。

五、程序教学法运用时的注意事项

首先,在对某个动作分解时,要合理进行,一些不可分割的动作不能强行分割,使动作失去了连贯性后,学生却不易掌握。例如上手传球这个动作就不能进行分割。其次,要注意全班上课的整体,不能因为一个人的落后影响全班,那就要很好的发挥集体的力量,老师的课上帮助与同学们互帮互助同时进行,尽量让每一个同学都能够跟上步子,让全班同时进行每一个环节的学习。

六、结论与建议

1.把现代教学法引入排球教学是非常必要,而且势在必行。

2.程序教学法在排球课上的运用可以将其不同分支用于不同的学习,即:直线式用于技术战术的学习,分支式用于排球理论课的学习,二者互相依赖,不可分割。

3.学校排球教师可以尝试把不同的现代新兴教学方法引入排球教学,以促进现代排球教学的发展,改变因课时少内容多造成的学生学习难度太大的问题。

参考文献:

[1]教育部.教体艺[2002]13号.关于印发《全国普通高等学校体育课程教学指导纲要》的通知[C].2002.8.

[2]马英杰.普通高校体育课程改革的研究与实践[M].第十三届大学生运动会体育科学论文汇编,2004.7.

[3]王宗平,赵国梁.大学体育课程教学改革实践与走向[J].体育与科技,1999,20(2).

[4]中华人民共和国教育部.体育与健康课程标准[M].北京:北京师范大学出版社,2001.

[5]荆光辉.普通高校体育与健康教育课程体系的构建研究[J].北京体育大学学报,2002,(1):111-114.

程序教学法论文篇2

【论文摘要】 现阶段,我国从计划经济体制向市场经济体制过渡,教育领域也正在发生一场深刻变革。传统的观点认为,教育法律关系倾向于一种特别权力关系,其显著的特征就是它不应具有“可诉性”,即义务主体不应该对特别权利主体所做出的行为请求司法救济。随着市场经济体制的逐步确立,人们权利意识的高涨,保护公民的受教育权成了现代教育法的立法本位。社会转型表现在教育领域,就是受教育权由“特权”向“平权”的演变,“义务本位”向“权利本位”的演变。以高校为例,受市场化的影响,高校的办学、管理体制,以及高校与学生之间的地位与关系均发生了一定的变化,高校的办学自主权和学生的权利意识、法治意识已明显增强,高校对于学生的惩戒问题开始成为社会关注的焦点问题之一。笔者不揣浅陋,拟从现阶段我国高校教育惩戒权及程序控制的必要性和可行性等方面作一探析。 一、高校教育惩戒权的性质界定 教育惩戒权在我国立法中没有明确的规定,理论界也鲜有提及。本文论述的高校教育惩戒权特指法律规定的高校根据法定事由对其学生作出的具有法律意义的惩戒行为的一种权力。我国《普通高等学校学生管理条例》规定了学校具有的惩罚性的措施主要包括“警告、严重警告、记过、留校察看、勒令退学、开除学籍”等六种,统称为“行政处分”。除此以外,高校还具有教育行政许可权,如高校颁发学位证书的权利。前者不具有可诉性而后者具有可诉性。实际上,学校不予颁发学位证书也常常具有否定评价的性质,“行政处分”与“行政许可”理应属于教育惩戒权的范畴。 第一,教育惩戒权是一种基于教育者的身份权威而派生出的一种实体性权力。从权力性质看,教育惩戒权不是行政权,也不属普通的民事权利。从字面上看,“惩戒”二字意即“惩”与“戒”的结合,“惩”即“惩罚”,“戒”即“告诫”,“惩”是“戒”的行为要求,“戒”是“惩”的结果和价值趋向。惩戒权的本质在于教育。说到底,教育惩戒权是基于教育者对于受教育者基于身份权威而产生的一种为适应教育之必需的派生性权利,而且具体表现为一种实体性权力,作为一种实体性权力,教育惩戒权有其独特的实体性内容、表现形式、运行范围以及实体性法律后果。 第二,教育惩戒权表现为教育者的一种自由裁量权。在我国现行的高等教育体制下,行政权力介入教育领域进行干预是十分必要的,比如,国家对学校进行评估和检查。教育在现代化的进程中需要政府的参与、引导。教育惩戒权首先要得到政府的认可,并在法律规范之下运行。从这个意义上说,教育惩戒行为具有配置国家教育资源的性质和职能,但是政府并不直接参与教育惩戒行为,更多的是引导、促进和监督。它要求高校必须贯彻其精神、旨意。于是,这种基于教育者对被教育者的身份权威而派生的自由裁量权在公权力的干预、监督下就有了许多的限制和要求。其运行必须遵循一定的正当程序。 二、高校教育惩戒权的程序控制的必要性 程序乃法律之心脏”(363)。正当程序意即人们从事某项有意识的行为所必须遵循的步骤和方式。高校在管理过程中作出的具有法律意义的行为理应受到程序上的监控。程序的基本价值诉求在于对高校教育行为正当性、合理性的审视,即通过民主秩序、控权作用等优势有效控制高校教育惩戒权,防止教育惩戒权的滥用。如我国《普通高等学校学生管理条例》规定的“学校对学生的处分,要做到程序正当、证据充足、依据明确、定性准确、处分恰当”、“学校对学生做出开除学籍处分决定,须由校长会议研究决定”、“学校对学生做出处分,应当出具处分决定书,送交本人,对学生开除学籍的处分决定书报学校所在地省级教育行政部门备案”等,都体现了对教育惩戒权行使的正当程序控制。 第一,程序的公众参与、过程公开以及角色分化所带来的抗辩性和交涉性等特点使公众有机会通过公开的方式与官员进行说理、争辩、协商、抗辩和交涉,以防止官员滥用权力践踏自己的正当权利(79)。正当程序同样要求赋予当事人一视同仁的机会、平等的地位以及权利,再加上程序的运行过程都是极富理性的,所以它同样体现了结果的相对公正,使当事人有理由相信这样的结果是公正的。 第二,在我国当前的教育法律关系中,学生处于相对弱势一端,处于强势地位的高校很容易忽视学生的正当权益,学生常常会对其所在的高校有一种畏惧的心理,所以当其实体或程序上的权益受到侵害时往往是采取姑息的态度,这样在一定程度上又助长了高校滥用权力。因此,必须使高 校在一定的时间和空间条件下,按照正当程序所要求的步骤和方式行使教育惩戒权,从而通过正当程序的作用削弱高校基于其优势所带来的滥用权力的倾向,防止权力失控。 第三,在我国长期以来的传统教育体制下,高校对学生的惩戒行为手段和方式失之放任,相关的对抗、说理的机制尚没有真正地建立起来。要对高校不断膨胀的权力进行控制,就必须赋予学生更多的参与校方作出决定的权利、听证的权利、申辩的权利、对抗的权利等一系列体现民主的权利,防止高校的权力异化而冲击高校民主秩序。这正是正当程序的内在要求和功能表现。 另外,从权力运行的要求来看,教育惩戒权作为一种实体性权力,除了有相关的实体规定对其适用的范围、对象等有一定的限制外,它本身并不能对其运行过程作出限制。而任何一种权力如果其运行过程不能得到规范,它将会处于失控的状态,而正当程序的优点是可以对教育惩戒权进行有效的控制。这对于监控高校权力运行、构建高校民主秩序、推动高校的法治建设都具有重要意义。 三、高校教育惩戒权程序控制制度设计 笔者认为,教育惩戒权的程序控制主要包括两个方面:即事前程序和事后程序。毋庸置疑,设计合理的事前程序制度将教育处罚侵权遏止在萌芽之中是程序设计中最为理想的选择。根据构建程序的公开、公平、公正原则,笔者认为高校教育惩戒权的程序控制的事前程序主要应该包括以下几个方面: 第一,听证制度。听证制度即要求高校在作出将会影响被处罚学生之重大权益的处罚决定时,应该告诉被处罚学生相关的听证权利,被处罚学生随之向学校表达意见、提供证据,学校听取意见、接纳证据的正当程序。听证必须公开进行,对经过听证所得的内容要制作笔录。凡是没有听证就作出处罚的决定是没有法律效力的,即是无效的。听证制度是正当程序的核心制度,是公开、公正、公平原则的具体化,是学校强化其内部管理,寻求权利保障由“事后救济”向“事前救济”转变的重要途径。听证制度有利于实现教育领域的直接民主,扩大教育领域的民主参与,提高教育立法质量,加强教育立法的科学性,减少教育执法成本,提高高校学生的法律意识和守法的自觉性,协调高校与学生的利益关系等立法听证之功能以及查明事实真相,保证高校自由裁量权公正地行使,为高校公正裁决提供程序保障,体现了高校学生参与的平等性,提高高校执法的透明度,增加高校惩戒行为的可接受性,便于司法审查等执法听证的功能。 第二,说明理由制度。说明理由制度要求教育处罚主体在作出对相对人不利的处罚决定时,除法律的特别规定外,必须就其做出的决定的法律依据、事实依据以及自由裁量范围内的合理性考虑向相对人说明。凡是需要通过正当程序才能作出的处罚决定就必须经过说明理由程序,否则决定无效。事实上教育领域中的说明理由制度可以起到两种作用,即增加教育惩戒权决定的可接受性和对教育惩戒权正当实施的监督作用。高校必须对其作出的教育惩戒决定所根据的事实和适用的法律作出说明。这样一方面控制了教育惩戒权的行使,另一方面也很好地保护高校学生教育权益免受侵犯。事实上,说明理由制度也是宪法所规定的公民享有的知情权在教育领域中的体现。说明理由制度和听证制度一样都可以在教育领域的民主秩序的构建、控制高校自由裁量权方面起到很好的作用。 第三,申辩制度。申辩制度要求学校在说明处罚理由的同时,必须接受学生的反驳、质疑。事实上,申辩制度是民主的体现,是对学校强大力量的平衡。它对控制学校权力有着很好的作用。其效力是未经过申辩就作出重大处罚决定是无效的。现代社会的民主总是一种无奈的民主,即代议制民主是“一种迫不得已而为之的民主,是无奈的民主,不是理想的民主,不是民主的最终方式”。所谓选举一结束,专制即开始。而申辩制度实际上是一种直接的民主。也就是说直接的民主在现代社会不是不存在的,但是只有在主体自身利益受到侵害时才会享有。如果主体自身利益受到侵害也不能申辩,那么这个国家应该是一个专制的国家。申辩就是一种称述、辩解。在教育领域中,它可以使学生的意见得以反映,从而使高校的惩戒决定更加符合事实,防止了高校滥用权力,对学生的合法权益有很好的保护。所以说申辩制度也是教育程序法中理应存在的程序之一。 第四,学生自治组织的重构。学生自治组织主要是学生会,但是目前我国高校的学生会的地位、性质 和宗旨却是模糊的,它受到校方的控制。事实上,学生会的建立就是要从学生的角度出发,代表学生的利益来进行活动的。它绝对不应是高校的一个附属行政机构,学校也绝对不能利用它作为自己的附属机构。学生会应该是自治的,应该是校方组织选举产生的,但是学校不能拥有对学生会的人事任免权。学校对学生作出不利的决定时,学生会应该派员参加。这就可以强化学生的弱势,有效控制学校的权力。 除此以外,加强教育惩戒权的程序控制,还必须建立完善的教育救济机制,必须在法律制度的设计上建立起一个有机统一的内部和外部救济机制,在制度安排上使申诉、仲裁、诉讼环环相扣,具有衔接性。因此,我们强烈要求立法部门尽快制定教育程序法,只要高校不遵守教育程序法法院就可以进行审查。实际上这是对教育程序法中的程序制度的推崇,也是解决对高校教育惩戒权的司法审查的切入点的很好的办法,并为法院提供了审判依据。此外,学界讨论较多的教育公益诉讼可以进行深入考察,即允许任何组织和个人依据法律法规的授权,对违反教育法规、侵犯受教育者合法权益、妨碍正常的教学秩序、损害社会公益的行为,有权向法院起诉,由法院追究违法者的法律责任。就这种模式的实体构建来看,由于教育公益诉讼案件的客体是公共利益,是不特定的多数人的受教育权等合法权益,在条件成熟时,可尝试在我国建立教育公益诉讼制度。笔者还建议,在我国现行的司法制度框架内,宜实行“先听证,后复议,再诉讼”之三道链条的权利救济防线,即已经听证的案件可以不再复议而直接起诉,或是没有听证的案件直接起诉由法院作出最后的裁决。 【

程序教学法论文篇3

(2)基于TCP套接字编程模型

面向连接的网络通信的建立有多个步骤,要使用多个函数。为了便于理解,可以将其比喻为“打电话”这个过程。要建立基于TCP的C-S(客户-服务器)通信,首先双方进程必须各自创建一个端点,也就是调用socket函数创建套接字,正如打电话之前,双方必须都拥有一台电话机一样。Socket是面向模型设计的,针对C-S通信双方提供不同的socket系统调用。客户随机申请一个socket号,这类似想打电话的人可以在任何一台入网的电话上呼叫。服务器拥有全局公认的socket,调用bind函数将套接字地址和所创建的套接字句柄联系起来,任何客户都可以向它发出连接请求和信息请求,这就类似于被呼叫方的电话号码告知了呼叫方。客户端调用connect函数发出连接请求,就好比拨打对方的电话。而服务端有可能在完成当前请求之前又发生多个服务请求,为了很好的处理这个问题,服务器调用listen函数将所有的服务请求放在一个请求队列中排队,并尽快处理这些请求[2],这就如被呼叫方在开启呼叫等待的功能,不错过任何呼叫请求。服务器端执行accept函数等待来自某一客户端的实际连接请求,实现与客户进程连接,这就如被呼叫方拿起电话,双方可以正式通话。最后,客户端与服务端完成数据传输后调用close函数关闭套接字,撤销连接。这就好比打电话双方通话结束后,挂掉电话。

(3)基于UDP的通信机制

用“邮局系统通信”来类比这一种通信机制是非常恰当的。基于UDP通信是面向非连接的,无法保证数据以正确的顺序到达。这就类似我们先后寄出两封信给对方,不能确保第一封信一定会比第二封信先到达对方手上。而在通信过程中,服务端和客户端双方首先都需要绑定IP地址和端口号,这就好比寄信之前,对方的通信地址我们是要已知的。而客户端发送信息以及服务端回应的时候,调用sendto函数来实现,需要指明对方的地址。这如同在寄信的时候,需在信封上要注明对方的地址信息。

(4)协议端口

在讲解“协议端口”时,学生总是不能理解为什么在网络通信的时候要指明端口号,为了解决这个问题,同样采取比喻教学法。大多数操作系统是支持多进程的,目的主机到底把收到的数据包送给哪个进程呢?就好比我们去银行办理业务,银行的业务有多种,有多个服务窗口。我们要成功地办理业务,必须知道对应的窗口号。同理,当你的主机开启多个服务时,如FTP、WWW、E-Mail多个服务,当接收到传送过来的数据包时,主机要准确的把数据包传送给相应的进程,这就需要数据传输的双方进程开启端口,这样数据包将会有标识有源端口,确保接收方顺利地将数据包传送至这个端口。

(5)带外数据

通常数据是按顺序传输的,然而套接字API概念性的提供了一些使用程序,从而可以使得一串数据无阻的先于普通的数据到达接收端。这就是所谓的发送带外数据。这就好比大家排队在银行依次办理业务,有个强盗拿着枪走入银行,越过整个队伍走到柜员面前。这个就可看作为带外数据。这个强盗能越过整个队伍,是因为枪标识他的特殊性,给了他凌驾于众人的权力。

程序教学法论文篇4

2项目教学法在《程序设计》课程教学中的实践

2.1项目的确立

将项目教学法应用于《程序设计》课程的教学中,教师依据教学内容设计合理的项目。例如选取学生成绩管理系统、学生选课管理系统、通讯录、订单管理系统等,以项目来贯穿整个教学过程和所教授的内容。再把此项目分解成几个子项目,每个子项目可分解为若干个任务,学生通过完成各个任务、子项目,直至最后完成整个项目,来达到对教学内容的掌握和应用。项目与任务的分解可以参照表1。这样设计教学环节,把传授知识为主的传统教学,转变为以解决问题、完成项目任务为主的多维互动式的教学方式,既使学生有兴趣动手编程,又能与理论教学内容相结合,把程序设计语言的学习过程由枯燥的单方向接受变成愉快的探索之旅。例如,在C#的教学中,可以将整个项目分解为几个子项目,每个子项目分解为若干任务[2]。

2.2项目的实施

学生以小组为单位,探究与协作学习相结合。由每个小组负责完成自己所选定的小项目或班级大项目中的一个任务模块,小组成员在学习过程中学会按照软件工程的思想,把每个项目分解为几个任务,探索或发现的信息和材料为全体组员所共享,甚至为全班所有成员所共享[3],小组内或各组间的同学相互学习和借鉴。项目的实施过程中,教师要进行随时点评,即通过随时观察学生编程进展情况,进行实时提示、指导,指出问题所在与解决方法,引导学生不断完善项目的开发,师生按照“学习-改进-总结-提高”的过程进行教学,提高了学生运用计算机语言编程解决实际问题的综合能力。与此同时教师也要指导学生在面对不同的观点时,学会理清和表达自己对编程问题的见解,学会聆听和理解他人的想法,注重团队合作的配合和沟通。由此,学生可以看到编程问题的不同算法和实现途径,从而对编程知识产生新的洞察。

2.3项目的总结与考核评价

项目成品的效果演示是一个组的成员分享劳动成果的时刻,可以激发学生的学习兴趣,探究的欲望,更明确学习的目标。考核方式也是采用以小组为单位的考核方法,每个小组的项目负责人陈述本项目的主要功能构成、设计流程、开发过程,重点介绍原理和方法,以及在完成任务过程中遇到了哪些问题,怎样解决,等等。小组其他人员进行现场演示和补充说明,并共同回答教师以及其他小组成员的提问。教师根据每个小组的任务完成、陈述情况结合在项目确立阶段制定的项目完成的评价指标和标准,给出学生项目成果的考核评价。教师要对项目完成步骤及如何提高项目的解题思路作总体性的概括,同时可对教学知识点的遗漏进行补充,也可进行相关知识点的扩展。编程语言的项目教学评价重在鼓励学生探究、创造、实践,激发学生探究编程问题的积极性、主动性。重视学生能否把学到的编程知识与技能用于解决实际问题,以及在探究和解决问题中所获得的编程体验。总之,其评价应充分体现项目教学中学习目标的达成。

3结语

3.1取得的效果分析

项目教学法在C#程序设计教学过程的应用,是教学模式的改革,是对教学内容和教学过程的重新描述;使教学过程从“以教师为中心”转变到“以学生为中心”;将理论教学与实践教学有机结合起来;为学生创造了充分的发展空间。项目教学法可以促使学生将软件工程的思想和项目管理的方法应用到具体的任务实践中;使学生在学习程序设计的同时能按照软件工程的思想,对任务进行系统的分析、设计、开发、集成和测试,养成良好的程序设计习惯,提升程序设计素养,为以后就业以及参加实际项目开发做好铺垫。通过进行一系列的教学评测,包括学生的问卷调查、教学督导的观摩、企业同行的参与等环节,均取得了良好的反映。

程序教学法论文篇5

中图分类号:G642 文献标识码:B

1图论及图论教学

图论(Graph Theory)是数学的一个重要分支,以“图”为研究对象。图论中的图是由若干个给定的顶点及若干条连接两个顶点的边所构成的图形。这种图形通常用来描述某些事物之间的某种特定关系:用顶点代表事物,用连接两个顶点的边表示相应两个事物间具有这种关系。这种图提供了一个很自然的数据结构,可以对自然科学和社会科学中许多领域的问题进行恰当的描述或建模,因此图论研究越来越得到这些领域的专家和学者的重视。

基于图论的重要性,目前很多高校课程都涉及到图论知识,如离散数学、数据结构、算法分析与设计、运筹学、组合数学、拓扑学、网络优化等。越来越多的大学将图论单独作为一门课程来开设,作为数学、计算机科学与技术、电子科学与技术、管理学等专业本科生和研究生的必修课或选修课。

图论的教学具有如下特点:

(1) 概念、定理特别多,定理的证明通常都很难,在一定程度上造成教学比较难而且枯燥。

(2) 图论里很多问题都有具体的应用背景,但通常难以转换成图论中的模型,从而求解比较难,所以学生对图论课程有一定的兴趣,但往往会望而却步。

(3) 图论中的算法丰富,几乎每个应用问题都有不同复杂度的算法。例如,最短路径问题常用的算法有Dijkstra算法、Bellman-Ford算法、SPFA算法、Floyd算法,如果要用程序实现这些算法并求解实际问题,对学生的程序设计和算法分析能力有比较高的要求。

(4) 图论课程对锻炼计算机科学与技术等专业学生的算法分析与设计能力有很好的作用。

作者调查发现,国内高校图论课程的教学或者是侧重于完整的图论知识体系介绍、复杂的图论定理证明,或者是侧重于从应用数学的角度介绍图论在各领域的应用。我们在教学中发现,许多学生(特别是计算机专业的学生)在学习图论时,都不满足于图论算法的手工和草稿纸演算,迫切地想知道如何用程序来实现图论中的算法,以及如何用这些算法思想求解实际问题,这就对计算机专业的图论教学提出了新的要求。

2教学改革背景

随着我国的高等教育进入大众化阶段,许多高校将人才培养目标定位成应用型人才的培养。这就要求高校培养的学生不仅具备扎实的专业知识,还要有过硬的应用性知识。

对计算机科学与技术专业来说,应用型人才的培养目标要求注重培养学生软硬件系统的研发能力,强调学生对非计算机学科(专业)知识的融会贯通,学生应具备扎实的计算机基础理论知识和较强的实践能力。

发展应用型教育,培养应用型人才,应该贯穿于整个教学活动中,包括专业设置、教学管理、课程设计、教学手段和方法以及教学制度建设等方面。

在这样的背景下,我们在图论教学中一直在思考以下几个问题:

(1)“图论算法实现及应用”在我校是作为一门选修课开设的,如何让学生在感受到图论知识魅力的同时提高学习兴趣,调动学生的学习积极性。

(2) 如何针对计算机专业学生设计合适的教学方法,以适应他们的专业特点和专业发展方向。

(3) 如何设计新颖的实践教学形式和内容,引导和加强实践教学,让学生真正理解图论算法思想并能编程实现,灵活运用图论算法求解各种应用问题,以适应应用型人才培养的要求。

3图论课程教学改革

3.1改革思路

针对图论课程的教学现状和应用型人才培养的要求,我们尝试按以下思路进行教学改革:以培养学习兴趣入手,引导学生进入丰富的图论知识领域;向学生阐述有具体应用背景的图论算法思想;侧重图论算法的复杂度分析和程序实现;通过在线实践引导学生运用图论算法求解问题。

为此,我们在充分调研和积极探索的基础上,提出以下教学改革措施:(1)以大学生程序设计竞赛这一学科竞赛为驱动,激发学生的学习热情和积极性。(2)以“在线实践”这种新颖的实践方式为导向,丰富课程的实践教学并提高学生的实践能力。(3)加强“程序与算法设计”课程群的建设,构建完整的、系统的知识体系。(4)做好教材建设,编写适合这种教学思路的图论讲义、教材和实验指导书。

3.2以程序设计竞赛激发学生的学习积极性

由美国计算机协会组织的ACM/ICPC国际大学生程序设计竞赛已经有30年的历史了,中国大陆的高校在上世纪90年代中期陆续参赛,很多高校在总决赛中取得了优异的成绩。ACM/ICPC竞赛在公平竞争的前提下,提供了一个让大学生充分展示用计算机分析问题、解决问题的能力与才华的平台。ACM/ICPC竞赛鼓励创造性和团队协作精神,鼓励在编写程序时的开拓与创新。

近十年来,很多高校开始举办全校性的程序设计竞赛,并逐渐发展成为全省(市)性质的比赛,这极大地推动了这项学科竞赛在中国大陆高校的开展。

图论是这项程序设计竞赛中重要的题目类型之一。图的遍历、活动网络、最小生成树、最短路径、图的行遍性问题、网络流问题、匹配问题、图的连通性、图的着色等都有大量经典的题目,几乎涵盖了图论完整的知识体系。

例如,我们在举办竞赛时曾经出了这样一道题:由M×N个方格组成的网格表示敌占区,通讯员要从初始方格S出发,送情报到达目标方格T,其他符号的含义如图1所示。初始时,通讯员具有一定的体力。通讯员从某个方格出发,到达上、右、下、左4个方向上的相邻方格需要花费的时间和消耗的体力如图1所示。另外,从目标方格的相邻方格到达目标方格,花费时间1,消耗体力1。本题要求解的是:通讯员能否到达目标方格?如果能到达,所需最少的时间是多少(只需要保证到达目标方格时,通讯员的体力>0即可)。本题的求解要用到广度优先搜索算法。图1中给出了一条花费时间最少为13的路线(初始体力为8),到达目标方格时剩余体力为1。

我们在教学中以这些题目为例阐述图论算法思想、分析算法的复杂度并用程序实现,让学生切实地理解算法思想、直观地体会到算法的具体应用,同时我们也布置相应的题目作为练习题。这些题目的趣味性和挑战性能吸引学生投入较多的时间和精力去完成,在丰富知识结构的同时提高学生的程序设计和算法分析实践能力。

3.3以在线实践提升学生的程序实践能力

随着ACM/ICPC程序设计竞赛的推广,各种在线程序评判(Online Judge,简写为OJ)网站也应运而生,这为程序设计爱好者提供了一种新的程序实践方法:在线程序实践。

在线程序实践是指由OJ网站提供题目,学生在线提交程序,OJ网站的在线评判系统实时评判并反馈评判结果。这些题目一般具有较强的趣味性和挑战性,评判过程和结果也公正及时,因此能引起学生的极大兴趣。

学生可以根据OJ系统反馈回来的评判结果反复修改程序,直到最终收获Accept(程序正确)。这不仅能培养学生独立分析问题、解决问题的能力,而且每成功解决一道题目都能给学生带来极大的成就感。

在教学中,我们以组织学生开发的OJ系统作为实践教学平台,该平台主要起到了以下作用:(1)作为教学演示平台。对课程中涉及到的算法都尽量用程序实现,并提交到OJ系统进行验证和演示。(2)作为算法分析平台。针对图论算法丰富的特点,我们在教学中对同一个应用问题采用不同算法实现,并提交到OJ系统,以测试程序的运行时间,让学生直观观察到算法的优劣。(3)作为实验教学的平台。在实验课上,学生可以用程序求解练习题并提交到OJ系统验证。(4)作为课程考核平台。对图论课程进行教学改革后,我们认为不适合采用笔试方式考核,因此采用在OJ系统上机考试的形式。这种考核方式过程更直观、结果更客观。

3.4以课程群建设推动知识体系的系统性构建

教学改革后,图论课程的教学目标定位为培养学生图论算法分析、设计和应用能力。这跟我们建设的“程序与算法设计”课程群的知识体系、知识目标、能力目标是吻合的,因此我们将图论课程纳入该课程群。

“程序与算法设计”课程群的知识体系设计为:程序设计思想和方法、数据结构设计与运用、算法分析与设计、面向对象的软件开发、图论算法分析与应用。为此,我们精选了6门课程组成该课程群,如图2所示。

课程群的知识目标为:通过课程群中各门课程的学习,掌握基本的程序设计思想和方法;理解面向对象程序设计的思想并能熟练运用;理解各种数据结构的原理和使用方法;熟练掌握常用算法分析和设计技巧,掌握常用算法的综合运用;掌握系统分析与设计的基本方法。

课程群的能力目标为:掌握基本的程序设计、测试、调试能力;能运用面向对象程序设计思想和方法开发较大规模的软件;能综合运用各种数据结构对软件功能进行描述和建模;具备基本的数据结构和算法分析和设计能力;能针对各种图论应用问题设计合理的算法并用程序实现;在软件开发中运用系统观点,对应用问题进行初步的分析和设计;在实践活动中锻炼毅力,树立克服困难的信心,培养竞争和创新的意识。

图论算法实现及应用课程是第四学期作为选修课开设的。在此之前,学生通过前期课程的学习,已经掌握了基本的程序设计思想、方法以及基本的数据结构使用,该课程与算法分析与设计课程同步开设。

图论课程在课程群中利用其算法丰富、应用问题多而广的特点,给学生提供算法分析与设计的实践机会。通过图论课程的学习,学生不仅能掌握丰富的图论知识,程序设计、算法分析能力也将得到进一步巩固和提高。

3.5完善教材建设,适应新的教学思路

教材建设是课程建设的重要工作,教材包括课堂教学使用的教材或讲义、实验教学使用的实验指导书、辅导教材等。为适应新的教学思路和方法,我们编写了讲义和实验指导教材。讲义立足于图论算法思想的描述及程序实现,并以大量的ACM/ICPC题目阐述图论算法思想在求解这些题目中的应用。该讲义在内容取材、描述上具有如下特点:(1)许多图论教材对图论概念的描述不一致,造成读者的阅读和使用困难,该讲义试图改变这一现状。对每个概念的表述,我们查阅了大量的图论著作并进行比较分析。在讲义中,我们对每个概念采用大多数图论教材采用的名词和描述方式。(2)忽略所有图论定理的证明,着重分析图论算法的思想,重点在于这些图论算法的程序实现和应用。对图论算法的程序实现是以经典的ACM/ICPC例题来阐述的。(3)分析每一个算法的复杂度,并对同一个问题不同算法的复杂度进行对比分析。(4)采用浅显易懂的语言、丰富的图表来描述图论算法思想。

4教学方法

一种新的教学思路必须辅以一套新颖的、有效的教学方法,因此我们注重探索合适的教学方法。

4.1课堂教学

课堂教学是教学的重点,我们在教学中采取以下教学方法加强课堂教学效果。

(1) 上好第一堂课。第一堂课的教学效果会决定学生是否会认真听这门课,特别是选修课。对图论的第一堂课,我们往往从一些有趣的问题入手引入图论的研究内容,如哥尼斯堡七桥问题、中国邮递员问题、周游世界问题、图的着色等。这些问题通俗易懂,比较有趣,更重要的是,这些问题可以把图论里的主要研究内容串接起来,从而让学生对图论研究的概况有一定的了解。

(2) 加强课堂互动。图论的很多问题来自于生产生活,在学生的学习生活中也能找到应用的例子。在课堂上,我们经常邀请学生在黑板上演示算法的求解过程,这能帮助学生理解算法的思想和求解过程。

(3) 加强算法的对比分析和演示。为了让学生对图论算法的复杂度有直观的认识,我们通常在分析完算法的复杂度后,对一些例题进行程序实现,并提交到OJ系统,通过反馈回来的运行时间来验证算法的时间复杂度。

4.2实践教学

这里谈的实践教学不局限于实验课。为提高学生对图论课程的兴趣,并引导学生开展基础的论文阅读和文献综述,为今后的专业发展奠定基础,我们在教学中开展了丰富的实践教学内容。

(1) 在解题时,指导学生阅读相关论文,启迪他们的论文查阅意识和能力。比如学生在求解网络最大流问题时指导他们阅读文献[3],这篇文献综述了网络流算法的研究历史和现状。

(2) 图论里有很多问题至今都没有得到解决,比如汉密尔顿回路、图的着色等,国内外学者对这些问题的研究也一直没有中断。我们指导学生综述这些研究,这对培养学生的探索性思维有很大的帮助。

(3) 指导学生定期对求解过的题目进行总结,以解题报告或小论文的形式提交,作为平时成绩的一部分。

(4) 为了丰富OJ系统的题库,我们采取一系列措施鼓励学生出题,比如在题目中对出题学生进行署名,组织学生的个人专场比赛等。学生出的题目大多来源于平时的学习和解题的积累,因此这些激励措施也能提高学生的学习积极性。

5结束语

图论是一门既有趣又具有较大难度的课程。对计算机专业的学生来说,图论课程不仅丰富了他们的数学知识,更锻炼了他们的算法分析与设计能力。采取新的教学思路后,选修这门课的学生逐年增多,许多学生的程序设计和算法设计能力得到了极大提升,并在程序设计竞赛中取得了很好的成绩。

参考文献:

[1] 徐俊明. 图论及其应用[M]. 2版. 合肥:中国科学技术大学出版社,2004.

[2] 徐俊明. 《图论及其应用》课程建设探索[J]. 教育与现代化,1997(2):41-46.

[3] 张宪超,陈国良,万颖瑜. 网络最大流问题研究进展[J]. 计算机研究与发展,2003,40(9):1281-1292.

程序教学法论文篇6

1引言

编译原理课程是高校计算机类专业的重要基础和骨干课程。编译原理对计算机专业的学生的重要性与高等数学对理科学生的重要性几乎可以相提并论。同时,由于这门课程涉及其他多门课程的知识,使得它成为大学阶段中最难学的课程之一。

从表面上看,编译程序是将高级语言源程序翻译成低级语言程序,但编译程序构造的基本原理和技术也广泛应用于一般软件的设计和实现,其中的设计思想、算法、思维方式和技术都可能会对学生今后的职业发展产生比较大的影响。

当今,程序设计已经基本上从传统的过程式转向对象式,并且正在从对象式转向组件型。这其实是程序设计范型的变迁,是在计算机技术背景下认识世界的观点的变化:过程式将完成事务看成是一系列的步骤,而对象式却将世界看成是由一系列对象组成的,这些对象之间交互合作完成特定的事务。从过程式到对象式,有着质的变化,而非一般的修改和完善,由此带来了语言(算法描述工具)的变化。编程语言影响思维,面向对象的思维方法又促进了编程语言的发展。

目前,程序设计的一些后继课程,如数据结构等都进行了同步跟进,出现了诸如用C++或Java描述的数据结构教材。但编译原理课程却没有及时跟进,上述改变基本上没有反映到编译原理课程中。这门课程近20年来基本上没有大的变化,教学内容仍然是基于过程式语言展开的,编译算法和模型描述是用PASCAL语言或者C语言。虽然个别教材加入了少量关于对象式语言编译技术的内容,那也是稍加点缀而已,作用不大。这就造成了一种奇怪的现象:对象式语言已经成了高校计算机教学的主流语言,社会上大量使用的也是对象式语言,而我们的编译原理教学仍然沿袭旧的一套。这种“状态”严重地脱离了计算机技术的发展和社会的实际需要,因此需要进行“调态”,其根本做法是“转型”,即将本课程的讨论对象从过程式语言转到对象式语言。

国外近年关于编译原理方面的新教材已经有了重要改变,不再连篇累牍地讨论那些已经过时的内容,增加了许多新的内容。其中一个重大改变是出现了用对象式语言描述编译算法和教学模型的编译原理教材,如:用Java语言描述的编译原理教材,且其教学模型为MiniJava。

这种改变也涉及到课程上机实践。众所周知,编译原理课程的学术性和实践性都很强:学术性是这门课程的生命所在,实践性是这门课程的活力所在。因而本课程的上机实践也要作同步调整。

2课程内容围绕对象式语言展开

研究程序设计语言的语法描述需要有文法理论的支持,老教材中文法、词法分析和语法分析部分内容基本上不需要作什么变动。词法分析主要依赖有穷状态自动机理论,语法分析主要讲述LL方法和LR方法,其他方法略做介绍即可,无需展开讨论。LL方法和LR方法含盖了许多分析技术,理论性和应用性都很强,完全可以代表主流技术。

重要的就是研究对象和教学模型的改变。首先,研究对象将从过程式程序设计语言转到对象式程序设计语言(当然还可以兼顾过程式),例如Java、C++等,围绕实现这类语言的编译实现技术展开讨论。对象式程序设计语言的要素是封装、继承、多态性,在编译实现时都必须仔细考虑。其次,涉及到对象式程序设计语言编译程序教学的模型选择问题。目前传统的教材选择的教学模型有PL/0、TiniC等。实践证明,围绕某个模型展开编译设计技术的讨论,效果是比较好的。课程研究对象和教学模型的改变涉及到调整的章节主要有语法分析、语义分析、代码生成、符号表管理、存贮分配等方面。

一旦我们讨论的模型发生变化,这些章节的内容就要作很大调整。如对象式语言的作用域规则、语言动态特性、模块化封装(类)、类的继承、多态性的实现等,都需要具体的技术来实现,这些都要反映在教材和教学中。

就课程中关于代码生成内容来看,目前Java编译程序生成Java虚拟机(JVM)代码,C#生成MSIL虚拟机代码。这两个虚拟机作为教学模型来说可能比较复杂了一些,在教学中可以选定一个简单的子集;或者在PL/0虚拟机上适当增加一些指令代码,以便于代码生成、存贮分配等部分的讲解。

实践证明,作为教学模型,在教材上提供一个小型语言的编译程序供学生分析和研究,非常有利于加深对基本原理的理解和掌握。这个小型编译程序可以比较小但应该能够说明一些基本问题,例如传统的编译原理课程中选择PL/0编译程序作为教学模型,就收到了比较好的教学效果。在对象式程序设计语言编译原理课程中选择Object-pl/0或者MiniJava作为教学模型是比较恰当的。前者是在传统的PL/0语言上增加类,补充封装、继承、多态性之语言成分得到的;后者是对Java语言进行适当简化得到的,其主要语法描述如图1所示。

图1MiniJava语法

编译原理课程可以围绕此模型展开讨论。国外已经有这类教材出现,并且不少大学已经开始使用。

3用对象式语言描述编译算法和教学模型

本课程中各类编译算法都应该伴随着教学模型的变化,改用对象式语言来描述,如用Java语言描述或者用C++语言描述。其中一个重大的变化是教学模型如MiniJava或Object-pl/0要用对象式语言实现,也就是提出了教学模型的面向对象构造问题,这就比较好地将讨论对象和描述讨论对象的语言统一起来了。国外有的教材就选择了用Java描述MiniJava编译程序。编译程序是一个重要的中大型软件,传统的编译程序大都是用PASCAL、C等语言描述的(参见图2)。像编译程序这样的中大型程序如何用类这个工具来进行分解,其实是对学生的对象式程序设计能力的一个重要检验。学习用对象式语言来描述编译程序,学生可能会受到一次严格的对象式语言程序设计训练,编译程序如何用类这个工具进行分解,这些类(对象)如何合作完成编译任务,都需要较好的对象式程序设计基础。图3是一个程序设计语言文法的面向对象表示。

传统的编译程序构造主要存在如下一些问题:

(1)传统编译程序试图通过将编译程序根据功能模块分解,而使整个编译程序的复杂性降低。这种方法虽然在一定程度上简化了编译过程。但为了处理大型、复杂且多变的编译程序,仅仅将它按照功能分解成词法分析、语法分析、语义处理和代码生成几个阶段是远远不够的。

(2)传统的编译程序构造中,编译的每个阶段依然是大型、复杂的,且每个阶段内部依然存在复杂的联系,这对编译程序的可维护性没有实际上的改变,反而造成维护困难。

(3)虽然传统的编译程序构造有着丰富的理论基础,也有一些工具诸如Lex、Yacc等,但对一个具体的编译程序的构造仍然要从最基本的描述开始。传统的编译程序构造的功能分解方法缺乏支持复用的良好机制。

总之,过程式程序设计范式存在的问题在编译程序设计中广泛存在。而用对象式程序设计语言来描述编译程序,则对象式程序设计范式带来的好处基本上都能够得到。具体主要表现在:

(1)编译程序效率高。由于面向对象的编译程序构造采用的是语法树构造法,可以得到上下文相关信息,并根据上下文进行语法树的优化,所以生成的代码效率高。

(2)复用方便。由于语法类和具体的语法结构一一对应,所以在复用语法结构时,可以直接得到能被复用的语法类,不需要经过查找过程。

(3)修改方便。由于面向对象方法中的封装和多态等技术的实现,语义处理方法中所用到的数据都是局部数据,因此要做语义修改时,只要继承相应的语法类,并且重载相应的语义处理方法即可,需修改的内容较之传统方法要少。

(4)有利于构造编译程序类库,使得编译程序的构造能够大量复用已有的类,这是更高层次上的复用。

4课程实验的设计

计算机学科是一门技术学科,它虽然有一定的科学的成分,但工程技术的成分更多一些,因此需要加强动手能力的培养。编译原理课程除了注重它的原理性,还必须注重其实践性。学习这门课程时,学生对编译的理解往往只停留在书本的概念上,而不知道怎样把编译理论应用到实际的编译程序设计的实践中。另外,有些学校只将教学内容锁定在文法、词法分析(有穷状态自动机)、语法分析(LL、LR文法)上,以应付学生考研的需要。这些做法使得学生很难掌握这门课程的精髓。

图2传统的编译程序功能分解

图3程序设计语言文法的面向对象表示

编译系统可能是所有软件系统中最复杂的系统之一,通过本课程实践环节的教学,还可以帮助学生掌握一些大、中型软件设计的技术和技巧,提高学生面向对象软件开发的综合能力。

传统的编译原理课程往往要求学生自己实现一个词法分析程序;实现一个基于递归子程序递归下降分析程序或基于预测分析表的语法分析程序;为某虚拟机(例如PL/0虚拟机)生成代码;对教学模型(例如PL/0)进行扩充,写出完整的编译程序等。且在此过程中学生可以借助词法分析自动生成程序Lex和语法分析自动生成程序Yacc进行有关实验。我们要求学生通过对教学模型的分析,能够在机器上动手实现一个小的编译系统,以加深对编译整个过程的一致性、连贯性、整体性的理解。

一旦我们的讨论对象改变为对象式语言,则其编译程序语法和词法分析的自动生成不能再采用Lex、Yacc这类工具了,需要改用JavaCC(JavaCompilerCompiler)或SableCC等,它们都能生成Java语言代码;或者使用Jikespg(Jikespasergernerator),它生成C++代码。

我们初步制定了本课程的实践环节,它主要分四个层次:

(1)借助JavaCC或SableCC等工具让学生自动生成小语言的词法分析和语法分析程序。这个实验的目的是教会学生关于词法分析和语法分析的自动生成,同时弄清这些工具生成出来的代码的程序结构,特别是面向对象的类结构。

(2)为上面生成的语法树添加语义动作,完成生成代码的工作。这个实验的目的是让学生理解如何在抽象语法树上添加语义动作,理解为虚拟机生成代码的知识。

(3)扩展教学模型,如MiniJava,为其增加一些语言成分,如有关语句等,然后为其构造完整的编译程序。这一实验让学生把握编译的总体,弄清各部分之间的关系。

(4)逐步构造面向对象的编译程序类库,使得“编写”编译程序逐步走向“组装”编译程序。

程序教学法论文篇7

在新课标中,《算法与程序设计》成为信息技术课程的一个选修模块,该模块的教学目的是使学生在原有基础上进一步体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用;能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法解决问题。在《算法与程序设计》教材中,首先介绍诸如算法、流程图的画法等知识,然后才是介绍VB程序的建立和运行。最后介绍常用算法实现等。这样的章节安排使得学生一开始的前几节课都接触的是稍显枯燥的理论知识,对激发学生学习本模块知识的兴趣是不利的。在具体教学过程中,笔者并没有完全按教材的章节安排来开展教学,而是采用先介绍实例,引导学生学习兴趣后再不断地在实例教学中穿插讲解算法、程序等方面的理论知识。

一、通过简单例子入门

很多程序设计教材,第一个入门程序都是“Hello World”程序,在VB程序中,类似的入门程序只需一个按钮和一行语句即可实现,但通过这样简单的演示程序却可以很好地介绍一个标准的图形界面程序中对话框、标题栏、按钮等基本要素,让学生知道学习程序设计也并不是一件很困难的事情。

在了解第一个入门程序后,紧接着给学生介绍的是一个简单计算器的设计,并以该程序和Windows系统自带的计算器程序作对比。让学生加深印象。简单计算器程序界面如下图所示。

该程序包括三个标签控件,三个文本框控件和四个命令按钮控件。在演示界面设计后,即可介绍个命令按钮的代码设计,加法按钮所添加的代码也只有一行:Text3,Text=Val(Textl,Text)+val(Text2,Text),其他三个运算按钮的代码只需将上述代码行中的“+”号分别修改为“-”“*”和“/”即可。最后给学生演示一个除数为O的特例,然后程序出现异常提示,在结合数学知识分析出错的原因后,告诉学生针对“÷”按钮的特殊情况增加条件判断语句即可,代码如下:

If Val(Text2.Text)OThen

Text3.Text=Val(Textl,Text)/VM(Text2.Text)

Else

MsgBox“除数不能为零!”

End if

通过上例很好地让学生了解了程序设计的基本过程,让他们知道程序设计好像也并不难,从而一方面激发了学生兴趣,另一方面也建立了进一步深入学习的信心。

二、以生动例子激发学生兴趣

针对现在很多学生喜欢动漫、游戏的情况,在授课过程中教师特意演示动画程序的设计过程(该程序是通过图片交替运动、叠加实现的。不是播放视频文件),并告诉学生实际的电脑动漫、游戏的设计原理也是类似的。

三、理论知识与实例教学相结合

《算法与程序设计》教材的章节基本是按照“先理论后实践,先语句再程序”的顺序安排的,因此很多教师上课时为了让学一生便于结合课本学习,也是先结合教材讲解基础理论部分,如算法与程序的概念、流程图画法等,然后再介绍具体的Ⅶ程序设计。由于大多数学生在本门课程之前没有学习过相关知识,使得他们学习有些茫然,不知道怎么去学,也不知道学习这些理论后有什么意义,从而失去了学习兴趣。基于上述原因,教师授课时可以不按课本的章节顺序来开展教学,而是从简单程序实例开始让学生了解本课程到底是学习什么内容,学会之后能够做什么,从而提起学生的学习兴趣;同时在后续学习过程中也完全可以将算法相关的理论知识融合在一些学生容易理解的生动实例中进行讲解。

四、结束语

程序设计教学可以培养学生逻辑思维能力、描述问题能力、解决问题能力以及创造能力。在开展教学时,通过实例引导学生学习兴趣仅是第一步,另外教师还需加强程序设计思想的培养,有意识地向学生渗透解决问题的思想方法。中学《算法与程序设计》教学方法是灵活多样的,以上仅是笔者在教学过程中的探索与体会,总结出来希望能够互相交流,把中学《算法与程序设计》课程的教学工作开展得更好。

参考文献:

程序教学法论文篇8

程序设计是我国高校各专业学生必修的一门核心课程,该课程的教学目的是使学生掌握程序设计的基本方法和理论,应用某一程序设计语言编写具体的程序。程序设计的教学质量将影响到学生的程序设计能力,影响到学生创新思维的培养。

一、程序设计课程教学现状

“程序设计”课程长期沿袭传统教学模式,即以一种高级语言的语句体系为脉络展开教学,详细地讲解其语句、语法甚至一些细节内容,学生每学习一个语句需要做一些与该语句有关的习题。课程枯燥无味,学生学习积极性不高,很少动手实践。课程学完后,学生除了学到一些呆板的语句外,收获甚微。

1.理论基础薄弱

有些教师过分重视程序设计语言的教学,而对于程序设计中所涉及的程序设计理论、程序设计的方法和算法的设计思想等理论知识的讲解不够深入、透彻。

2.学生缺乏创新能力

学生可以解决那些和已经学过的知识有直接或有密切联系的问题,而面对一个需要用已经学过的知识进行综合求解的程序设计问题时,就不知从何下手,对所学知识做不到举一反三,缺乏程序设计的创新能力。

3.动手能力不强

学生实际动手能力差,具体表现在两个方面。其一,学生上机调试程序的能力差,难以找到错误产生的原因;其二,实际编写程序的能力不强,编写的程序功能不够完善,风格不一,程序健壮性差。

针对以上出现的问题,我们认为应该在教学过程中对学生各方面的编程素养进行引导和培养。

二、编程方法引导

程序设计的观念虽然发生过很多变化,但程序的基本结构仍然是顺序、选择和循环三种。因此,在学生初学程序设计时就应该注意渗透结构化程序设计的思想,以便使学生养成良好的程序设计习惯。

我们这里谈的不是纯粹的程序设计方法,如结构化的、面向对象的等,而是在教学中渗透程序设计的技巧。这里举一个结构化程序设计的例子。

例:求100以内的素数。

经过分析可以发现,除了“2”以外,偶数不可能为素数,所以外循环有50次是多余的,同理在内循环中,也不必用偶数测试。再进行分析又发现,一个合数最小的因子不会大于它的平方根,所以内循环中的次数被再次减少。最后程序变为:

通过不断改进程序,可以使程序效率得到不断提高,当然这些提高是在数据规模不断增长时才能体现出来。尽管现在很多人认为硬件的速度发展很快,我们应该把速度提高的任务交给硬件去实现,这样的想法未免过于武断。姑且不论类似上述的技巧对于程序执行效率的提高有多少益处,单从基于问题的学习方法这个角度的出发,程序的衍生对于提高程序员的编程水平也是一个很好的训练方法,所以这样的编程技巧是不可多得的,我们在教学过程中就是要进行这方面的引导。

三、编程风格和规则引导

前面提到我们在进行程序设计教学时,传统教学模式比较少注意编程风格和规则的引导,所以很多时候,学生编制出来的程序都是一路下来齐刷刷,缺乏良好风格,死套语法,缺乏考虑可能的不安全因素。

由于学习程序设计是一个循序渐进的过程,所以在教学中如果潜移默化地引导学生从程序设计入门开始,就注意程序设计的一般风格和应该遵守的规则,就能让学生更快更好地编制出高质量的程序来,并且具备良好的编程习惯。

举例说明。我们知道,free和delete都可以把指针所指的内存给释放掉,比如:

这段程序运行一定没问题,但如果在其后加上这样一段代码:

我们会发现出错了!这是因为,p所指内存被释放,但是p存放的地址值仍然不变,即p成了“野指针”。尽管尝试用if(p!=NULL)来判断p的可用性,我们却发现出错处理并没有起作用。所以,良好的习惯是在free和delete后,都要对指针作置空处理,即p=NULL。有人会说如果要这种情况出现在程序结束时,一切指针也会消亡,动态内存也会作系统回收,所以P置空是多余的。但是如果有人将这段程序取出来用到其他地方会怎样呢?结果不是我们想见到的。

四、算法设计概念的引入

程序=算法+数据结构。这就提出我们在进行程序设计教学过程中,不仅要重视语法的讲授,也要重视算法的讲授,甚至是要将算法提到更为重要的地位。程序设计是要解决问题,语言只不过是为解决问题而使用的工具,真正解决问题的是算法,难怪专家说“算法是魂,程序是衣”。

如在C语言程序设计课程教学中,当完成分支结构程序、循环控制和数组,进入内容较多的算法设计教学后,我们将教学内容分为以下五个方面。

(1)一般数据组织算法:查找、排序、字符串处理、求素数、筛选、迭代、穷举等;

(2)函数调用,函数嵌套归、递推及贪心算法等;

(3)指针算法,动态内存分配,链表等;

(4)用矩形法、梯形法计算定积分、模拟算法的随机抽样、蒙特卡罗法等算法;

(5)文件数据处理。

在课堂上增加算法设计的分析和讨论,强调算法设计的优化和程序的优化,是提高学生分析和解决实际问题能力的有效方法。

五、开展研究性学习

在程序设计过程中,开展研究性学习,是为了提高学生分析和解决实际问题的能力,主要是通过对解决问题的算法进行研究而展开的。由于课时所限,并且学生没有足够的实践经验,所以对算法问题的研究也是初级的,主要是讨论典型问题的典型算法及其应用。

1.通过研究性学习,可以重构知识体系,加深对算法的理解。

研究性学习是学生在教师的指导下,选定主题,然后搜集相关材料,对材料进行归纳、加工处理、分析、总结得到相应结论的学习活动。在教学中,可以根据教学内容,经过反复研究,确定研究主题,并根据学生的自愿报名成立研究小组,如搜索算法研究小组等。然后各小组根据自己研究的算法,重新整理相应的知识,对知识进行归纳、总结。通过对各种算法知识进行整理、分类、小结,加深学生对这些算法的理解。

2.通过研究性学习,同学之间取长补短,共同提高。

每个学生都有所长,也有所短,研究性学习一个重要特点就是:分工合作,共同讨论,共同提高。我们可以根椐学生的特点、特长,对他们进行分工,每位学生研究一种算法其中的一个问题,然后整个小组一起讨论,每位学生介绍自己的研究情况、研究成果,然后其他同学进行补充,发表自己的见解,这样每个学生都使自己的研究内容得到补充,同时也学习到了其他同学研究方面的知识,可以取长补短,共同提高。

3.通过研究性学习,总结算法的应用规律,提高程序设计能力。

在进行研究性学习时,除要求学生归纳、整理专题算法知识外,还要总结出算法的应用规律、应用算法解题的步骤和算法的框架。学生通过自己对算法应用规律的总结,对算法的应用得到升华,进一步提高算法的应用能力和程序设计能力。

4.通过研究性学习,提高分析问题的能力、算法表达能力和归纳、综合能力。

对算法的专题研究,不仅要对算法理论进行总结,算法应用的研究也是很重要的一方面,通过算法的解题应用,既提高了学生分析问题的能力,也加深了学生对算法的理解,提高了学生的算法应用能力。另外,我们在算法研究过程中,要求学生透彻理解算法内容,用算法语言准确描述算法,通过这种途径进一步加深学生对算法的理解,同时也提高了学生的算法表达能力和归纳、总结的能力。

结论

我们认为在程序设计教学中,要改革旧的教学体系,需要用新的理念、新的内容、新的方法组织教学。首先要用先进的程序设计理论指导教学,并加强编程算法、逻辑思维和编程方法的引导。其次,重视和鼓励学生对具体问题进行分析和研究,勤于动手和上机训练,养成良好的编程习惯。此外,对不同层次的学生可以进行分阶段教学,前一阶段讲授基本的程序设计方法,除了讲授程序设计语言的基本语法,还对学生进行编程方法及程序设计风格的引导;后一阶段主要讲授程序设计的较高级的语法和功能,提高学生对算法的认知和重视程序,并且在学生中开展研究性学习,培养学生实际动手能力。

参考文献:

[1]李云清等.程序设计创新能力的教学研究[A].全国计算机新科技与计算机继续教育论文集2003.

[2]李海伦等.“程序设计”课程教学改革的研究与实践[J].计算机教育, 2005.7.

[3]丰振.计算机程序设计教学方法研究[J]. 教学研究,2004.9.

程序教学法论文篇9

关键词:算法设计;算法分析;实践环节

中图分类号:G642

文献标识码:B

“算法设计与分析”近年来在很多院校的本科阶段开设,体现计算学科以算法为主要研究内容的学科目标。算法研究的是解决计算问题的操作序列,早在计算机技术发明之前,人们就对算法作了大量的研究。在本科阶段开设“算法设计与分析”,就是要使学生通过本课程的学习认识算法的设计与分析对程序设计与程序性能改善的理论指导作用,为今后在职业生涯中开发出具有创新性的应用程序打下良好基础。

基于这一指导思想,在计算机专业本科阶段“算法设计与分析”课程的教学改革就要求我们把握好理论与技术的平衡。如何把握本门课程中理论与技术的平衡,笔者认为需要从如下几个方面加以考虑。

1教学内容

算法课是理论课,它指导的是程序设计的思想和行为。因此,本课程的教学内容以理论为主应是合理的。问题在于对本科阶段的理论深度与广度的把握。首先,从我国普通高校本科阶段数理基础课的教学实际出发,学生掌握的数学知识限于微积分、线性代数、数理统计初步以及不多的离散数学(包括集合论、近世代数、数理逻辑和图论的基本概念)基础知识,远不能达到在理论论证中灵活运用的程度。在算法课程中,无论是算法的设计还是算法的分析,都不能超越这一基础。盲目追求理论严密将会严重挫伤学生的学习积极性。其次,本课程往往开设于高年级阶段,课时少也限制了教学容量。但是,通过有限的理论教学要使学生明白如下几点:

程序设计不能没有理论指导

理论指导下设计的程序更优秀

实际的应用需求将会推动理论的发展

因此,笔者在本课程的教学中在内容上注重以下三个方面:

经典算法设计方法

常用的算法分析方法

算法性能改善对理论研究的要求

2教学模式

很多重点院校,特别是偏重于理论研究的院校开设算法课通常不包含实验环节。但计算学科发展至今,更多的学生走进计算机系学习计算机技术,把算法课作为一门纯理论课来开设,对大多数学生是不利的。以前算法课不含有实践环节的一个可能的原因是技术远落后于理论(数学理论已有近千年的历史,而计算机技术却仅有短短几十年的发展历程),很多精巧的理论很难用当时的描述工具和运行平台加以实现。今天,我们不但能够用高度抽象的程序设计语言描述复杂的算法,在微型计算机上实现大多数流式算法,很多院校还配置了中小型计算机,让学生可以做并行算法的实验。所以,现在我们已经有了验证理论的物质条件,就应当把算法课的课堂扩展到实验室去。

应当认识到,为算法课增添适当课时的实验环节不但是可行的也是必要的。这首先要从教学目标出发,我们培养的是今后从事计算机软硬件开发制造和计算机技术应用的工程技术人才,学习算法就是要培养他们能用正确的理论指导创新开发的实践。其次,通过实验,让学生知道现有技术可能还不足以实现理论上已有的成果,引导学生思考明天可能的技术改进或理论创新。笔者所在学校将算法课的教学模式设置为3:1的理论与实践教学学时比。课堂教学以理论阐述论证为主,实验课实现算法并验证算法的效率。笔者最近在学生中作了一个问卷调查,调查了如下问题:

对你而言“算法设计与分析”课程对提高程序设计技术的水平________________。

回答“没有什么帮助”占3%,回答“有一点帮助”占23%,回答“有较大帮助”占47%,回答“有很大帮助”28%。

对你而言学习“算法设计与分析”课程的最大好处在于_______________。

回答“深入学习程序设计语言”的占20%,回答“深入学习数据结构”的占23%,回答“提高程序设计能力”的占56%。

这说明大多数学生认为算法课确实能提高他们的程序设计能力。

3实验课的设计

笔者认为,在实验课中将课堂讨论的理论加以验证,加深对理论的理解仅仅是实验课最基本的任务。绝大多数学生必须保质保量地完成这一任务。但是,我们从调查问卷中对如下问题的统计数据中却看到一个很让人担心的情况:

你认为学习“算法设计与分析”课程的最大困难在于___________________。

回答“听课理解”的占5%,回答“阅读理解”的占26%,回答“习题练习”的占17%,回答“算法实现”的占53%。

也就是说,半数以上的学生认为用他们在一、二年级所学的程序设计技能来实现已有的算法有困难。认真想来这也符合规律:一、二年级学习的是程序设计语言和基本的数据结构,学生没有充分体验到用语言和数据来设计解决问题的算法进而开发出能实际运行的程序的问题。所以,算法课的实践环节对工科学生来说,不仅是必要的,还是必须的。算法课增添实验环节既能让学生验证理论,还能在低年级所学的程序设计基础上提高程序设计开发的能力。

然而笔者认为,仅仅停留在算法的验证上还是不够的。当今的程序设计技术日新月异,利用当前的新技术实现并应用经典算法,使学生能够跟上技术发展的步伐,增强就业竞争力应当是我们在“算法设计与分析”课程中加入实验环节的另一个重要着眼点。利用诸如模板、仿函数、迭代子、对象合成等程序设计模式将实现的算法拓展成通用的函数库或类库,以此方式在实验中让学生自己掌握在高级程序设计语言课程中由于学时限制未曾深入研习的程序设计技术,从而切实地提高程序设计能力。

普通工科院校计算机专业的学生学习算法的设计与分析的最重要的目标,应当是其在程序开发中的应用。实验内容应该包含应用。笔者认为ACM/ICPC(国际大学生程序设计竞赛)历年来的题目很好地反映了算法设计与分析技巧在程序设计中的应用意义。笔者尝试着在本课程的实验中让有能力的学生研习一些这方面的题目,效果在一部分学生中是显著的。

总之,计算机教育工作者都在思考计算学科教育的本质以及如何提高本学科的教学质量。理论与技术的平衡是这场思考中的一个重要主题。厦门大学的赵致琢教授曾经指出“理论与实践相结合,理论与实践的统一是计算科学发展中最重要的特点之一。”因此,在教学中如何凸显本学科的这一特点,是每一门课程的教师应当认真思考并努力实践的。

参考文献

[1] 中国计算机科学与技术学科教程2002研究组. 中国计算机科学与技术学科教程2002[M]. 北京:清华大学出版社,2002.

程序教学法论文篇10

0 引言

我国高等教育已经把培养具有创新能力的人才作为一项迫切的任务。创新问题解决理论是前苏联发明和创造学家G.S.Altshuller 在1946年创立的,“TRIZ”是其俄文单词(Teoriya Resheniya Izobretatelskikh Zadatch)的首字母。目前TRIZ在创新设计、创新教学、创新科研等方面得到应用,取得了可喜的成果,其中阮汝祥 [1]和高常青 [2]在TRIZ的理论和发展、应用等方面做了详细的研究;江敏[3]和卢惠林 [4]在计算机课程中具体如何应用做了深入的研究。但是,这些研究一般都是针对TRIZ理论本身的研究,或是对程序设计类专业课研究,很少对计算机程序设计公共课程的研究,对于非计算机专业学生,程序设计类课程作为一个学生必修课,它不像计算机专业学生要求那么高,设计的程序也不是特别深,只是与自己所学专业有效结合,通过该课程,培养学生的计算机思维、计算机素养,所以更体现出需要创新思维的深入挖掘。本文将TRIZ理论与学生创新能力培养相结合,将其应用到计算机公共课程素养教育中,为培养具有计算机素养软件的创新性人才培养提供一条辅助途径。

1 TRIZ理论的创新思想

TRIZ的含义是 “发明问题解决理论”。经过50多年总结出解决技术矛盾所遵循的创新原则,建立起了一整套实用的解决发明问题的理论和方法体系――TRIZ理论体系。TRIZ理论体系[1]主要包括以下几个方面:问题分析与建模方法;技术系统进化法则;冲突解决原理。

TRIZ理论的创新方法指的是解决冲突的原理,最终建立了包括发明原理、发明问题解决算法和标准解在内基于知识的逻辑方法。在利用TRIZ理论解决实际问题的过程中,首先可以将问题建模成TRIZ模型,然后利用TRIZ理论提供的方法和工具,找出该问题的普适解,再根据实际的情况和环境,最终将普适解转化为领域解或特解。

2 程序设计教学传统模式

程序设计课程长期沿袭传统教学模式:以一种高级语言(如Visual Basic或Visual C++)的语句体系为脉络展开教学,详细地讲解其语句、语法。教学通常采用整堂灌输书本知识,比较抽象,枯燥无味,使学生产生畏惧心理。学生每学习一个语句只需要做一些与该语句有关的习题,学生很少动手实践。教师在实践教学过程中, 对一些问题的解决,方法模式化、绝对化,有没有其他途径或思路,存在哪些不确定因素和各种选择的可能性等。

3 TRIZ理论在计算机程序设计教学中的应用

教学中采用TRIZ理论中发明式教学,将本课程与专业特色相结合,鼓励学生自己思考,并对他们的思考结果给予鼓励,培养他们思考的成就感,进而激发他们的创新思维,使得课堂教学在动态思维变化中,不断提高学生创新能力。

3.1 基于TRIZ 理论进行发明式教学,启迪学生的创新思维和发散思维

针对非计算机专业的学生,在教学中采用TRIZ理论,将本课程分为几个关键点,对关键点鼓励学生自己思考。对学生的创新思维训练的主要方法有:

3.1.1 采用基于专业特色的案例教学法

1/4时间教师传授该知识点,使学生在理论上产生认知。

1/2时间教师与学生互动式解决问题,本专业实际应用在哪些方面,如何应用,有没有更好的方法等等。

3/4时间学生在教师引导下,练习完成问题分析和求解过程,并有效地举一反三。

最后学生自己梳理、总结、提炼知识,并归纳分析问题和解决问题方法,教师进行适当调整。

3.1.2 采用综合作业(项目)引导学生的创新思维

TRIZ理论认为,对问题中存在的矛盾和冲突的解决,作为程序设计类课程,其最终目标在于培养学生的程序开发能力,所以在程序设计课程中,所谓的“冲突”,就是如何培养学生根据实际专业特点,学以致用中的项目开发能力,提高实战能力,即项目教学法[5]。在教学进行到一定阶段时,可以让学生完成一个完整系统的开发,完成整个的开发流程,包括需求分析、设计、开发、测试等等,同时,在实践的过程中,给学生足够的创新空间,在实际项目中培养和鼓励学生发散性的、创造性的设计。

3.1.3 进行创新思维技法和思维方法的训练

每讲完一个知识点,可以让学生相互启发,激发他们的联想思维、想象思维、灵感思维, 进而得到创新的成果,然后再进行拓展,使学生在视觉、感性认识得到充分利用,激发他们的创新激情。

3.2 TRIZ理论ARIZ算法的实践教学,强化实训教学

在课程教学中穿插TRIZ理论的ARIZ算法实践教学,主要从下面几个方面改革:

3.2.1 课程设计和实验内容的改革

将实验课程加强综合性和设计性实训的开设,加入自己的创新思维,才能完成实训内容。这个实践环节对培养学生的创新能力有着重要作用。这些实践课程采用兴趣组合、团队合作、相互帮助和启发的方式,对现有的问题提出创新性解决方案。

3.2.2 实验考核方案改革

采用上机自主学习系统,对每个实验项目按知识要点分配分值,为每个实验项目配置评分程序和测试数据,在实验课结束前10分钟对所有学生的提交的程序进行快速评测,生成评测结果报告,报告中详细记录每位学生的得分情况以及每题完成情况。这种实验考核方案不仅将教师从低层次的批改实验报告等繁杂的工作中解脱出来同时增强了批改的准确性,降低教师重复性、简单性工作量;而且在分数驱动下,大大提高了学生的实验积极性和主动性,实验出勤率达到 95%以上,提高学生了动手编程能力。

3.2.3 积极开设第二课堂, 鼓励学生参与创新活动

基于TRIZ理论的问题解决过程, 是发散思维和收敛思维相互作用的过程, 是运用逻辑思维和非逻辑思维的过程,具体环节的思考又充分利用各种创新思维方法。结合各个学院专业特点和教学优势, 程序设计创新实训联盟,具有实践经验的双师型教师构建第二课堂, 供学生在课余进行创新活动。

4 总结

经过对非计算机专业计算机程序设计类课程的教学研究和实践,我们认为要破除旧的教学体系,需要用新的理念、新的内容、新的方法组织教学,针对非计算机专业学生对程序设计类课程的认知特点、认知心理、学习模式。提出基于TRIZ理论培养创新能力,TRIZ理论不能直接提供问题的创新解决方案, 将通用解转化为特殊解是有效运用TRIZ理论的关键。用先进的程序设计理论指导程序设计教学,在教学中加强编程算法、逻辑思维和编程方法的学习。

【参考文献】

[1]阮汝祥.TRIZ理论与创新方法[K].北京:中华人民共和国工业和信息化部,2009.

[2]高常青,黄克正.由TRIZ理论的通用解求问题的特殊解[J].中国机械工程,2006(1):84-88.

程序教学法论文篇11

中图分类号:G642 文献标识码:B

1编译知识在计算机学科中的作用

自从20世纪50年代中期诞生世界上第一个高级语言编译器――Fortran语言编译器以来,编译技术不断进步,已经成为计算机科学中发展最迅速、最成熟的一个重要分支。自1966年以来的所有55位图灵奖获奖者中,有近1/3的科学家是因为在程序设计语言和编译方面的成就而获得该项奖励,可见程序设计语言和编译的发展集中体现了计算机科学发展的重要成果与精华。计算机应用能发展到今天,编译技术的发展有着极其重要的、不可替代的作用。

五十多年以来,随着编译技术的发展,有关编译原理和技术的内容被逐步引入到了计算机专业本科教学中。从早期各阶段ACM和IEEE的计算机专业教学计划,到近年ACM和IEEE联合制定的CC 2005,再到我国教育部高等学校计算机科学与技术教学指导委员会2006年编制的《高等学校计算机科学与技术专业发展战略研究报告暨专业规范(试行)》,直至最新的ACM和IEEE联合制定的CS2008,都把有关编译原理和技术的知识作为重要教学内容列入。目前,我们编译原理课程的教学内容覆盖了CS2008体系中程序设计语言领域、算法和复杂性等领域的多个知识单元。

2编译原理课程的理论性和技术性特点

编译程序的构造原理和技术可以说是计算机科学技术中理论和实践相结合的最好典范。在许多课程的教学中,经典理论和先进技术之间的联系往往缺乏具体而形象的例证,而“编译原理”课程在这方面具有得天独厚的优势。形式语言和自动机理论为编译程序的设计提供了坚实的理论基础,正是在科学理论的保证下,才形成了一系列先进的编译程序设计方法和工具,使得编译程序的构造具有很高的系统性和自动化程度。例如,正是有了有限自动机的经典理论,才有了LEX这样的高度自动化的词法分析器的自动产生器;正是有了Knuth提出的LR分析方法,才有了YACC这样的高效的语法分析器产生器,将程序员从繁琐的代码编写中解放出来。编译课程的教学既要强调经典理论在计算机科学中的重要作用,又要注重介绍利用这些基础理论来设计和构造编译程序各模块的先进方法及工具,可以具体形象地说明经典理论与先进技术的关系。理论和实践相结合是“编译原理”课程的鲜明特色。

“编译原理”课程特别强调运用理论知识进行实践的能力和素质,以突出计算机专业人才培养的特色。“编译原理”是每个优秀的计算机专业人员必修的一门课程。通过编译程序这一具体的案例,学生可以综合理解和运用计算机的程序语言、操作系统和体系结构等各种软硬件知识,形成计算机专业人才特有的系统的专业知识结构。在系统学习编译的理论和技术的过程中,学生一方面对科学理论的基础作用有了充分的认识,提高了学习经典理论的兴趣,形成了较高的理论素养;另一方面,通过课程综合性的实践,分析或改进简单或复杂、原型级或产品级的各种编译程序或工具,也可以提高灵活运用理论知识、设计较大规模的软件来解决实际问题的能力。在课程的学习和实践中,学生可以深刻体会到理论学习的意义和动手实践的乐趣。

有许多人认为,如果今后不从事编译器的开发,编译知识就显得并不重要了――事实上并非如此。编译课程鲜明的理论性和技术性特点,使得这些知识对于计算机专业人员来说具有重要作用,甚至可以说是计算机专业人才区别于一般计算机人员的重要知识结构。对于将来从事编译系统设计工作的学生来说,编译课程的学习当然可以使他们掌握和理解编译系统的结构、工作流程以及编译程序各组成部分的设计原理和实现技术,获得分析、设计、实现和维护编译系统的初步能力,打下坚实的能力和知识基础;而对于那些将来不从事编译器研制的学生来说,编译课程的教学对于提高他们对计算机系统总体认识也具有重要的意义。通过学习编译的理论和方法,学生可以提高对程序设计语言的设计与实现等知识的综合理解,而这些知识对于准确掌握程序设计语言,学习新的编程范型,理解程序,开发出正确的软件都是不可缺少的基础。图灵奖获得者Perlis教授的名言“To understand a program you must become both the machine and the program”就精辟地说明了这一点。此外,编译课程介绍的经典语言分析方法和工具,对于一些实用的工具和软件,如自然语言理解、网络信息处理、网络协议的分析与实现等领域的软件或工具的研制,都是很好的基础。更为重要的是,编译课程中介绍的一些经典的理论和方法,对于传授计算机科学研究的方法、训练学生的思维都是难得的生动案例。因此,不能把编译课程片面地理解成为一个介绍编译程序的课程,而应当把该课程的教学放在培养专业素质、训练思维的层面加以认识,特别是应当强调如何在编译的教学中培养学生的计算思维。

3计算思维及其在编译理论和技术发展中的作用

计算思维(Computational Thinking)是卡内基梅隆大学计算机科学系Jeannette M. Wing教授在2006年提出来的先进的教育理念,被认为是近十年来产生的最具有基础性、长期性的学术思想,并将成为21世纪计算机科学研究的热点。

计算思维是运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为,它包括了一系列广泛的计算机科学的思维方法。Wing教授认为,计算思维不仅仅属于计算机科学家,它将和阅读、写作和算术一样,是21世纪每个人必须具备的基本技能。计算思维已经在其他学科中产生影响,而这种影响在不断拓展和深入。例如计算生物学、计算博弈理论、纳米计算和量子计算等新兴研究领域的发展正在深刻改变生物学、经济学、化学和物理学领域研究的思考方式。

典型的计算思维包括一系列广泛的计算机科学的思维方法:递归、抽象和分解、保护、冗余、容错、纠错和恢复,利用启发式推理来寻求解答,在不确定情况下的规划、学习和调度等。显然,这些计算思维方法都可以在许多编译理论和技术的发展中找到痕迹,很多编译成果正是运用计算思维的结晶。例如,抽象和自动化是计算思维的两个重要手段,也是编译理论和方法产生的基础。编译课程中介绍的语法知识描述、词法分析、语法分析、属性文法、乃至优化等知识点,都体现了面向具体应用、从实际问题中抽象出科学问题并运用科学的思维方法进行问题求解的思想,其成果根植于坚实的经典理论,并应用于实践,以推动技术的进步。因此,在编译课程的教学中,结合编译理论和技术中经典的案例培养学生的计算思维,是一条值得探索的途径。

4结合编译案例的计算思维培养

如何培养“计算思维”,是目前计算机教育界非常关心的问题。例如,在计算机专业的教学中,有些学校在专业核心课程中融入计算思维的培养;在非计算机专业的教学中,对计算机导论类或程序设计类的课程进行改革,针对学科交叉的需求,从教学内容和方法上进行改革,培养学生的计算思维。总体来说,计算思维的培养应该贯穿在大学教育的全过程,甚至在大学之前的教育中。计算思维对于计算机专业的人才培养提出了新的要求,我们必须在专业课程教学中结合计算思维的培养。

编译课程的知识体系完整,既有经典理论成果奠定的坚实基础,又有在实践中发挥巨大作用的先进技术,其中很多知识点都为计算思维提供了很好的诠释和生动的案例。下面,我们从抽象、自动化、递归、问题分解和权衡等典型计算思维方法出发,探讨结合编译案例培养计算思维的可能途径。

(1) 抽象

“抽象”是科学研究的重要手段,也是计算机科学研究的重要工具。在编译理论和技术的发展中,正是运用“抽象”这一有力工具,才获得了一系列的重要成果。例如有限自动机、形式文法等都是重要的抽象工具,有了这些工具,才能够把握词法分析和语法分析等问题的本质,发现其中规律,最终形成一系列的自动分析方法。

(2) 自动化

将抽象思维的结果在计算机上实现,是一个将计算思维成果物化的过程,也是将理论成果应用于技术的实践。有限自动机、预测分析程序、算符优先分析、LR分析等编译经典方法,都是在抽象的基础上将知识和控制分离(即分析表加控制程序),从而获得了经典的分析工具,而这种知识和控制的分离也为分析工具的自动产生提供了可能。自动化的思维方法不仅体现在编译程序本身的工作机制上,更体现在编译程序的生成工具的研究和设计上。

(3) 递归

许多编译中的问题都具有明显的递归特征。运用递归思维解决复杂的问题,通常是对问题进行逐步化简,最后得到了一个规模非常小、非常简单、更容易解决的类似问题,将该问题解决后,再逐层解决上一级问题,最后解决了较复杂的原始问题。编译中的递归下降分析是最直观的对递归思维的运用,此外,基于树遍历的属性计算、语法制导翻译都是典型的递归问题求解。

(4) 问题分解

程序设计中的“自顶向下、逐步求精”的思想就是一种典型的问题分解的计算思维方法。运用问题分解这种思维方法进行问题求解,首先须做出对问题本身的明确描述,并对问题解法做出全局性决策,把问题分解成相对独立的子问题,再以同样的方式对每个子问题进一步精确化,直到获得对问题的明确解答。在编译程序的设计中,通过引入中间语言,将编译程序划分成前端和后端,就是一种典型的分解问题的思路。

(5) 权衡

“编译原理”课程是一门理论性和技术性都非常强的课程。理论研究重在探寻问题求解的方法,而在编译程序的设计和实现过程中,对于理论成果的研究运用又需要在能力和运用中做出权衡。这方面一个典型的例子是,我们知道,虽然高级语言的大部机制都可以由上下文无关文法来描述,但是上下文无关文法不能完全刻画高级程序语言的所有规范,有些语言机制甚至存在二义性。但是上下文无关文法的分析是高效的,所以我们在编译程序设计中依然采取上下文无关文法来描述高级语言语法,但是在具体实现时,通过改造分析表消除冲突、符号表操作、语义检查等手段,去实现上下文无关文法分析所不能完成的功能――这正是在具体实践中结合具体问题进行权衡的结果。

5结束语

计算思维的培养不是哪一门课程的教学能解决的问题。对于计算机专业教育来说,应当关注在各专业课程中的计算思维的培养,强调对各种原理和方法进行提炼,从思维方法的高度培养学生,使学生能够应用计算思维解决问题。大学计算思维的教育应贯穿于整个大学教育,做到学习期间不断线。

参考文献:

[1] Jeannette M. Wing. Computational Thinking[J]. Communications of ACM, 2006,49(3):33-35.

程序教学法论文篇12

中图分类号:G633.6 文献标志码:A 文章编号:1674-9324(2014)22-0178-02

《C/C++语言程序设计》是计算机学科体系中的核心课程之一,主要讲授程序设计语言的基本知识和程序设计方法,使学生了解高级程序设计语言的结构,掌握程序设计的思想和方法,以及基本的程序设计过程和技巧,具备初步的分析问题和利用计算机求解问题的能力。课程核心是培养程序设计能力,加强实践是培养设计能力的重要途径。本文基于教学中存在的问题,从案例驱动教学、注重实践教学等两方面探究如何在实际教学中提高学生的学习积极性和思维能力,实现学生从单纯的程序编写到解决实际问题能力的转变。计算机程序设计类课程实践性很强。实践性强体现为无论多简单或多复杂的程序设计问题都要形式化为数学式子或相应的操作步骤,最终都要编写程序,开发出能够解决相应问题的计算机软件;学习该类课程既要注意学习好理论,更要注重进行实际上机操作的训练,运用理论知识进行程序设计解决实际问题,做到理论与实践相结合。

一、教学难点

本文对2011、2012和2013年度参加C和VB二级考试的一年级理工类学生做了抽样统计(数据来源为西安科技大学大学教务处),结果表明报考率和通过率差强人意,尤其是C语言,9个班级中通过率在50%以上的只有3个班级,最低的通过率仅为17.3%。通过问卷调查的方式获悉学生普遍对C语言的学习有畏惧心理。程序设计类课程理论性抽象性较强,语法知识繁多,结构复杂,调试程序更是初学者的“拦路虎”,学生往往难以理解程序设计的思维方式,对教学内容似懂非懂,而掌握良好的程序设计方法则更加困难;采用传统的教学方法讲解课本上的内容难以调动学生的学习积极性。主要原因主要有以下三方面:第一,教学重理论轻实践,过分注重计算机语言语法知识的讲解,轻视了算法设计、逻辑思维和编程方法的培养;第二,学生计算机编程能力有待提高,大多数学生基本上是初次接触计算机程序设计,习惯采用数学思考方式来进行程序设计,还没有真正掌握计算机编程的基本思路;第三,实验课时不足,实践课时通常是理论课时的一半,大部分专业是16个学时,这样的学时安排远远不能满足学生能力培养的需求。教学要以学生为中心,要让学生容易接受理解。教师只有从学生的角度体会“学”之困惑,反思“教”之缺陷,才能明了如何通过“教”帮助学生学习,体现现代教育以人为本的思想。程序设计基础课程对许多学生来说,是第一次接触编程,因此,学生往往难以理解程序设计中分析问题、解决问题的方式,尤其是抽象思维。所以,教师不但要研究教学内容,更要研究教学对象――学生,根据学生的学习特点,研究教学内容传授中重点和难点的解决办法。

二、教学组织方式

程序设计基础教学内容的组织方式主要有两种:以语言知识为主线、以程序设计为主线。目前普遍采用的方式是前者,经过一些高校多年的探索实践,以程序设计为主线的组织方式也取得了成功的经验。以语言知识为主线的教学内容组织方式往往以上述语言表达模块为单位,同时考虑程序设计的学习进程来组织教学内容。典型的教学内容组织路线是:概论-数据类型和表达式(标准类型)―分支―循环―数组―函数―指针―结构―文件。以程序设计为主线的方式则重点围绕学生程序设计能力培养,以程序设计的学习进程为主,打破语言模块的完整性,循序渐进地组织相关教学内容。在教学中,以语言知识为主线的教学内容组织方式重视语法知识的完整性,侧重以语法的理解带动程序设计能力的培养;以程序设计为主线的方式则更加强调编程实践,侧重以编程带动对语法知识的深入理解。因此,以程序设计为主线的教学组织方式往往按照程序设计的渐进学习进程,结合实际案例来组织和实施教学,将程序开发过程的相关内容贯穿和渗透到每个知识点的讲授中去。一种以程序设计为主线的教学内容组织路线是:概论―初识程序设计―语句级控制(分支与循环)―数组应用―模块级控制(函数)―指针、结构应用―程序设计进阶(递归、链表结构)―文件应用。在采用以程序设计为主线的实施方式时,可以将课程内容分为若干渐进式的程序设计学习阶段。在每个阶段的教学过程中,通过案例讲解程序设计的思想和方法,引出知识点,必要时再使用多种方法(如多媒体动画)进行深入的讲解与分析,并通过布置思考题和实验题,让学生通过学习思考和大量的上机练习培养编程能力,掌握知识。

三、问题驱动式教学

问题驱动教学是围绕教学目标,通过完成事先设置的相关联任务(例题)来达成教学目标的实现。在开课前,对典型的例子演示运行结果,激发学生的学习兴趣,明确学习任务和目标;在课堂上,将本次课程的内容和知识点通过几个具体的任务表现出来,引导学生在完成任务的过程中掌握所涉及到的理论知识,并注重反例教学,让学生“吃一堑,长一智”。这种教学方式学习目的明确,任务清晰,能极大地调动学生的学习积极性,对教学效果的提高起到非常明显的促进作用。

四、模仿创新教学

模仿创新即通过模仿而进行的创新活动。在《C/C++语言程序设计》课程中,模仿体现在学生根据教师所给程序进行验证分析,碰到类似的情况和功能实现可以参照相应的程序;创新是在所给验证性实验的基础上,根据新要求,实现新程序,并能综合应用所学知识实现复杂功能程序。课程实验教学将学生学习到的理论知识应用到实际问题。考虑到学生的基础不同,应尽量设计有层次和梯度的实践训练内容,使不同水平的学生都能得到最大可能的提升。每次的实际教学设计中,可以把实验内容分成三部分:验证、改编和综合。

1.验证程序。结合案例教学方法,针对每次上课所学知识点的不同,分别提供给学生一些已包括所学知识点、实现实际问题、可直接运行出结果的有吸引力的案例,即源程序,让学生自己执行程序和查看结果,根据源程序和运行结果分析其程序中所包含的知识点及程序具体实现的功能,加强学生分析问题的能力。有时候源程序中包含一些常见错误,让学生发现问题,调试程序,带来成就感。

2.改编程序。在已给程序的基础上,提出具体的功能改编要求,学生需要结合已学知识修改相应的程序,从而实现新功能。例如,学生可以通过改编“猜数字游戏”源程序,实现“提示猜测数字大小、每个数字最多猜7次”等功能。

3.综合程序。在学习了基本的程序设计知识后,通过综合程序练习同学们运用知识解决问题的能力,例如象棋游戏、成绩管理系统、智能排序等综合程序。基于案例的教学方式有时教师遇到问题暂时卡住时也可问学生如何解决,学生会很有兴趣积极地帮助教师完成该案例的调试,这样真正做到上下交互,教学相长。这种教学方式忌只放PPT,要当场分析和编程,不能用解说代码代替实际开发,这样学生就更感兴趣学习编程了。

五、课外补充

1.建立“程序设计学习QQ群”。责任教师申请一个学习程序设计类课程的QQ群,所有的辅导老师和学习这门课程的学生都加入群。开学初老师把QQ群公布给学生,让学生课后每次上QQ都能看到群里的讨论。在QQ群里,学生与老师,学生与学生之间随时随地在网上进行讨论、答疑。在学习群里“能者为师”,学生之间经常互相解答问题,这样既提高了学生的知识水平和问题的回复率,也减轻了辅导老师的工作量。

2.定期组织学习小组之间的编程竞赛。每个班按10人左右分成若干个学习小组,老师为组织者和裁判,在教学大纲的范围内出题进行小组之间的编程竞赛,由老师出一个相同的题目,小组内的成员之间通过小组群,互相协作,共同参与,最后由组长整理提交程序的结果,老师做裁判,又快又准完成程序设计的小组为胜,获胜的小组成员每人都获得平时成绩加4分的奖励。这种编程竞赛方式能充分调动每个小组成员参与的积极性,提高学生的学习兴趣,同时又能激发了学生的团队合作精神。

3.制作“微课”形式的视频。仿照“做游戏学英语”的形式,制作各知识点的微课视频,在网上共享,以备学生课下自主学习。

参考文献:

[1]吴文虎.我怎么讲好“程序设计基础”这门课[J].中国大学教学,2011,(12):10-12.

[2]王洪波.杏坛英华――北京大学青年教师优秀教案集[M].北京:国家图书馆出版社,2009.

[3]教育部高等学校计算机科学与技术教学指导委员会.高等学校计算机科学与技术专业核心课程教学实施方案[M].北京:高等教育出版社,2009.

[4]何钦铭.“程序设计基础”课程教学实施方案[J].中国大学教学,2010,(5):62-65.

友情链接