编程语言教学实践中渐增式验证序列IVS探讨

时间:2022-08-28 03:08:47

编程语言教学实践中渐增式验证序列IVS探讨

摘要:本文针对当前编程语言教学实践过程中出现的问题,以QDeV过程为基础,结合迭代式、渐增式开发和软件重构的思想,尝试一种渐增式验证序列IVS方法。

关键词:QDeV;IVS;编程语言教学;渐增式;迭代式

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

1 引言

编程语言在计算机专业课程中占很大比重,学生要学习汇编语言、C/C++、Java、数据库SQL、J2EE等多门课程。但是在教学实践过程中出现了诸多问题,“重结果、轻过程”是一个普遍存在的问题。教师往往直接拿出事先准备好的程序进行演示,并不解释设计过程的细节,这导致学生理解困难、难以及时求证、缺乏兴趣。另一方面,教师考核学生往往仅检查程序运行的结果,而对学生设计过程缺乏了解,导致教师难以对求解过程进行深入指导。“重理论解析、轻实践指导”也是一个普遍的问题。在教师看来,每个语言元素的语义、语法和语用都有必要解析清楚,‘而且这种重复解析简单轻松。实际上,能使学生将。编程语言作为问题求解的有效工具才是我们的目标。要达到此目标,实践是必不可少的重要环节,而且应达到一定的比例。西方一些知名院校的实践考核比例高达60%,而我们的实践比例普遍低于25%。编程语言学习实践中应该融入开发方法的指导和训练,使学生能应对将来的激烈竞争。

敏捷方法学提倡极限编程、迭代式渐增式开发、软件重构、测试优先、结对编程等新方法,我们能否提早引入到编程语言学习实践过程中,尽早培养学生良好的思维和实践习惯,这是一个值得探讨的问题。

以上问题对目前的编程语言教学实践提出了挑战,本文尝试一种渐增式验证序列IVS方法,希望有助于改进当前的编程语言教学实践。

2 渐增式验证序列IVS

2.1 QDeV过程

先简单介绍QDeV过程,结合迭代式、渐增式开发和软件重构,介绍渐增式验证序列IVS(Incremental Verification Sequences),并探讨多个IVS之间的关系。针对一个问题的求证,QDeV过程包含4个环节:Question质疑、Design设计、execution执行和Validation确认。此过程贯穿于每个关键性语言元素所涉及的每个问题,即对一个问题贯穿如下4个环节:

1.“质疑”:明确提出一个问题。

2.“设计”:根据问题需要,给出简单编程,也可能重构已有设计或更改配置。

3.“执行”:运行程序以得到可观察结果。

4.“确认”:对该问题给出结论。

QDeV(隐含着快速开发Quick Development之意)特色是质疑驱动、以验证性设计为核心、个性化和实践性。

2.2 IVS表

在QDeV实践过程中我们进一步认识到,对一个问题给出结论之后又会引出新问题。此时添加少量新设计(称之为渐增increment),或者少量改进已有设计(称之为重构refactoring),就能很容易地验证新问题或更复杂的问题,如此周而复始(称之为迭代iteration)。当教师和学生都不能提出新问题,或者已有设计不能再改进,或者到达学生当时能理解的极限时,迭代暂停。而当学习过新元素之后,这样的过程还可再继续。这种迭代式渐增的过程可描述为图1的螺旋曲线。

经实践,我们总结如下规律:

・ 持续改进已有设计具有更好的教学效果。

・ 迭代式渐增可验证多个相关问题,具有更高效率。

・ 渐增式验证和求解能表达更多的过程细节,简化了复杂性。

・ 作为一种良性循环,是对当前软件工程的一些新方法的实践。

为了推广应用这种教学实践方法,本文尝试IVS来改进编程语言的教学和实践,表示为一种IVS表的形式,如表1所示。

IVS表由两部分组成:表头和表体。表头主要描述编号、目标和前提。

编号:一门课程需要一系列的IVS表,按教学过程对每个IVS表确定一个序号,以确定该表的教学次序,也方便其他表的引用。

目标:用简短文字描述要达到的目的。通常是一个具体的实例,例如,“如何用模板类设计一个单向链表”,“如何用模板类实现一个堆栈/队列”等。也可能是一个教学单元的描述,例如“数组如何定义与应用”、“函数/方法如何定义与应用”等。一个IVS目标往往是一个较“大”或者较“抽象”的问题,解决此问题要求进行多轮的QDeV过程。

前提:即“前继目标或问题”。要达到本目标需利用前面已实现的目标或已解决的问题,以明确已有的条件和基础。此处可引用其他IVS表的编号或表编号加序号,可说明多个前提。在表头,教师可按需扩展新内容,如“难易程度”、“时间安排”等。

表体包含由多轮QDeV构成的序列,一行表示一轮QDeV过程。

序号:从1开始按序排列,以确定每一轮QDeV的次序,也方便引用。被引用的方式是“表编号:序号”。一般来说,后一轮以前一轮为基础。如果前后两个QDeV之间没有严格的前后次序,可加小写字母来区分,如2a、2b,表示两者之间无严格次序。

问题:用简短文字描述一个问题。

设计:文字说明设计要点,仅需以提示方式来说明添加或重构的要点,避免大幅源码出现。如果需要的话,可用超链接来关联一个或一组文件。

执行&确认:说明执行效果和结论。表中将执行和确认合并为一栏,原因是“确认”描述往往很简单。

备注:主要用于教师扩展新的内容。例如,总结当前验证的结论、引出下一个问题、引用另一个更具体的IVS表或引用教材中的相关章节等等。

2.3 IVS间的关系

一门课程需要多个WS表,多个IVS表之间可能存在多种关系。明确表示这种关系,可使学生的知识技能的体系更趋完善,也可方便教师备课和实施。IVS表之间主要有3种关系:“表序”表示课序前后;“前提”表示基础与条件;“细化”表示具体实施。下面分别介绍这3种关系。

表序。多个IVS表的序号从小到大表示了多个课程单元的大致前后次序,这样将一门课的多个IVS表形成一个序列,这类似我们的教学实施计划。

前提。每个IVS表都可说明要实现本目标所需要的若干相对重要的条件和基础,这往往依赖于已实现的目标或者一已解决的问题。前提关系表明了知识和技能的脉络结构,从简单到复杂,从低级到高级,给出一个清晰的渐增过程。例如在C/C++课程中,一个IVS目标是“如何用函数实现一个单向整数链表”,应说明“函数”、“结构”、“指针”作为其前提,而像变量说明、循环语句就不适合作为其前提。

细化。一个抽象描述的IVS表可细化为多个具体表。对于一个IVS表,如果有一个问题不能简单用一轮QDeV过程来解决,那么这个IVS表就是一个“抽象表”,它需 要将一项QDeV细化为一个具体的IVS表。例如,在J2EE课程中建立一个抽象的IVS表,目标是“如何构建Jt2EE应用系统”,第1个问题是“如何搭建一个J2EE基础平台”,而要解决此问题,并非一轮QDeV能完成。一种合理的方法是细化:以此问题为目标,另建一个具体的IVS表,用几轮QDeV来说明如何逐步安装、配置、验证数据库、Java虚拟机、Web服务器等过程。表示这种细化关系是在抽象表中的“备注”中引用具体的IVS表。

除了上述3种关系之外,多个IVS表之间还可能存在其他关系,但建议不要将关系复杂化。

3 IVS应用及特色

应用IVS的目标是“将学生纳入良性循环的轨道,推一把,让学生自己去做”,具体如下:

1.“将学生纳入良性循环的轨道”:对一个IVS表确定一个中等难度的目标,并给出前3个问题。

2.“推一把”:教师对第1个问题给出设计、执行和确认全过程,对第2个问题仅给出设计,让学生执行和确认。第3个问题由教师提出。

3.“让学生自己去做”:对第3个问题由学生自行设计、执行和确认,而后要求学生提出第4个问题,自行设计、执行和确认,如此循环下一个问题。

在编程语言教学实践中应用IVS,应注意以下几个问题:

1.在课程开始时,向学生说明这种新的教学实践方式,使学生能理解IVS表和QDeV过程,使多数学生能理解其作用。

2.在课程进行中,用IVS表来改进讲义或教案,使学生目标明确、思路清晰。可将未完成的IVS表交学生完成,并鼓励学生提出新问题,然后自行设计验证。教师可检查学生提交的IVS表来发现过程中的缺陷和不足之处,给学生提供及时对症的指导。

3.在课程复习时,向学生提供本课程全部IVS表,主要是列出全部的目标和问题,要求学生对照检查,以发现缺陷和不足,也方便教师选择重点和难点。

4.在课程考核时依据IVS表,方便教师命题,既可考核基本概念,也可对实践环节进行考核。

IVS方法的特色总结如下:

・目标驱动。要达到的目标和要解决的问题必须先明确,有助于学生集中注意力,保持思路清晰。

・持续改进提高。从简单入手,注重过程训练,使学生不畏惧复杂性,对克服困难有自信,也提高学生自学能力。

・提早实践新方法.将迭代式开发、渐增式开发、软件重构等新方法提早引入到编程语言学习阶段,使学生尽早地实践新方法,有助于将来从事大型复杂软件研发。

・简便易行.可理解、可跟踪、可指导,在教师与学生之间有效沟通。不需要特别的工具支持,

PowerPoint、Word或Excel通常够用。

4 结束语

进一步的工作包括基于IVS如何引入“测试优先”、“结对编程”等新方法;研究多门课程间IVS的关系,以推动多语言多平台的渐增式教学实践;也包括基于WS的教材编写。

上一篇:“团队学习”教学模式的理论与研究 下一篇:以实践教学来增强“汇编语言”的教学效果