问题诱导启发式程序设计语言教学方法

时间:2022-09-21 06:52:30

问题诱导启发式程序设计语言教学方法

摘要:启发式方法已经在程序设计语言教学中广泛应用。通过分析现有启发式方法,结合程序设计语言教学,提出一种新的启发式方法――问题诱导启发式程序设计语言教学方法,并结合具体语言讨论该方法的应用策略。实践证明,该方法可以提高学生的知识理解和运用能力。

关键词:问题诱导;启发式教学;程序设计语言;教学方法

目前大多数程序设计语言按照知识点结构进行教学,教师在教学过程中习惯性地进行注入式教学。这种教学方法造成学生只能照搬照套模仿示例代码,不能灵活运用所学知识,难于自己动手编写代码以解决实际问题[1]。著名科学家牛顿发现“成熟的苹果从树上掉下来”这一自然现象,才逐步分析问题、研究问题,提出了万有引力定律;而不是先研究出万有引力定律,才推导出实际结果或发现现象。所以科学家们都是从实际问题、具体现象出发,分析问题,研究问题,从实践升华到理论,再从理论应用到实践。当教师在向学生传授科学家们研究出的科研成果时,应该让学生先了解存在的问题、知识的来源、过程,以深入理解知识、能够灵活应用知识,而不是简单地告诉其成果,然后应用到实践中。

我们要培养出具有创新能力的人才,不仅要采用启发式方法促进学生对知识的理解与应用,更迫切需要按照知识被发现、研究和应用的“再现”过程,传递知识给学生,让学生理解知识的本质。所以,本文研究问题诱导启发式程序设计语言教学方法,在教学中从具体的问题入手,启发式地引导学生理解程序设计语言中的基本概念、基本结构和基本方法,然后应用到具体实例中。本文以面向对象程序设计语言Java为例,从基础知识、程序算法、过程和函数、图形用户界面设计等方面分析问题诱导启发式教学方法在程序设计语言的应用。

1启发式教学方法

启发式教学是历代东西方教育思想的精华。早在两千多年前,孔子就提出了“不愤不启,不悱不发;举一隅而不以三隅反,则不复也”的启发式思想。他强调学思结合,认为只有当学生处于积极状态时,在心求通而未得其意时,在知其意而不能言时,教师进行启发、诱导最为合适,教学效果最佳。同样,古希腊苏格拉底提出了“助产术”,以交流方式讲学,在交谈时提出问题,引导学生进行思索,自己得出结论。孔子和苏格拉底的启发式思想和方法,为古今中外历代教育家继承和发展,形成了今天的启发式教学思想、原则和方法[2]。启发式教学方法具有很多形式,包括经常使用的正问启发、从问题对立角度提出的反问启发、增强学生直观印象的观察启发、依据知识点内在联系进行逻辑推理的推理启发、使学生加深对知识内涵和外延认识理解的对比启发、类比启发、发散启发、图示启发等[3]。

问题启发是启发式教学方法的重要途径,问题本身的质量是影响启发式教学效果的重要因素。根据美国密歇根大学教育学院的研究报告,一个好的启发式问题应该是有价值的、可行的、可持续的、合伦理的。有价值的启发式问题可以使学生真正理解知识点,学习到有价值的知识。可行的启发式问题应该是学生在已经掌握的知识基础上,利用教材和参考资料、互联网等资源,通过研究、讨论等形式可以解决的。可持续的启发式问题应该能够扩展已有知识,发现新知识。合伦理的启发式问题应该是积极健康的、合乎伦理的。

2程序设计语言教学

在计算机课程体系中,程序设计语言包括汇编语言和高级程序设计语言。程序设计语言是计算机领域专业的核心基础课程,在课程体系中处于先导性和基础性地位,是学习后续课程的重要技术和工具基础。程序设计语言课程的学习不仅可以使学生获得基本的程序设计能力、培养学生基于计算机计算的思考能力,还极大影响学生对后续课程的学习和兴趣。程序设计语言教学主要讲授基本语法、常用的函数、典型算法和编程技巧,培养学生具备程序设计思想解决实际问题的能力。

3问题诱导启发式教学

问题诱导就是按照知识被发现、研究和应用的“再现”过程,传递知识给学生,让学生理解知识的本质。问题诱导启发式程序设计语言教学方法是在教学中从具体的问题入手,启发式地引导学生理解程序设计语言中的基本概念、基本结构和基本方法,然后应用到具体实例中。本文将问题诱导启发式方法应用到具体的Java程序设计语言教学中[4-6]。

3.1基础知识

程序设计语言的基础知识点有标识符、注释、分隔符、变量和常量、数据类型、运算符、表达式、数组、语句。

对于标识符,通常的做法是先介绍标识符的命名规则、作用,然后给出示例。在Java语言中,标识符是以字母、下划线或美元符$开头,字母、下划线、美元符$、数字组成的任意长度的字符序列,用于表示程序中的变量、常量、类、函数等名字。合法标识符:A, a1, $Systembol, square, ex_sa;不合法标识符:1a(不能以数字1开头),break(禁止使用保留字),TWO WORDS(不能含有空格),.NO(不能有圆点)。本文采用问题诱导策略的启发式方法是先提出问题:程序需要由CPU执行,读取并处理内存的数据。CPU如何找到数据?根据内存地址?高级语言不会知道数据的内存地址的,所以给数据所在的内存地址起名,这就是标识符命名程序要访问的数据。对标识符的命名就像我们对日常的起名一样,必须要有一定的规则,这就是标识符命名规则。

对于注释,通常是依次讲授注释的表示方法、作用。在Java语言中有3种注释形式:“//”单行注释:表示从此向后,直到行尾都是注释;“/*……*/”块注释:表示在“/*”和“*/”之间都是注释;“/**……*/”文档注释:所有在“/**”和“*/”之间的内容可以用来自动形成文档。注释的作用:对程序的执行不产生任何影响,注释可增加程序的可读性,也有利于程序的修改、调试和交流。采用问题诱导的启发式方法是先提出问题:如何使形式化的程序易读、便于交流?如何让程序员很快能回忆起以前编写的程序代码的含义?在Java中提供了便于理解程序的可以采用自然语言编写的注释。当然,这种自然语言编写的注释不会影响程序的运行,仅仅是对程序的一种补充说明。

对于分隔符,通常会列举出空格、逗号、分号及行结束符等分隔符,并给出示例。采用问题诱导策略的启发式方法是先提出问题:如何区分语言元素如关键字、标识符、运算符等?与汉语不同,在英文中需要采用分隔符将单词分割开来。例如,我是一名教师,对应的英文:I am a teacher,这里必须采用空格作为分隔符;否则我们是无法理解没有空格的英文Iamateacher。程序设计语言和英语一样是西文字符表示的,所以需要采用分隔符区分语言中的语言元素。此外,和英文中的段落划分便于阅读相同,分隔符也可以提高程序的可读性。

对于变量和常量,通常依次给出变量的含义、类型、定义形式、引用形式、作用域等。在Java语言中,变量是程序运行期间其值可以变化的量。变量的类型决定了该变量的存储范围、可以进行的运算形式。布尔型的变量只能取值: true和false,只能进行取反、并、或、异或逻辑运算,不能进行加减乘除运算。变量的定义和引用形式示例代码段如下:

bool sex;//定义变量

sex=true;//引用变量

采用问题诱导的启发式方法先提出问题:在程序运行过程中CPU读取并处理内存数据,CPU如何获取数据所在的内存地址?这就要求程序标识命名CPU所访问数据的内存地址。在程序运行中如果该存储单元的值可以变化,就是变量,否则就是常量。例如一个根据半径计算圆面积的程序中,半径是变量,圆周率是常量。

具体代码段如下:

final float PI=3.1415926F;//圆周率

float radius=2.0F;//半径

float area;//面积

area=PI*radius*radius;//计算圆面积

对于数据类型,通常讲授数据类型的分类、每个数据类型的取值范围和运算。采用问题诱导的启发式方法提出问题:定义一个表示年龄的变量age,age=30该变量对应内存存储单元的值变为30,表示年龄为30岁,然而,age=30.1是错误的、无意义的,那么如何让程序运行前通知这个错误,而不是运行后经过分析才发现这个错误?数据类型可以实现对变量的取值范围限制以及所进行的运算。当变量age定义为整型变量,该变量只能被赋值以整数。然而如果要限制变量age只能存放0到200之间的整数值,就需要结合条件语句来实现。

对于运算符和表达式,通常依次讲解运算符的种类、优先级和表达式的定义。采用问题诱导的启发式方法提出问题:创造计算机执行程序的目的是为了科学计算,如何表示计算中的运算符、操作数和表达式?程序设计语言中的运算符、变量以及常量、表达式与之相对应。进一步,如何表示形如 的表达式?因为计算机是按行从上到下,从左至右依次读取代码执行程序的,所以,必须将这种占两行的表达式转换为一行的形式,即为分子/分母。

对于数组,依次讲解数组的定义、初始化、引用、多维数组。采用问题诱导的启发式方法提出问题:如何计算100个学生的平均成绩?没有采用数组如下代码段表示:

float grade00;

float grade01;

float grade99;

float avgGrade=0;

avgGrade=(grade00+grade01+grade02+…+grade98+gtrade99)/100; //计算平均成绩

如果采用数组表示,如下代码段所示:

float grade[]=new float[100];

float sumGrade=0;

float avgGrade=0;

for (int i=0;i

avgGrade=sumGrade/100;

显然,可以看出没有采用数组表示,需要定义100个整型变量,需要102条语句,而采用数组表示仅定义数组变量,需要5条语句。所以,采用数组表示可以减少代码数量、也可以提高程序的可读性和可维护性。数组是相同类型元素的集合,如何表示不同类型元素的集合?可以进一步引出其他知识点。

对于语句,通常讲授语句的定义、种类以及示例。语句是程序的基本组成单位,语句包括简单语句和复合语句。简单语句包括变量定义语句、赋值语句等,复合语句就是使用一对花括号{}将若干语句括起来的语句块。采用问题诱导的启发式方法提出问题:如何编写程序控制计算机执行命令?程序是由什么构成的?语句就是构成程序的要素,是控制计算机的命令。简单的命令就是简单语句,负责的命令就是复合语句。进一步,如何表示语句?语句后面跟着分号。计算机按照顺序依次执行语句,如何表示当某种条件满足才执行语句?如何表示重复若干次执行某条语句?程序设计语言中的顺序结构表示依次顺序执行语句,条件语句表示满足一定条件才执行某条语句,循环语句表示满足一定条件执行某条语句。

3.2程序算法

对于程序算法,老师通常依次讲解算法的概述、分析算法流程、阅读算法代码、展示运行结果。算法本身比较抽象,再加上这样的教学方法,导致学生难以理解和运用。采用问题诱导的启发式方法并结合实例启发,提出如何解决一个具体问题,如排序、查找,从而引出算法。例如,在讲解程序设计的排序算法时,应先进行问题启发,给出要排序的一组数,然后启发学生如何能够排序该组数,以调动学生,让学生根据算法的要求结合已有的知识,积极主动地参与到算法的设计过程中来。图示是一种直观的、简明的、清晰的教学方法,可以把抽象的知识形象化、具体化。程序算法设计是比较复杂的知识点,需要采用多媒体教学手段以图示方法启发教学。教师应根据学生思考的进度将课件中的程序逐步展现在学生面前,接着再采用多媒体动画方式播放排序过程,把抽象的、复杂的排序过程形象化、具体化。切忌将事先编好的程序直接显示给学生,然后再从头至尾地将程序介绍完毕。否则学生即使理解程序代码的意义,自己也不能灵活运用已经学习的程序算法,解决类似问题,设计出正确的程序算法。

3.3过程和函数

过程和函数是比较容易理解的概念,过程和函数都是程序的构成单位,是完成某个功能的程序段。函数和过程的区别是:函数有返回值,可以构成表达式,而过程没有返回值。采用问题诱导的启发式方法启发,提出问题:如何组织编写一个上千行的复杂程序?肯定是不能放在一起的,需要划分。如何划分?过程就可以将一个复杂程序划分为若干个程序段,并命名以方便调用,这样可以提高程序的可读性和可维护性。表达式由操作数和运算符构成完成一定的运算,如何将一个程序段的计算结果作为操作数嵌入到表达式中?函数是具有返回值的程序段,可以作为表达式的组成部分。

3.4图形用户界面设计

对于熟悉控制台方式编程的学生来说,初次接触

到图形用户界面设计,不宜理解,一时不能转换编程方式。这就需要我们教师采用合适的方法讲解该内容。采用问题诱导的启发式方法并结合实例启发,提出如何设计实现一个具体应用程序,如腾讯QQ聊天程序、PPLive网络电视等,从而引出图形用户界面设计,让学生对该知识点的应用产生具体形象的认识。图形用户界面设计就是采用基本组件:窗体、按钮、工具栏、文本框等,“组装”程序界面,类比我们把主机、显示器、键盘、鼠标、音箱等组装成一台个人计算机,我们只需要知道它们之间的接口和功能就可以有选择地组装计算机,而不需要了解其工作原理和内部结构。例如光电鼠标的作用是通过USB接口和主机相连,作用是采集人移动的方向、坐标以及动作。学生只要知道鼠标的作用和接口就可以完成这个任务。

4结语

问题诱导启发式程序设计语言教学方法是本专业高级程序设计语言教学团队多年教学实践的总结,在日常教学应用中取得了很好的教学效果。启发式教学方法的应用有助于增强学生理解并应用程序设计语言知识解决问题的能力,提高学生从问题发现知识的“自我学习”能力。然而,该方法在其他课程的研究和应用,需要进一步的实践分析。

参考文献:

[1] 朱昌流. 论启发式教学的有效实施[J]. 教育与职业,2007(18):157-158.

[2] 陶沼灵. 启发式教学方法研究综述[J]. 中国成人教育,2007(4):39-40.

[3] 邵洁.课堂学习共同体的有效建构:以高级语言程序设计(VB)课程为例[J]. 现代教育技术,2009,19(8):120-124.

[4] 樊新华,孟铂. “C程序设计”启发式实例教学探讨[J]. 计算机教育,2008(18):98-99.

[5] Harvey M. Deitel, Paul J.Deitel. Java大学教程[M]. 北京:电子工业出版社,2003:34-112.

[6] Bruce Eckel. Java编程思想[M]. 4版. 北京:机械工业出版社,2007:30-90.

Research of Heuristic Programming Language Teaching Methods Based on Problem Induction

LI Xue-jun, LI Long-shu, XU Yi

(School of Computer Science and Technology, Anhui University, Hefei 230039, China)

Abstract: Heuristic methods have been widely used in the programming language teaching. By analyzing the existing heuristic methods, the paper combines with programming language teaching, and proposes a new heuristic method called heuristic programming language teaching methods based on problem induction, and also discusses the application strategy about specific language. Practice has proved that the method can improve students’ ability of understanding and application.

Key words: problem induction; heuristic methods; programming language; teaching methods

上一篇:高职高专院校数据结构与算法教学改革与实践 下一篇:C语言程序设计课程双语教学探索与实践