APP下载

程序设计教学中培养中学生计算思维的实践与思考

2015-07-02梁健

科技资讯 2015年7期
关键词:计算思维程序设计算法

梁健

摘 要:近年来,随着对中小学信息技术学科目标和价值的讨论逐步深入,越来越多教师、学者认为,在中小学信息技术课程中,应普及计算思维能力的培养。计算思维的本质在于抽象,既将实际问题,以清晰的方式进行描述,因而,程序设计的学习,无疑最能体现计算机学科的思维方式。该文针对中学生计算思维培养的教学实践,从程序设计与计算思维的关系出发,如何从程序设计的内容编排、教学目标及评价中体现计算思维的核心价值等方面进行了分析与阐述。

关键词:程序设计 计算思维 算法 问题求解

中图分类号:G642 文献标识码:A 文章编号:1672-3791(2015)03(a)-0175-02

在中学信息技术课程中,程序设计是重要的教学内容之一。教育部制订的《普通高中信息技术课程标准(实验)》中把“算法与程序设计”作为独立的选修模块,而初中阶段现在虽然还没有国家层面的课程标准,但不少省市、地区的初中教材也纳入了程序设计的内容,例如广州市教材有VB程序设计。它们都是从提高学生信息素养的角度出发,培养学生的逻辑思维能力,以及严谨、全面的思维习惯。

2004年实施的《普通高中信息技术课程标准(实验)》提出要提高学生的信息素养,培养学生使用信息技术解决问题的能力[1]。该观点的提出,指明了中小学信息技术的教学的方向。而现今大数据、云计算、智能便携设备等新兴技术的发展,令人与信息技术工具的关系更加密切、和谐,信息的加工、处理也更方便简单,对以提高信息素养为基本目标的中学信息技术教学带来了新发展机遇和要求。

1 程序设计与计算思维

程序设计是计算机科学的灵魂,正是由程序设计语言编写的各种软件,赋予了计算机协助人类解决问题的能力。冯·诺依曼提出的体系结构和“储存程序”思想,一直影响至今。无论计算机硬件的发展如何改变,它们都是使用预先设计好的程序解决特定的问题。纵观整个计算机科学发展的历史,每一种新技术、新思维的诞生,几乎都伴随着程序设计语言的发展创新。例如在二十世纪九十年代,为解决电视机、闹钟、电话等家用电器出现而带来的控制和通讯问题,诞生了Oak语言;而随着互联网的发展,Sun公司改造了Oak,诞生了JAVA;贝尔实验室的Denis Ritchie改善了专为编写系统软件而设的B语言,使之可以直接生成机器代码,并改名为C语言;为了适应“云计算”时代的新要求,苹果公司发布了用于IOS和OS X编程swift语言……[2]。

上述的例子可以看出:每一种程序语言的发展,都是计算机科学家们在不同时代背景,从不同的应用角度下思考得出的结果。但即使如此,程序设计的核心还是算法的设计,而基础的算法,仍然离不开枚举、递归和分治;程序的实现,离不开把数学模型转化为计算机模型。因此,为了解计算机科学,需要先了解计算机科学家们的思考方式,因此也需要重视程序设计的学习。

为回答计算机科学知识与人类的关系,2006年3月,美国卡内基梅隆大学计算机科学系主任周以真教授率先给出并定义了“计算思维”(Computational Thinking)的概念。她认为:计算思维是思维过程参与制定问题,并给出它的解决方案,在一台电脑上以人或机器的方式就可有效地开展。简单地说,计算思维能力就是像一个计算机科学家一样思考的思维能力。计算思维的本质是抽象和自动化,其实质是“能行、构造、模拟”[3],即是通过概括抽象问题、建立问题模型、设计算法解决问题的过程。而计算思维的关键,就是通过用计算机模拟现实世界,帮助解决人类问题[4]。

理论思维、实验思维和计算思维是作为科学思维的方式,共同构成了人类的三大思维。计算思维作不一种早已存在的思维活动,它的出现并不能简单地认为是一种新的发明,而是,是每一名普通人应该具备的一种技能。因而,在中学信息技术教学中,可以说计算思维是无处不在。在中学信息技术课程中明确地提出“计算思维”,关键是要学生将无意识的计算思维变成有意识的计算思维,主动地用计算思维去解决问题,应用在各自的专业中。同时,还可以让更多的中学生能够主动地、习惯地找到利用计算机解决问题的办法,并且形成主动使用计算机解决问题的思维能力。因此,计算思维除了能解答现时信息技术课程的困惑外,还对课程的内涵,学生的学习目标提出了更深刻的要求。我们也需要认识到,计算思维与算法思维是有区别的。计算思维应该成为中学生具备的基本能力,因为在可以预见的未来,更多的创新、更多的生活上变革都会来自于计算思维,计算思维将成为青年人立足社会、生存与发展的重要能力。而算法思维只是计算思维的一种,掌握计算思维不应只学习编程,还要学习在多个层次的抽象思维[5],但是学生可以透过学习编程较好地理解和掌握计算思维。

2 以计算思维为核心的程序设计教学

2.1 教学内容的调整

为达成总体的教学目标,程序设计的教学内容需要得到扩充。在初中阶段,学生应该能理解程序设计的基本思想、基本方法和程序设计三种基本结构,了解一维数组的使用及枚举算法的作用。高中阶段,结合《数学》课本中《算法初步》的内容,学生应在理解流程图的基础上,写出辗转相除、冒泡排序、直接排序、进制转换等相对抽象的程序代码,具备在一定编程环境中调试程序的能力。在学习选修模块方面,学生应能了解子程序的作用、了解递归的概念和使用方法。对于力所能及的学生,应能编写更多的能模拟实际问题的程序代码。

在教学内容的编排上,应该抛弃以往以知识点为主线编排内容的办法,而是以一个个互相联系又可以独立的问题序列,引导学生分析、模拟、解决问题。下面以“小明的网店”为线索为例说明。

项目一:初开网店。

问题概括:小明为帮助家乡的果农打开销路,在网上开启了一间网店;项目要求:假定网站暂时只卖一种水果,设定水果的单价,及每笔运费,根据购买者输入的数量计算出每笔购买的费用。教师引导学生把水果的价格、数量、运费、总价抽象成变量数据;使用输入输出语句及表达式处理相关信息(变量数据);最后引导学生理解变量、输入输出及表达式的概念。

项目二:遭遇竞争。

问题概括:同类型的网店,向消费者做出买满150元打九折和买满100元免运费的促销活动。从这个项目开始,要求学生分小组根据自己过往的经验,提出应对的办法。这种情况下学生通常提出这样的方法:(1)做出同样的促销活动;(2)为避免恶性竞争,应该在不亏本的情况下,进行价格竞争。教师由此引导学生找出项目二与项目一的区别,建立分支结构模型,让学生观察流程图,比较输入输出的数据,理解逻辑表达式的作用;使用分支语句及逻辑表达式处理相关信息,加深对程序逻辑思维的理解。

项目三:筹划未来。

问题概括:经历一次价格竞争,网店坚持下来,小明需要为网店的未来发展筹划;经过学生小组讨论,学生大概会提出增加销售种类、控制成本、广告宣传等方法。教师应鼓励学生的各种想法,并把一些简单可行的想法设计成计算机可以执行的程序,例如控制成本和广告宣传的方法。我们可以给予学生各种成本的数据,包括人员平均薪酬,每月水、电费,水果的成本,一次性投资(购买电脑和网店保证金)等等;也可以给出水果售价和手机平台推送消息对销售情况影响的数据,例如按月计算售价每降低10%,就会提高15%的销售额,每月使用成本的10%做微信推送费,可以提高12%的销售额等等。然后引导学生从这些问题中,提取出(抽象)出相应的数学模型,形成变量、表达式和运算结构,先是要求学生计算最低售价和回本时间,制作一个计算水果最低售价的软件及有关宣传及利润关系的计算程序,并生成可执行文件,代替人工计算。在这个项目中,开始体现计算对现代生活的重要性,重点是让学生开始完整地体会使用计算思维的全过程,即“能行—抽象—模拟—设计—自动化”的过程,并且了解在信息时代,数据和信息也是重要的资产和财富。

项目四:挖掘信息;问题概括:网店已经运营了一年,掌握了大量信息,例如客户的购买情况,“粉丝”的数量,好评率等等。我们应该如何运用这些信息?仍然要求学生先自行寻找方案,引导学生把一些可行的想法设计成计算机可以执行的程序。例如:(1)分析每天的购买情况,得出每个时段的购买情况,从而安排“店小二”的上班时间;(2)遍历一遍所有“粉丝”,找出“大客户”,安排人员跟踪服务;(3)根据四个季节种类水果的销售情况和仓库容量,设计出可行的每种水果的最小库存量和最大库存量;(4)根据“粉丝”数量和销售情况,计算出每产生一位“粉丝”所需的成本,和“粉丝”每日的购买率,定出未来发展蓝图。继续从“能行—抽象—模拟—设计—自动化”的过程引导学生解决这些问题,从而让学生学习循环结构、枚举法、辗转相除法(最大公约数、最小公倍数)的使用。项目四的重点是引导学生体会通过计算思维加工信息,可以创造出新的价值。

以上的每一个项目都是较为开放的主题内容,学生根据老师的引导,把问题模型抽象成算法描述,然后形成程序达到自动化,通过计算思维体会从“具体—抽象—具体”的过程[6],深切体会到计算机学科独特的思维对社会生产带来不可替代的贡献。

2.2 教学方式的调整

以皮亚杰为代表的心理学家认为:思维是不可直接教的[7],而需要在生活中领悟和积累。而计算思维则是解决问题的思维方法,信息处理的过程即利用计算机特点求解问题的过程[8]。

由此可见,以编程为载体的计算思维教学不应再着重传授知识点和处理信息的方法,而应以问题为引导展开教学线索,并以问题的解决最终目的,让学生多参与实践活动,通过判断和推理找到有效的思维方法,从而理解计算机学科独特的思维方式,理解计算思维对信息时代科技革新的推动作用,形成学习计算机科学创造美好生活的愿望。

2.3 教学实践的反思

程序设计的必经阶段包含调试编译。而计算思维中也有使用容错、纠错的方式帮助保护系统和编译,它们都有从时间、空间的消耗考虑,提出更高效算法的要求,其目标都是使解决方案或程序以螺旋上升的状态不断完善。同样地,以计算思维为核心的程序设计教学也需要呈现这种过程,只是对象变成了教学的主体——学生。及时地反馈和评价可以帮助我们实现这个过程。评价可以在教学的各个阶段发生,评价的实施者可以是老师,也可以是小组;可以是量性客观评价(例如程序的时间、空间复杂度),也可以是主观评价(例如是代码的易读性、创造性和友好的界面等等)。这些评价都在促进螺旋上升的过程,帮助学生在良好的科学探索气氛下得到更全面的发展。

调整后的学习内容是由几个开放的结构单元组成,学生除了学习程序设计知识外,也要从中形成解决方案。他们可以使用不同的数据结构、算法,编写不同的程序代码;也可以从不同的角度,用不同的观点形成解决方案。教师要鼓励学生们存在不同的认知,不同的观点,鼓励思维的多样性[9]。

3 结语

虽然学习程序设计不是培养计算思维的唯一途径,但是作为计算机科学最本源的一门课程,它的诸多理念、思维和算法仍然是现代科技发展的基础,并没有随着时代发展而被抛弃。中学生可以在学习程序设计的过程中,理解计算思维的本质和内涵,为终身发展打下坚实的基础。

参考文献

[1] 普通高中信息技术课程标准(实验)[M].北京:人民教育出版社,2003:5-8.

[2] 张爱香.计算机语言发展历程综述[J].中国科技信息,2013(24):18-19.

[3] 刘向永.计算思维改变信息技术课程[J].中国信息技术教育,2013(6):5-12.

[4] 杨俊生,张润.基于计算思维的C程序设计案例设计初探[J].工业和信息化教育,2013(6):65-69.

[5] 李廉.计算思维—概念与挑战[J].中国大学教育,2012(1):7-9.

[6] 王荣良.计算思维教育[M].上海:上海科技大学出版社,2014:67-71.

[7] Gerd Mietzel,张凤凤,金建,等.心理学入门[M].北京:中央编译出版社,2011:341-343.

[8] 贺完香,史宝明.渐进式PBL高效建立编程思维[J].现代计算机,2013(2):37-39.

[9] 丁金凤.基于计算思维的程序设计类课程教学实践[J].计算机教育,2012(12):65-68.

猜你喜欢

计算思维程序设计算法
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
Travellng thg World Full—time for Rree
学习算法的“三种境界”
算法框图的补全
算法初步知识盘点
程序设计课程中计算思维和应用能力培养问题研究
民族高校C语言程序设计课程教学改革的研究