情境式任务驱动:算法与程序设计教学策略的研究

发表时间:2021/8/3   来源:《中小学教育》2021年4月第10期   作者:何雪莲
[导读] 农村普通高中的学生对算法与程序设计模块的学习存在较多问题

        何雪莲
        浙江省严州中学新安江校区 浙江 严州 311600
        [摘要]农村普通高中的学生对算法与程序设计模块的学习存在较多问题。笔者从内因与外因两个维度去深入剖析形成的根源,并设计一系列情境问题,以简单、连贯的小程序进行任务驱动教学,培养学生学习兴趣,提升算法思维。
[关键词]任务驱动  算法思维  教学策略
一、问题提出
        (一)学生学习存在短板
        算法与程序设计的学习需要学生在理解的基础上,不断思考、认真钻研,分析问题,建立数模,寻求算法,通过程序的编写和调试解决问题,享受这一系列的思维过程,获取成就感,最终达到算法思维的提升。大多数学生面对书本和参考资料中枯燥无味的程序结构,隐晦难懂的程序代码,很难提起学习兴趣,也就不会集中精神,认真听讲,仔细思考了。
        对于选考的学生来说,由于前期学习过程中就没有打下较为扎实的程序设计基础,在后续选考内容的学习中,就会非常困难,特别是涉及到较为复杂的双重循环算法以及不断变式的查找和排序算法,从算法的理解到程序的阅读,几乎无所适从。跟不上课堂节奏,听不懂课堂内容,久而久之失去信心,进而影响通用技术学科的学习,导致恶性循环。
        (二)教师教学重心偏移
        忽略学生上机操作的重要性。通过交流了解到,大多数信息技术教师在算法与程序设计的教学过程中,由于课时及笔试等因素,极大程度缩减原有的上机实践课时,而增加理论教学和习题讲解的比重。
        过于注重知识点的教学。不考虑提升学生算法思维能力是该模块教学的核心,一味地通过“讲练结合”的方式来巩固知识点,过于强调解题技巧和解题方法,忽略对学生进行算法思维的培养和提升,把学生培养成只会做题的机器,有违信息技术学科的核心素养。
二、原因分析
(一)内因
        1.动手能力薄弱
        动手能力就是将理论知识运用到实践中的能力。当前中小学的教育主要以学科理论教学为主,培养学生对理论知识的掌握能力,评价方式也主要都是笔试,从而忽略了学生动手实践能力的培养,初中升高中的考试中虽然加入了信息技术学科,但主要还是考察学生理论知识的掌握程度,以及简单的操作界面复现,程序设计模块仅仅只是掌握流程图的结构与绘画。直接导致学生以文科记忆的方式来学习信息技术,忽略了动手实践能力的培养。
        2.过度依赖教师
        依赖是青少年成长时期的一个必然的心理现象,正是这种依赖性,使青少年得以不断地与外界相互作用,依赖环境的力量,不断进行着身心成长的建构。学生正处于心理、生理成长期。在成长过程中,时常会出现依赖家长、老师的现象。有的孩子因为缺乏自信,意志较弱,过度依赖,特别是在上机实践课的时候,课堂作业完全复现教师的演示过程,只要稍加变化就无法顺利完成学习任务。
        3.缺乏探究精神
        在信息技术学科的学习过程中,会有很多因素导致最终操作失败,也会有很多的按钮连老师都不知道是用来干什么的,这就需要我们有探究的精神,去为自己寻找答案,“新课改”中明确指出培养学生的探究合作能力,在平时灌输式教学方式下,学生已经基本缺乏探究能力,发现问题首先是向老师求助,而不是自己先去思考为什么会出现这样的问题,怎么样去解决这个问题。
        问卷调查显示,47%的学生在操作出错后,最常用的处理办法是重新做,30%以上的学生出错后先向同学或老师求助,在采样调查中,笔者每班随机抽取了3名学生进行交流。
        没有人告诉我要怎么做我就不会了:高二(4)班王某,在上机实践课中,偶尔完成课堂作业,上课过程中并不太能跟得上老师的教学节奏,时而会开小差,等到自己操作的时候,就会有点脱节,需要依靠同桌同学的帮助,来弥补这些脱节的问题。
        跟着做,我也不知道为什么要这样做:高二(9)班张某,在上机实践课中几乎都能完成课堂作业,他的小窍门就是上课记录下老师的课堂演示,等到自己操作的时候,按照记录下的步骤完成。
        (二)外因
        1.学科重视程度不够
        目前我市中考虽然加入了信息技术学科,但分值只有10分,很多家长、学生认为,这10分的分数已经可以忽略不计了。“7选3”新高考政策下的信息技术也只占了50分,与通用技术合成技术学科,参与选考,从家长到学生、从学校到老师对该学科的重视程度远不及同等选考科目,目前我省许多学校高中信息技术、通用技术教师紧缺,很多通用技术教师都是由学校其他学科教师担任或者聘请校外代课教师,由于师资紧张,高一的学生每周分别只有一节信息技术和通用技术课程,让学生也产生了副课的错觉。
        2.教学导向性偏差
        如前所述,不少信息技术教师,在学科整体的教学过程中,考虑课时及笔试因素,忽略学生上机操作的重要性,缩减上机实践课时,增加理论教学和习题讲解的比重。教学导向偏差,其教学完全还是应试教学。大多信息技术教师,对考试大纲条目解读,考试题型和命题规律都有了非常深入地研究,因此在教学过程中以及回答学生的提问时会参考这些规则和经验。我们经常会听到“这个点不在考试范围内,不用去管”这样的语句,而很少听到“这个按钮老师也不知道,你可以去网上查一查,学会了来教老师,它是干什么用的”这种激励性的语言,久而久之学生的学习积极性以及探究精神慢慢消失。
        基于这些方面的因素,笔者在“算法与程序设计的教学”中采用了“情景式任务驱动”教学模式开展课堂教学,收到了很好的教学效果。
三、“情境式任务驱动”课堂形式的实施过程
        (一)学习兴趣培养:情境教学
        课堂教学是学生学习知识的重要组成部分,在教学过程中不但能够落实学科知识点,更是培养学生学习兴趣,激发学生学习欲望的前沿阵地,
        笔者根据目前放开二胎政策虚拟出一个读小学的熊孩子为学生的弟弟小弘,小弘近期在做加法数学题的时候,经常会出错,通过我们学习的VB程序设计语言,为小弘制作一个加法训练的程序,来提高小弘的加法计算能力。
        程序要求:随机生成两个一位数的数字,并显示在TextBox控件内,根据输入的结果判断对错,并将判断结果显示在Label控件中
        设置此情境的目的就是很多的学生正好有这么一个弟弟或者是妹妹,比较容易带入此情境,果然在接下来的授课过程中,学生的上课专注度有所提高,简单地讲解了Label和TextBox控件之后,学生很快就把程序界面设计好了。
        然后讲解了Rnd()函数的用法后就演示了具体的编程过程,演示完成后,只需要把代码中的核心语句显示,并注解在大屏幕上即可。
        随后几节课的课堂教学围绕小学生加法训练这一主题,笔者列举出小弘数学学习上的需求和熊孩子各种“偷奸耍滑”的手段,学生针对这些需求不断修改程序,并不断想出各种招数来整治小弘。
        第二节课的情境设计:
        小弘已经对个位数的加法做得很熟练了,现在进阶两位数的加法训练。
        (巩固Rnd()函数的应用)
        小弘两位数的加法训练错误率比较高,需要查看做错的题目。
        (ListBox控件的使用)
        我们让小弘把做错的题目再重做一遍。
        (数组变量的定义和应用)
        课情境设计:
        小弘通过训练提高很快,并且有一点膨胀了,在无人监管的情况下偷偷地玩游戏了。(加入新的变量,累计做题总数)
        小弘为了达到做题总量,乱做题目。
        (加入新的变量,计算并输出正确率)
        课情境设计:
        小弘觉得自己已经很厉害了,我们需要对小弘进行测试。
        (Timer控件的使用)
        (二)动手能力提高:程序设计
        在经过第一阶段的学习后,学生对VB程序设计的界面和控件都有了一定程度的了解,并基本都能运用,这一阶段的学习重点在于提高学生的动手实践能力,同时渗透算法思维的培养过程,让学生能够寻求多种算法来解决实际问题,同样伴随着小弘的情境设置来完成课堂教学。


        小弘通过一系列的运算练习中成绩提高很快,老师让他参加了奥数培训班,于是新的挑战又来临了,今天数学老师布置了一个百钱买百鸡问题,要求每个同学至少想出三种以上的方案,这可难倒了小弘,于是他只有向各位哥哥姐姐求助,
        题目:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,现有100文钱要买100只鸡
        要求:点击Command1按钮,在List1列表框中显示出符合要求的答案
        在课堂教学的过程中,笔者发现学生能很快地设计好界面,并且在Command_click()事件处理过程中,通过使用循环嵌套的结构进行程序设计,在有课堂手册的举例指导的情况下比较顺利地完成代码编写并输出结果。
        课堂手册举例代码:
        Private Sub Command1_Click()
        Dim i As Integer
        Dim j As Integer
        For i = 1 To 99
         For j = 1 To 99
           If i + j = 100 Then
            List1.AddItem Str(i) + "+" + Str(j) + "=" + "100"
          End If
         Next j
        Next i
        End Sub
        随后引入算法的优化概念,让学生尝试修改For语句的初值或终值来提高算法的效率。
        在一次鸡兔同笼的问题的课堂教学中,笔者惊奇地发现,有个别同学并没有通过枚举算法来编写程序,直接找到了相关数据的代数关系,并很快算出结果。
        枚举算法:
        Private Sub Command1_Click()
        Dim head As Integer
        Dim foot As Integer
        Dim i As Integer
        Dim j As Integer
        head = Text1.Text
        foot = Text2.Text
        For i = 1 To head
            j = head - i
           If i * 4 + j * 2 = foot Then
            List1.AddItem "兔子有:" + Str(i) + "只" + "鸡有:" + Str(j) + "只"
          End If
        Next i
        End Sub
        而学生的代码极为简洁
        Private Sub Command1_Click()
        Dim head As Integer
        Dim foot As Integer
        Dim i As Integer
        Dim j As Integer
        head = Text1.Text
        foot = Text2.Text
        i = (foot - hear * 2 )/2
        j =ihead - i
            List1.AddItem "兔子有:" + Str(foot-hear*2)/2) + "只" + "鸡有:" + Str(j) + "只"
        End Sub
        最后笔者了解到,该算法出自班里的李某,曾在小学奥数中获一等奖,并且很喜欢专研类似的趣味数学问题,笔者表扬了这名同学,并鼓励大家一题多解,寻求不同的算法。
        课后的思考题:
        有12个球,其中有一个小球的质量与其他小球不一样,现,要求用一个没有砝码的天平称最少称几次就能找出这个不一样的小球,名判断其质量是轻了还是重了?
        王员外去外地出差办公需要住宿7天,身上带着7个串成一串的金环,每天住宿费正好是一个金环,王员外想每天支付住宿费用,请问王员外至少剪断几个金环才行?
        (三)小组合作挑战:项目开发
        考虑课时和学生课余时间等因素,该阶段的任务最初的设计的选题模式更改为命题模式,结合第一阶段小弘的加法训练与测试课堂案例,要求学生在2~3节课的时间完成简易计算器的开发,规定四人小组分工完成加、减、乘、除的基本功能外,合作完成二进制、十进制、十六进制之间的转换,加、减、乘、除基本功能重在输入数字的设计上,4人小组每人分工完成,最终汇总时会发现该环节的设计各自有所不同,协商出小组认为最为合理的输入方式,进制转换是高考命题的重要知识点,通过合作讨论加深对进制转换过程的了解,并巩固这一知识点。
四、研究成效
        (一)学习兴趣提高
        自开展研究以来,学生对算法与程序设计模块的兴趣明显增强,部分害怕动手的操作的同学,也表示愿意尝试程序设计,渴望能够成功设计出一个程序,对信息技术学科也有了很大的改观,觉得学习该学科并不仅仅只是停留在识记的层面上,更多知识点的学习和掌握靠的是行为记忆,和自身成功或是失败的操作经历,从课后应付完成作业,到积极主动思考作业练习,案例中的李某,经常会在教室的电脑上编写一些小程序,帮助解决一些数学小问题,自己也在自学信息技术选考的排序和查找算法,表示自己找到了学习的乐趣,很享受程序运行出结果的成就感。
        (二)动手能力提高
        大部分同学在学习兴趣引领下,愿意去尝试程序设计,并且在基础知识较为扎实的前提下,不再惧怕界面设计出错,程序语句错误等情况,因为即使是老师在演示过程中也不是一次就能成功,也要通过几次调试才能排除这些错误,并且在之前的教学过程中的程序调试错误,几乎涵盖了所有可能出现的情况,学生自身已经具有一定的免疫能力,知道在出错之后要怎么改,在哪里改,已经逐渐习惯这种错误修改。也逐渐开始享受这种逐个错误排除后最终将程序调试成功的过程。
        (三)算法思维提升
        利用这样的模式开展教学,在授课过程中渗透着算法思维的培养与提高,提升学生的算法思维,学生在经历了着三个阶段的学习后对算法与程序设计模块的理解有了更深层面的认识,在学习兴趣和动手能力都有所提高的情况下,敢于用大胆假设,小心求证的算法思维去解决实际问题,并将这种思维方式应用在其他学科上,班里一名学生很高兴地告诉笔者,自己用算法与程序设计模块的思路解决了一道数学排列组合的问题,数学老师提问他的时候,该学生是这样回答的:“我用的方法是枚举法,先把可能出现的情况列举出来,然后在逐一计算。”这非常符合我们信息技术学科的算法思维,也充分说明了学生真正地将所学的思维方式应用在实际的生活问题当中。
        
        



投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: