高中阶段面向计算思维的编程教学模式的实践与思考

    贾金元 武小龙

    

    摘? 要 阐述计算思维的内涵,对面向计算思维的高中编程培养教学模式及教学案例进行分析,给出面向计算思维的高中编程培养路径;通过让学生了解和掌握编程知识和基本的C++语言算法,提高学生的信息素养,有效培养学生的计算思维。

    关键词 计算思维;C++;编程教学;信息技术;校本课程;任务驱动

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

    文章编号:1671-489X(2020)03-0106-03

    1 前言

    随着大数据时代的到来,计算思维作为一种解决问题、设计系统、理解人类行为的综合思维模式,受到社会各界的关注,对计算思维的培养和探索也成为当前基础教育关注的热点。教育部发布的《关于全面深化课程改革 落实立德树人根本任务的意见》指出,信息网络技术突飞猛进,时代和社会发展需要进一步提高国民的综合素质,培养创新人才[1]。从教育部在2018年颁布的信息技术新课程标准中可以看到,信息技术课程从内容上已大幅减少基本软件的教授,而是紧跟信息技术的发展,提出要培养学生的信息意识、计算思维、数字化学习与创新及信息社会责任,同时开设人工智能、开源硬件、3D打印等选修课程。

    在高中阶段开展编程教育,培养计算思维,在各大重点高中相对比较受重视,这从每年参加NOIP的人数和进入国家集训队的数量上就可以看出来。高中阶段学习C++语言,基本是以校本课程的形式存在,学生大部分是准备去参加信息学竞赛。目前市面上的教材可大体分为两类:一类是专门供程序员学习的语法参考书,教授程序设计思想;另一类是侧重于信息学竞赛的教材。大部分所选编程实例用于语法规则的验证和偏重于数学知识方面,兩者之间没有很好地衔接。高中生由于数学基础较薄弱,往往吃不透、用不活,知道语法规则但是无法解决问题,究其原因是教学过程中不关注计算思维的培养。

    基于此,笔者提出在高中开设编程课程,一方面可以教给学生基础程序设计语言的语法知识,另一方面可帮助学生提高算法设计能力。

    2 相关概念

    计算思维? 2006年,美国卡内基·梅隆大学的周以真教授在Communications of the ACM杂志上首次提出计算思维的概念。他认为计算思维是运用计算机科学的基础概念,求解问题、设计系统和理解人类行为的一系列思维活动,其本质是抽象和自动化[2]。2012年,美国麻省理工学院媒体实验室提出计算思维的三维框架,包括计算概念、计算实践和计算观念三个维度,引发了计算思维实践层面的研究和评价[3]。因此,高中阶段对学有余力的学生进行C++编程教学,具体要从培养学生问题求解思路、创新思维和对问题的形式化描述上入手。

    编程教学? 为什么要选择C++作为编程教学的语言?因为C++语言更接近于底层,语法虽然比较复杂,但对于已初步具备高阶思维的高中生而言,C++学习可以为将来以后的语言(Python、Java等)学习打下良好的基础;通过编程教学,逐步领会算法在程序设计中的重要作用。培养学生计算思维的目的是让学生养成以计算思维的角度来思考并解决问题,可以采用多种方式培养学生的计算思维能力。

    在传统的教学模式中,教师会先讲授基本语法,然后让学生通过上机进行相关知识点的练习;学生往往感到学习难度较大,难以入门,甚至导致丧失学习的积极性,不利于培养自主学习和自主思维能力。用计算思维的理念重新审视编程教学,利用现有的课程,让学生掌握程序设计背后蕴含的计算思维。编程教学的最终目的是让学生掌握解决现实生活中真实问题的方法,编程能力则是计算思维和能力运用的综合体现。

    3 面向计算思维的高中编程教学模式及教学案例分析

    计算思维教学模式流程图如图1所示。面向计算思维的高中编程教学模式的教学流程及任务设计主要包括课堂教学环节及各环节教学任务设计两部分。高中阶段开设C++校本课程,对训练学生计算思维很有帮助。在教学过程中,通过设计案例,采用任务驱动式教学方法,让学生发现问

    题;在讲授的时候把算法与计算思维紧密结合起来,给学生讲清楚实际问题中蕴含的计算思维及算法。比如利用栈的数据结构来处理车厢调度问题,利用弗洛伊德算法解决最短路径问题等,把计算思维融入解决实际生活问题的过程中,让学生不再是从理论上学习,而是更多地将注意力集中在分解问题和解决问题的过程中,并结合数学学科知识如数论、图论等进行学习。

    教学内容? C++程序中的for语句和while语句。

    教学目标? 了解循环的概念,理解为什么循环是编程中的一种重要控制结构;学习如何使用C++中的for和while语句来编写循环,以及每一个语句类型的使用时机,掌握常用的循环模式;找出循环规律并设计算法,利用循环语句解决实际程序问题,进一步训练逻辑思维、计算思维能力。

    教学设计

    1)课程导入。带领学生回顾上一节课学习的选择结构程序设计,在猜商品价格的游戏案例中,利用if语句实现判断猜测数字是大了、小了还是对了,和学生一起,边讲边写出利用if语句的猜数字程序。但是程序只能猜一次就结束,如果想重复猜测该数字,直到猜对价格为止,用程序如何实现呢?

    2)介绍循环的概念,循环其实就是需要有限次重复执行的程序段,如日夜更迭、四季交替等大自然中的循环。以操场上一圈一圈跑步为例,引导学生写出程序(略)。

    3)分步点评学生写出的程序,分析for语句循环示例,找出循环的规律和要素。

    4)重点讲解while语句的语法结构,让学生明白,编写循环语句,类似做填空题,要把循环要素填到相应的位置。在程序演示环境下,逐步找出循环体,结合while语句语法,写出下面程序,设置while的循环条件为空,让学生来填:

    #include

    using namespace std;

    int main()

    {

    int truePrice,caiPrice=0,i=0;

    cout<<”请输入一个数,这个数字是商品的真实价格”<

    cin>>truePrice;

    cout<<”请输入你猜的数”<

    while(让学生来填)

    {

    i++;

    cout<<”参与者”;

    cin>>caiPrice;

    if(caiPrice>truePrice)

    {

    cout<<”大了”<

    }

    else if(caiPrice

    {

    cout<<”小了”<

    }

    else

    {

    cout<<”恭喜你,猜对了,共猜了”<

    endl;

    }

    }

    return 0;

    }

    通过猜商品价格,可以激发学生的学习兴趣,让他们有种跃跃欲试的感觉,最终得出答案,循环条件是:truePrice!=caiPrice。

    5)引導反思:如果每人最多可以猜7次,超过就算输,如何修改程序?

    4 面向计算思维的高中编程培养路径

    创设情境,分层教学? 在教学过程中,针对有些比较难掌握的概念,教师可以创设情境、分层教学。比如有个关于循环语句的训练题:假设所有的灯都是关着的,编号为1的人走过来,把是1的倍数的灯全部打开;编号为2的人把是2的倍数的灯全部关上;编号为3的人又把是3的倍数的灯开的关上,关的开起来……直到第N个人为止。现在问:如果给定一个数N,那么在N轮之后,还有哪些灯是开着的?

    这样的题目让很多学生感到无从下手,因为如果N是个位数,还可以手动算,教师可以让10个学生手拉手排成一排,模拟这个算法的运行。编号为i的灯只会被它的约数所操作,而它最后是开着的,所以说一定被操作了奇数次。只有一个数是完全平方数,其约数才是奇数,所以只要输出i到N中的完全平方数就可以。通过这样的教学,部分学习程度较好的学生已经可以写出来,然后让这几个学生讲解一下算法,全班进行点评。

    加大对实验程序调试的指导力度? 编程教学最重要的是能够上机并调试出正确的程序。因此,要指导学生切勿眼高手低,在刚开始学习的时候一定要多上机,只有通过上机,才能发现问题。比如对于小数点位数的输出,C和C++输出语句不同,都可能导致程序调试不通过。因此,对实验内容进行分组,设立基本组、提高组,利用一些在线OJ网站,让学生多做题。一方面,教师可以实时观察到学生的进度;另一方面,这些网站上有相应的题解,学生可以实时进行对比和分析。

    思维风暴,多种解题方法汇聚? 问题的解决方法有多种,笔者在教学中发现,对于同一个题目,往往有很多种算法可以实现。比如“最大公约数”的问题,就有枚举法、辗转相除法、辗转相减法等多种解法。通过一题多解,可以开拓学生思路,引导学生积极进行算法求解,使学生印象深刻,豁然开朗。

    创新课堂教学? 每个学生都是学习的主人。笔者所在的班级每周都有一个学生课堂,就是学生选择一个自己学习过的最拿手的算法进行讲解。这样既促进了学生对算法的理解,也加深了其他学生的认识,在讲授的过程中还可以发现问题。比如递归算法的基本思想是什么?实际上就是把规模大的、难解决的问题变成规模小的、容易解决的同一问题,规模较小的问题又变成规模更小的问题,当问题小到一定程度时,可以直接得出它的解,从而得到原来问题的解。

    5 结语

    “人工智能+教育”时代背景下,计算思维的重要性日益凸显。如何在信息技术教学中培养学生的计算思维,使学生具备数字化时代的创新素养,是信息技术教师面临的重大课题。本文就在高中开设C++编程教学的特点和目前普遍存在的问题展开论述,提出把计算思维融入整个教学环节,通过实际教学,效果良好。在高中开展面向计算思维的编程教学,可以为高中生提供一个与大学课程衔接的机会,也可以进一步推动信息技术与课程教学的深度融合。因此,在高中阶段推广编程教学、研究编程教育意义重大。

    参考文献

    [1]教育部关于全面深化课程改革 落实立德树人根本任务的意见[EB/OL].http://old.moe.gov.cn/publicfiles/business/htmlfiles/moe/s7054/201404/167226.html.

    [2]Wing J M. Computational Thinking[J].Communicationsof the ACM,2006(3):33-35.

    [3]Brennan K, Resnick M. New frameworks for studying and assessing the development of computational thin-king[M]//Vancouver, Canada: Proceedings of the 2012 Annual Meeting of the American Educational Research Association.2012:1-25.

相关文章!
  • 高等教育人工智能应用研究综述

    奥拉夫·扎瓦克奇-里克特 维多利亚·艾琳·马林【摘要】多种国际报告显示教育人工智能是当前教育技术新兴领域之一。虽然教育人工智能已有约

  • 打造中学语文与物理学科融合的

    肖惠珠 吴钟成摘 要:探讨中学语文和物理学科,如何打破学科之间的壁垒,进行学科之间的融合,从而提升教育效能,更好地发展学生的思维,培

  • 贯彻核心素养,激活语文课堂

    姜俞红【摘 要】随着新课改的深入,高中语文教学迎来全新的挑战,传统“以考定教”的教学方式已经不适用,核心素养引领下的教学课堂成为素质