周晓燕
(苏州外国语学校,江苏苏州 215011)
A-level(General Certificate of Education Advanced Level)课程是英国剑桥考试中心(CIE,Cambridge International Examinations)的金牌课程体系,以其国际权威性为许多国内高中出国班所采用。A-level课程包含70多门科目供学生选择。A-level课程的学制一般为两年,第一年称为AS-Level;第二年称为A2-Level。课程的考核被设置为四次考试,第一年前两次考试通过,获得AS-level证书,第二年再通过后两次考试,获得A-level证书。
我国信息技术课程的相关内容为A-level中的两门课程,涵盖计算机应用(Computing)和应用信息通讯技术(ICT,Applied Information and Communication Technology)。其中Computing课程的内容包括计算机原理、软件应用、计算机编程、数据结构、软件工程、网络、数据库等方面。显然算法与程序设计部分的教学内容对应于Computing课程中的相关内容,同时这部分内容也是Computing课程的重点所在。
Computing课程在使用编程语言方面和中国差别很大,教学大纲中不指定编程语言。与之对应,考试中的相关试题或要求使用伪代码和流程图来描述算法,或由学生使用任意一种自己掌握的语言来做答。教材中,AS-Level部分没有使用具体的语言,A2-Level部分使用 Pascal语言作为范例,但教材中并没有专门的章节来学习Pascal的语法。此外,在大纲相应的教学指导中,不建议选用可视化的编程环境。
事实上,Computing的教学大纲不指定编程语言,并非不做要求。恰恰相反,需要教师帮助学生自主选择,掌握一门甚至多门高级语言。教材中用Pascal的程序作为例子来讲解问题,也并非要求学生一定就要掌握Pascal,相关参考书所使用的语言也并不相同,但可作为参考或自学时用。
Computing课程中,数据结构的内容相对全面且深入,很多算法,例如递归、遍历、排序都是结合特定的数据结构提出和讲解的。内容包括表、链表、栈、队列和(二叉)树。
Computing课程主要讲解瀑布模型,属于软件工程的内容。我国的教材中这部分内容也占了相当的比重,但并没有在考核中体现。而Computing的第四次考核,就是要求学生自己选题,完成一个实际开发项目,考查学生在完成项目过程中的每个步骤并分步评分,程序编写仅占比30%。从Computing教材来看,很多知识点都在这部分内容中详细叙述。例如可行性分析和需求分析、用户界面、接口设计、软件测试的原则和方法等。
特别需要强调的是,在开发过程中,文档写作被尤其看重,也是考核的评分依据,包括分析文档、技术文档、测试文档、开发记录甚至代码注释等方面。
综合教材和大纲要求,Computing课程中和算法与程序设计除了上文涉及的相关内容,还包括如下方面:
a.教材从汇编语言开始讲述计算机语言,然后是高级语言,再到逻辑语言。其中对汇编语言和逻辑语言分别单列一章做了详细的介绍。例如汇编部分,包括处理器的结构、指令格式和寻址方式三个小节,并有多个汇编程序的讲解。
b.通过和面向过程编程方法的对比,讲述面向对象编程。通过程序实例(Pascal)解释类和对象的基本概念。
c.教材结合操作系统,讲述文件系统、I/O控制、内存管理的基础知识。
d.此外,按照大纲的要求,还简单介绍了并行计算、网络计算机等先进技术。
客观地说,中外课程的差别主要是由信息技术课在高中学科体系中的地位不同造成的。Computing虽然是70多门供选择的A-level课程之一,但是一经选定,其地位就相当于高考课程。而现阶段,我国的信息技术课的内容受课时限制,深度取决于会考要求。所以不可能照搬A-level的教学模式。他山之石,可以攻玉,Computing课程的许多做法和经验都能给我们有价值的启示,加以吸收借鉴,并用于教学实践,提升教学效果。笔者在如下三个大方面对自己的教学进行了探索和改进,取得了理想的效果。
对于程序设计中一些重要的原理概念,学生往往由于局限于按部就班地学习一种计算机语言(VB)的编程,对其比较模糊,需要由教师指出并重点讲解。
例如算法和语法的区分。Computing课程在 AS-level阶段脱离具体的编程语,用伪代码或流程图讲算法,这样算法和语法的区分不言自明。但这样的教法在我们的课堂上采用还不现实,笔者在教学中采取了几个变通的措施:①直接讲解算法和语法的分别,并把Computing的教学方法介绍给学生。②尝试对某些知识点 (比如循环或选择)只讲解算法,语法由学生自学。③在分析学生程序错误的时候区分语法错误和算法错误。
再如 “程序=数据结构+算法”这一著名公式所表达的思想。因为我们没有像Computing课程那样系统学习数据结构的内容,所以普遍的情况是学生对数据储存方式在程序中的重要地位不明确。笔者在教学实践中,尝试通过举例来讲解如果数据结构不同则算法不同这一基本概念。例如同样是顺序查找,数据储存为一维数组和二维数组算法上就有区别,前者用一层循环即可,后者需要循环嵌套。
Computing课程内容广泛,这当然需要更多的课时。但如果我们教师仔细挑选内容,认真组织语言,利用少量的课堂时间给学生介绍一些相关知识技术完全可以做到,而这对学生是非常有益的。通过研究,笔者挑选了一些比较重要同时也容易讲清楚的知识点补充给学生。例如可视化编程、机器语言和高级语言 (编译器的作用)、编程方法和操作系统的关系等等。这些知识在Computing课程中都是教材内容,笔者的课堂讲述很大程度上就是对Computing教材内容的重新组织和提炼。
其中,可视化编程的概念笔者觉得尤为重要,因为我们的学生一开始学习语言就是VB的编程环境,他们不知道非可视化编程是个什么样子,甚至没有程序从何处开始(入口)、到何处结束的概念。对此可由教师在课堂上编写运行一个命令行的程序让学生有所认识。
这项工作是模仿了Computing考核的方式,但意义重大。我们是教学生做题目还是做项目,是编代码还是编软件。当然在学习初期都是前者,但后者才是最终的目的。事实上,这项教学实践也对应了我国教课书第五章的内容。这个教学环节,让学生亲自动手所产生的效果和讲解一遍书本差别很大,况且现在很多学校教师对这部分内容是让学生自学的。
笔者在课程后期和学生共同选题,通过任务驱动的教学方法,让学生分组完成一个简单的项目,并借鉴Computing做法,要求学生做好文档记录,并将其和程序编写共同作为评判依据。
虽然很多项目本身非常简单,有的是结合数学物理等课程,编写软件实现一项特定的计算;有的就是模仿我国教材内容,对班级学生的各类信息进行数据采集并做简单处理。“麻雀虽小,五脏俱全”,从需求分析到可行性分析、从方案设计到模块设计、从编程到测试、从软件维护到二次开发,学生只有完整地经历一遍,才能对软件开发的含义有所体会,知道程序的编写在其中起着核心但并非全部的作用。
当然,由于各种局限,一个简单的项目不能说明所有问题,如果有时间,参考 Computing,还可以讲解诸如文档写作的重要性、调试测试工作在项目中的地位、瀑布模型以外其他软件开发模型等问题。
总体而言,Computing课程中算法和编程部分的内容和教学方法与我国相比存在很大区别。“要给学生一滴水,自己要有一桶水”,那么,对A-Level Computing课程的研究和思考,首先就是充实“一桶水”的过程。
更重要的是,如何将思考的成果融入自己的课堂,最终使学生受益。应该说,上文介绍的三个方面还都是初步的尝试,随着课程改革的深入和高中信息技术地位的不断提高,期望能有更多更有益的研究成果和教学创新。