任务驱动型程序设计教学改革探究

前言:寻找写作灵感?中文期刊网用心挑选的任务驱动型程序设计教学改革探究,希望能为您的阅读和创作带来灵感,欢迎大家阅读并分享。

任务驱动型程序设计教学改革探究

摘要:计算思维是信息技术学科的核心素养之一,程序设计的任务是使用计算思维来分析和解决实际问题,而不仅仅是简单的编码。该文在计算思维导向的C语言程序设计教学过程中,提出任务驱动型和知识体系重构的教学方法,来培养学生灵活运用程序设计求解工程问题的能力。

关键词:计算思维;任务驱动;重构;程序设计

近年来,教育界开展了关于“计算思维”能力培养的讨论。当今社会进入了高度信息化的时代,对具备计算思维能力、能熟练运用计算机分析和解决问题的人才需求日趋旺盛。“计算思维”由JeannetteM.Wing教授在2006年提出,其含义是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动[1]。计算思维的本质是抽象和自动化,抽象指的是对求解问题的一种描述,是对问题的表达和推演;自动化是用具体的形式体现计算和结果。作为创新性人才的基本素质和要求之一,计算思维将会彻底改变人们的思维模式。如何培养学生的“计算思维”能力已成为计算机教育界的研究热点[2]。国际上,美国麻省理工大学、斯坦福大学、卡内基梅隆大学、普渡大学等著名高校纷纷设置了面向全校的以问题求解为核心的“计算思维”通识课程,在以“计算思维”为指导的计算机基础教学方面取得了显著的成效。美国国际教育技术协会和美国计算机科学教师联合会制定了一套可操作规范,并在课堂上推广计算思维。近来,Google公司了“计算思维”在线课程,为在不同领域融入计算思维提供了大量极富价值的资源。由我国首批985高校的九所顶尖大学组成的“九校联盟”,于2010年了计算机基础教学发展战略联合声明,强调需要把培养学生的“计算思维”能力作为计算机基础教学的核心任务。哈尔滨工业大学开设的慕课“大学计算机—计算思维导论,为首批国家精品在线开放课程,系统地概览了计算机全领域的知识体系,有助于学生计算思维的培养。清华大学出版社的《C语言程序设计与计算思维》由沈鑫剡等编写,以通俗易懂、循序渐进的方式叙述了C语言语法和程序设计方法,并通过大量的例子加深读者对C语言的理解,培养了学生的计算思维能力。程序设计类课程是计算机相关专业学生的一门必修课,也是非计算机专业普遍选修的课程,主要培养学生利用计算机编程语言解决实际问题的能力。通过广泛调研,虽然“计算思维”的培养已受到国际上很多高校的重视,但在程序设计语言课程的知识结构组织和课堂教学模式方面,各大高校普遍存在着诸多问题,有待进一步探讨。例如,教材内容罗列式安排语法知识,学生读书过程与实践严重脱节;有限的课堂学时不足以介绍清楚语法上小的知识点,一再压缩的课时使得课上经常出现赶进度的现象;一味灌输式的教学,忽视了教学过程中对学生计算思维能力的培养。

1C语言教学与计算思维能力培养

计算思维的抽象和自动化两大特征与C语言求解问题的过程不谋而合。图灵奖获得者、PASCAL之父NiklausWirth于1976年提出“算法+数据结构=程序”。NiklausWirth在CommunicationsofACM上发表的论文《通过逐步求精方式开发程序》(ProgramDevelopmentbyStep-wiseRefinement)中,首次提出了“结构化程序设计”(structureprogramming)的概念。结构化程序设计方法又称为“自顶向下”或“逐步求精”法,在程序设计领域引发了一场革命,而C语言程序设计就是结构化程序设计最典型的体现。我们对待解决的问题进行分析,找出与问题相关因素的功能过程和系统特征,建立数学模型。其中功能过程可以使用C语言中的函数或函数之间的调用关系来实现,这也是算法的设计过程。系统特征抽象为C语言中的变量或常量来表示,它们的取值范围和操作即构成系统的数据结构。我们知道,与数学抽象相比,计算思维的抽象更加丰富和复杂。数学抽象的特点是抛开现实事物的物理、化学和生物等特性,仅保留其量的关系和空间的形式,而计算思维中的抽象却不仅仅如此。计算思维强调运用计算机科学进行问题求解,因此第一步是对待解决问题的抽象,即基于任务的教学过程。首先提出待完成的任务,根据任务的实际需要引导学生思考需要建立的数学模型,进而确定解决问题所需构造的操作对象及必要的功能过程(即算法)。然后,联系C语言程序中的语法特征,引出必要的知识点,编写自动执行的程序,实现从现实问题到信息世界的转换。可见,C语言程序设计的教学过程恰好对应计算思维的抽象特征。

2任务驱动型教学模式

在计算思维导向的教学过程中,我们不再以罗列介绍C语言的语法知识作为教学主线,而是设定不同的任务导向教学,这就需要对课程的总体知识结构做出大刀阔斧的梳理。传统教学中按照知识点的类别进行讲授,如数据类型部分,首先介绍了五种基本数据类型,再介绍数组、指针、枚举、结构体和联合等复杂数据类型。这种讲授方式花费了大量的课时灌输给学生基本的语法知识,教学效果较差。整合传统教学内容后,采用知识体系重构的任务导向型教学模式,使学生尽快进入编程模式,概览全局,培养学生的思维能力。根据科研和教学经验,针对程序设计的语法知识,构造并提出任务,引导学生思考并分析解决思路。下面举例说明课程中部分重构后的知识结构:(1)开门见山,先见森林后见树木,激发学生的学习兴趣。传统教学往往在课程初期介绍简单知识,在后期循序渐进地让学生认识和编写复杂的程序。我们将课程倒置,首先制造悬念。如日历是学生在生活中每天都需要使用到的,将其作为学生感兴趣的较复杂程序,在第一节课时就引入。兴趣是最好的老师,对于从未接触过程序的新生来讲,看到一些程序代码点击运行就可以任意输出某年的日历,对他们具有很大的吸引力,大大提升了学生学习的积极性和自信心。同时,学生也会产生极大的悬念感,进而思考:程序设计功能如此强大,怎样才能写出这一行行代码呢?在此基础上,为了使学生容易接受知识,后续我们设置部分较简单的小任务来对基本知识进行引导讲授。(2)小任务驱动知识点的讲授。认识了程序设计的强大功能后,设计一些小任务来逐渐引导学生学习。如传统教学中,在课程前期往往集中介绍数据类型和运算符,而学生此时对C语言编程还没有全局的概念,更无从感受这些语法与解决问题的程序整体之间的关系。复杂数据类型中,机械性地讲解数组和指针,学生听起来也有一定难度,更无法掌握其在实际中的具体用法。学生被动地学习,造成难以区分这些类型和运算,再往后真正需要用到时又印象不深刻。新的教学模式中,将数据类型等小知识点融入具体问题的解决中,不再集中介绍各种数据类型,而是根据解决问题的需要,逐个引出。如求圆的面积和周长,求解公式中涉及半径的表示、圆周率、乘法运算以及计算结果的存储。学生自然能够想到,用整数或浮点数表示半径,即讲整型和浮点型两类;涉及半径、面积和周长的存储,需要介绍变量的定义,即申请内存空间;计算过程中需要乘法和赋值运算,讲解部分运算符。基本问题解决后,可以对程序进行进一步优化,如程序中的圆周率重复出现多次,可以将圆周率定义成符号常量,还可以定义宏来代替。至此,设计的小任务中我们自然地穿插了部分数据类型、变量、运算符、常量和宏定义等基本知识。学生不仅印象深刻,在听课时也兴趣浓厚,知道为什么讲,怎么用,且与计算思维解决问题的思路一致。关于数组和指针,我们设计一个任务:求全班和全年级的高级语言程序设计课程的平均成绩,逐步引导数组和指针概念的建立,不仅能使学生自然产生新的数据类型需求,同时也锻炼了他们的计算思维能力,促使他们能够将学到的具体知识用于解决实际问题。显然,任务驱动型教学模式不仅有利于学生程序设计能力的提升,同时也锻炼了学生的计算思维能力,能在学习周期内提高学生分析和解决实际问题的能力。

作者:李整 单位:华北电力大学(保定)计算机系