基于敏捷开发的数据结构研究
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1章 程序设计与敏捷廁发

我们正在通过亲身实践以及帮助他人实践,揭示更好的软件开发方法。

摘自《敏捷软件开发宣言》

1.1 程序设计能力的提高是一个长期的廿序渐进的过程

计算机高等教育的目标是培养具备良好的科学理论研究素养和具有一定的系统开发能力的人才。本科生教育是高等教育的基础,要求学生掌握基本知识、方法和技能,具有学科所要求的基本素质。这就要求我们的学生具有较高的综合素质。但是从目前我国大学生就业后的能力与企业需求的矛盾中可以看出:一方面学生知识的体系结构过于陈旧,跟不上时代、技术的发展;另一方面,学生处理人际关系的本领太差,缺少与他人合作的能力,很难快速融入开发团队,而团队合作精神又是任何一个单位,特别是软件企业积极求胜的一个重要法宝。当前我国软件开发人才短缺,如果只重视理论学习,认为学了一到两门程序设计语言就可以成为软件开发人员的想法不符合高等教育的培养目标。而当前我国高等教育的现状则是偏重理论学习,缺少综合实践环节,课程之间缺少衔接,缺少综合素质与能力的培养。

计算机科学是一门充满挑战和发展机遇的年轻学科,而程序设计则是这门学科的重要基础。近几年来,随着计算机相关技术的发展,计算机课程体系从原来的计算机科学和计算机工程扩大到计算机科学、计算机工程、软件工程、信息系统等多个专业。计算机课程所涉及的学科专业和教学范围正在不断扩大,教学内容和教学过程也发生了日新月异的变化,CC2004、CC2005相继推出,并且成为一个开放的、可扩充的、适合多专业的、整合了计算机教学相关原则体系观点的课程体系指南。因此计算机程序设计基础的教学也应该反映当代计算机科学技术的发展水平,与国际主流计算机教育思想接轨。

1.1.1 面向过程语言的淘汰与面向对象语言的流行

软件开发从本质上讲是对软件所处理的问题域进行正确的认识,并把这种认识正确地描述出来。直接面对问题域中客观存在的事物来进行软件开发,就是面向对象,这也是人们在日常生活中的思维习惯和方法,可以说面向对象方法是软件理论的返璞归真。

面向对象程序设计简称OOP,是Object-Oriented Programming的缩写。面向对象是与面向过程相对而言的。传统的程序设计语言,如C语言,是面向过程的结构化程序设计语言,这种语言在20世纪80年代非常流行。随着软件业的发展,软件的规模越来越大,导致软件的生产、调试、维护越来越困难,因此而发生了软件危机。人们期待着一种效率更高、更容易理解、更符合人类思维习惯的程序设计语言和方法,在这种情况下OOP应运而生。在20世纪90年代,OOP异军突起,成为最有希望和最有活力的程序设计方法。

1.1.2 数据结构课程的变化对程序设计课程教学的影响

培养学生的程序设计能力是计算机专业的基本目标,这种能力的培养需要在基础课与后继课程中逐步实现,同时基础课还要担当为数据结构等后继课程提供语言基础的功能。因此,数据结构课程的变化也会对基础课程的教学产生影响。

数据结构课程是计算机专业的一门核心课程,也要适应面向对象方法的要求,表面的变化表现为教材的变化,各种以过程化语言描述的版本转向用面向对象来描述。更重要的是,在面向对象方法成为软件开发主流的情况下,数据结构课程不论是内容还是地位都将发生重大的变化。设计模式的内容被逐步列入教学大纲,一些新的教材采用面向对象的设计模式,不仅系统全面地介绍各种传统的数据结构,还把它们按照类和类层次的现代理念予以展开,进而达到抽象结构与实际设计的完美统一。

综上所述,新的程序设计基础课应该是能反映变化、适应发展的基础课程。

1.1.3 新时期程序设计基础课的要求

程序设计课程的目标是学习用计算机解决问题的思考方法,培养编程应用能力,而不是仅仅学会某个程序设计语言的语法规则。课程应把最核心的思想方法,即结构化方法和面向对象方法作为教学重点。对于结构化方法以顺序结构、分支结构、循环结构为基础,培养学生的基本程序设计能力;对于面向对象,以对象的抽象性、继承性、多态性和封装性这四个本质特征为基础,学习面向对象程序设计的基本方法。

在此基础上,通过程序设计的学习和对相关的理论进行学习,为进一步学习打好基础。对于计算机的工作原理,则要求理解内存的分配、堆栈的工作原理、数据的表示及处理。要掌握数据类型、数据结构、抽象数据类型、算法及其实现等数据组织的控制理论知识;掌握程序设计方法与理论;了解软件工程的基本知识,培养良好的程序设计风格;了解软件工程的新的方法学、软件生命周期、软件开发过程、软件测试与调试、对象建模及UML等理论,使学生通过学习,不仅培养扎实的程序设计能力,而且建立完整的程序设计知识体系结构。

程序设计能力的培养是一个长期的循序渐进的过程,仅仅依靠一门课程的教学是不可能实现的,应该是通过以语言课为基础并与后继课程相互融合而形成的一个程序设计能力培养体系。一个程序最终要通过程序设计语言的应用来体现,而不同的程序语言决定着不同的程序设计思想方法和技术技巧,制约着程序设计的实现能力和效率。应该通过对多种语言的学习,掌握程序设计语言的本质规律,从而培养学生的自学能力和创新能力。

1.1.4 关于教材建设的思考与探索

教材建设是教学工作的基础建设,没有好的教材,提高教学质量只能是一句空话。在新的形势下,程序设计基础课程改革与教材建设引起了广泛的关注,教师及专家们围绕计算机程序设计课程教学内容如何适应人才培养要求;课程结构和体系如何优化;教学手段和教学方法如何适应信息化时代要求等问题,对原有课程进行了全方位的创新与改进。

1.走出盲目跟新的误区

随着新技术、新工具的不断推出,也给我们的教学带来一些问题,一方面我们的教材跟不上发展,陈旧过时,学生没有学习兴趣;另一方面企业抱怨学生的动手能力差。但如果盲目跟新,在大部分高校当前的教学条件下,学生也只能学到表面的东西。反映在教学内容上,不是进行真正的面向对象程序设计教学,而专注于可视化、基于组件和控件的程序设计。学生的能力得不到提高,与企业期望的差距越来越大。

满足学生与企业零距离就业的要求在一定程度上是很难的,虽然可以通过与企业的合作来逐步解决,但从本质上说,还是要求学生具备自学能力、适应能力、团队合作能力和素质,而不是简单地要求学生学会哪一种工具。

程序设计能力和程序设计思维的培养是程序设计课程教学的最终目的。教师应以系统化的观点制订每门程序设计课程的教学计划,不同课程之间要彼此兼顾,尽量避免课程之间相同知识和类似语句、语法规则的重复讲解;教师在教学过程中要以系统化的程序设计思维培养和软件开发能力为出发点,要学生“抱西瓜”而不是“捡芝麻”,要把教学重点放在系统化的解题思路、算法设计、编程构思和程序实现上。作为一门实践性很强的课程,必须加强案例与实践教学,以提高学生解决实际问题的能力和综合运用知识的能力。

2.合理安排相关课程

在明确课程性质后,笔者重新规划了教学内容,用全部课程的三分之一学时讲解基础理论知识,其余学时则用来让学生进行实践和操作训练。课堂理论教学中,一方面注意精选内容,强调课程核心是以语言为载体的程序设计方法的学习,对基础的语法性知识和一些相关性知识不做过多介绍;另一方面采用案例教学法,如通过开发趣味程序、组织学生完成简单信息管理系统等,提高学生的学习兴趣和动手能力。实验教学中则针对知识的把握程度逐层展开,设计了基础与验证型实验、设计与开发型实验、研究与创新型实验三个层次的计算机案例实验课程。其中,基础与验证型实验涉及课程相关知识点,让学生验证、理解、巩固并掌握基础理论教学中要求的基本教学内容,通过编制上机实践讲义,让学生很快熟悉开发环境,在模仿中不断提高阅读程序能力并设计简单的程序;设计与开发型实验以“任务”或“课题”形式提出实验要求和具体的实验成果,要求学生综合利用所学知识设计、开发并最终完成实验项目,在学生的组织上,有意让学生组成团队,结合最新软件开发思想,培养学生的团队合作能力;研究与创新型实验重在培养学生的研究能力与创新意识,既可由教师设定研究题目,也可由学生自选题目,这类实验可以没有最终结果,但要求学生给出实验分析与研究报告,写出有见解的心得体会。经过几年的教学实践发现,实验教学环节的深化改革确实有利于培养学生的独立工作能力。

3.选择和编写符合课程内容的教材

课程内容的调整客观上对教材建设提出了新的要求,从程序设计课程的体系结构来看,程序设计能力的培养不可能只通过学习一本教材来实现,我们有意在不同的语言类课程中各自设置侧重点,通过几本教材和辅助教材形成一个完整的体系结构。在原来开设PASCAL语言的基础上开设Delphi,重点培养学生的代码编写能力和对结构化程序设计方法的认识。通过C++和JAVA课程的学习,重点培养学生面向对象的思想方法。在数据结构课程中进一步提高学生解决问题的能力,通过对设计模式的学习,使学生具备系统化的面向对象思想,提高学生从简单的代码书写到大系统构架的能力。强调完整的应用系统设计思想的建立,以典型案例为依托,从具体到抽象逐步展开,力求从案例中总结出的原则、方法、经验能反映出程序设计的一般规律,进一步启发学生思路,促进理论学习。通过贯穿始终的大型综合案例、课程设计的教学,让学生从某个知识点开始,一步步经历整个项目开发必经的主要环节,从而在课程结束时能基本掌握整个软件开发的全过程。

我们在课程中以典型案例为主线,实现理论与实践的有效结合,提高学生独立分析问题、解决问题的能力。在今后的教学工作中对这一点还需要进一步提高与完善,特别是为了精选案例,教师应更多地走出校园,参与软件企业的调研与实践,使理论教学和实验教学更加贴近企业的需求。