论文部分内容阅读
在以前的文章里,我曾经提出:学习本身是学生通过对经验的主动改造来创造知识,与教师无关。有教师不解:学习怎么和教师无关呢?是的,学习是学生自己的事情,教师无法代替。但正因为学习和教师“无关”,所以对教师就提出了更高的要求。因为教师要做的就是最大化地调动学生的学习积极性,引导学生主动思考、质疑问难,助力学生成为自主独立、有创造个性的学习者。这就衍生出一个新问题:教师应该怎么做,才能最大化地解放学生的思维,激活学生的学习力?
最近我上的一节《枚举算法》课对我触动很大。经过前几年的积累,这一课的教学设计已经相对成熟。在整堂课上,我尽量精讲,让学生多练,也有留白让学生自主研究,还设置了一些知识冲突来培养学生的综合能力。但今年在备课时,我问自己:这样的设计真的没有问题了吗?还可不可以做得更好?从教的角度来说,我感觉没有太大问题,而从学的角度追问:这样的教学真的激活学生的学习力了吗?一问唤醒梦中人!我突然惊醒:我自以为非常成熟的教学设计,如果从学生的学这方面来考量,依旧还有很多提升变革的空间。
于是,我从“最大化地解放学生思维、激活学生学习力”这一诉求出发,对教学设计进行了改进。为了更好地进行前后对比,我先呈现原先的教学过程,然后再阐述改进方案。我设定《枚举算法》这节课的主要教学目标为:通过解决“找密码”问题逐步理解枚举算法原理;初步掌握ListBox列表框的使用;进一步培养编程综合能力。
改进前的教学过程
1.提出“找密码”任务
上课伊始,我打开一个Word文档,发觉设置了密码。然后告知学生找密码的条件:①该密码是5位数;②密码为25**1,百位和十位上的数字不记得了;③这个5位数是17或53的倍数。请他们编程找出密码。
教学阐析:为了引出枚举算法,我用“找密码”这个问题作为载体,但没有设置复杂情境,直接开门见山给出找密码的条件。
2.师生共同分析问题
根据密码条件,我和学生一起分析问题,达成几点共识:①确定25**1中“**”的初值是0,终值为99。②“**”以j表示,在j从0到99变化过程中,密码n=25001 j*10。③“密码是17或53的倍数”的表达式是n mod 17=0 or n mod 53=0。所以,这个问题就变成:在变量j从0到99变化的过程中,计算n=25001 j*10的值,判断n mod 17=0 or n mod 53=0条件是否成立,如果成立,就输出n的值。
教学阐析:为了让学生初步建构枚举算法原理,我从“确定范围”“情况枚举”“条件判断”几个层次引导学生达成几点共识,这几点共识都是基于我的预设而形成的,学生的思考也在我的引导下完成。
3.教师讲解主要程序体
上课前我事先建好窗体,程序的变量定义部分也已完成(如图1),随后我边讲解边输入主要程序。该程序用到了列表框ListBox,这是这节课的新知识点,在程序编写过程中需要讲解。同时,我也留白了密码计数语句和密码个数输出语句让学生自己研究。
教学阐析:事先建好窗体和完成变量定义是为了节约时间,聚焦重点。留白密码计数语句和密码个数输出语句,能让学生在自主编程环节产生知识冲突,促进学生自主思考和探究。
4.学生编写主要程序体
讲解分析后,学生开始自主编写主要程序。学生可能会遇到的问题主要有三个:①程序结构梳理不够清晰。②密码计数语句c=c 1放错地方。③程序格式不够规范。几分钟后,陆陆续续有学生成功了。运行成功的学生发现,输出的密码个数并不唯一,而是8个(如图2)。
教学阐析:主体语句虽然不到十行,但如果学生的程序逻辑结构不清晰,就会产生问题。密码计数语句应该放在哪里?是分支结构里还是分支结构外循环结构内?密码个数输出语句的位置,个别学生也会犯错。同时,字符串连接符号“ ”的运用也是一个需要巩固的知识点。虽然前面已经有了教师讲解,但学生只有通过自身实践,才会真正解决并理解这些问题。
5.解决平方数的问题
没错!按照以上条件,密码确实有8个。随后我抛出新条件:该密码是一个平方数。要解决这个问题,学生首先要写出判断平方数的关系表达式。我让学生自己思考这个问题,同时告诉学生,如果想不出来,可以看一看这个题目,也许在表达式的格式上会有一些启发:在Visual Basic中,已知x、y均是正整数,关系表达式Int(x/y)=x/y为真时,则表示(A)x不能被y整除,(B)x能被y整除,(C)x与y一定相等,(D)x小于y。
过了一会儿,有学生说平方数的问题解决了,但密码却有7个。我坚持说按照这个条件,密码只有1个。那问题出在哪儿呢?学生经过研究,终于明白,原来是优先级惹的祸。学生最初的表达式是n Mod 17=0 Or n Mod 53=0 And Sqr(n)=Int(Sqr(n)),而正确的语句应该是(n Mod 17=0 Or n Mod 53=0)And Sqr(n)=Int(Sqr(n))。密码终于找到,学生用密码兴致勃勃地打开Word文档,发现里面写了一句话:只要坚持,梦想总是会实现的。完整程序如上页图3所示。
教学阐析:这是这节课的一个设计亮点,学生在解决这个问题的过程中非常有兴趣,也有探究成功的满足感。为了帮助学生思考,我提供了一道题目供对照,初衷是为了让学生在思考时找到着力点。至于Word文档里放的是什么,可以根据具体情况巧妙设置。
6.提出枚举算法,分析其原理
解决好这个问题后,我告诉学生,刚才问题求解的过程其实就是在践行一个经典算法——枚举算法。我先提问:你们认为枚举算法是怎样的一种算法?学生思考回答后,我再呈现书面陈述:按照问题要求确定问题解的范围,然后在此范围内把所有可能的解一一罗列出来,并对每个解进行判断,以确定这个可能解是不是问题的真正解,最后把符合要求的解输出,直到所有真正解全部列举完毕。 教学阐析:让学生经历问题解决过程后,再提出其背后的算法原理,符合学习从思考到实践,再到理论总结的学习逻辑。
7.继续完成其他任务
完成“找密码”任务后,学生再自主完成取纸币、找因子、百钱买百鸡等任务,以进一步消化理解枚举算法的原理。这节课没有完成的任务,下节课继续。
教学阐析:对于程序编写课,学生的水平差异会比较明显,有些学生能很快完成任务,有些学生却要花较长时间。为了满足较高水平学生的学习需求,教师需要及时跟进后续任务。
改进方案
以上是我以前的教学设计和上课流程,学生学得很投入,效果也不错。但静下心来分析,我好像被表面的繁华遮蔽而忽略了学习的本真。看似无缝对接的设计、看似行云流水的课堂,其实学生还是在被我“牵着走”,他们的思考力并没有被解放,他们的学习力也没有被充分激活。而按照我的预估,基于学生的前置知识,只需要把一些必要的新知识告诉学生,“找密码”任务应该在学生的最近发展区。好,那就大胆放手试一试!于是我尝试作了这样的改变:课堂一开始,先用一个小程序讲解ListBox使用方法,然后让学生操作理解。接着放手让学生自主编写“找密码”问题。在学生编程的过程中,我只作个别指导或旁白提醒。结果,学生交上来的作业惊到了我,青出于蓝而胜于蓝。原来我担心的问题,如程序结构、平方数、优先级等,都被学生通过自己的理解和逻辑解决了。
限于篇幅,我选取了5份有代表性的作业。上页图4中的作业一,该学生用Do语句来解决,而不是我原来预设的If语句;作业二用If嵌套语句,有效规避了优先级问题。上页图5中的作业三使用If嵌套语句,而且用另外一种方法来判断平方数;作业四用另一种关系表达式描述了“密码是17或53的倍数”,而如果按照我的引导,学生的认知就只停留在一种方法。上页图6中的作业,循环变量的初值和终值另辟蹊径,对平方数的处理更是让人眼前一亮。
课堂综述
原先的教学设计,从课堂一开始,学生就在我的牵引下按部就班地学习,每一步都有预设好的唯一答案。我担心学生自主编程会打乱课堂节奏,所以把每一步都精准设计;我担心学生想不出平方数的关系表达式,还特意提供题目让他们参考。当我沾沾自喜这样精妙的设计时,殊不知,早已禁锢了学生的学习力,忽视了学生的创造力。试想,如果没有我的放手,学生会独立自主地解决问题吗?学生会绞尽脑汁地突破自己的思考极限吗?学生能反馈这些个性化作业吗?学生能看到其他同学的创意和亮点吗?如果没有我的放手,我能更好地了解学生的认知水平和潜力吗?我能更全面地了解学生存在的问题吗?虽然在课堂中,我能感受到有些学生解决不出问题时的急躁,但更多的是他们积极思考的态度,不断尝试的勇气,面对错误持续调试的坚持;我看到的是他们看到参考答案后的若有所思,看到其他同学解题方法后的惊叹和认同。这些丰富的体验,是教师领着他们亦步亦趋看风景时完全感受不到的。当然,这样的设计还有很多需要讨论改进的地方,但至少这样的尝试给了我一个变革的方向。
观点总结
我们总是担心学生能力不够而选择把答案直接告诉他们;我们总是忧虑学生自主思考占用较多时间影响课堂节奏而选择先教后学;我们总是害怕放手了,课堂会变得无序而宁愿戴着镣铐跳舞。虽然这样的担心和忧虑可以理解,但如果回归学习和教学的本质去思考,我们就会发现,一条循规蹈矩的学习路径会让学生的学习能力和创造个性在无形中被一点点弱化,更遑论批判性思维的培养。而我们只有在精细的教学设计中,转换一下教学思路,多给学生真正自主学习的时间和生生之间共享学习资源的机会,才能让课堂真实、有效且丰富。
因此,不要束缚学生,要相信学生的能力,让教师的单兵作战变成师生集体抱团的合作;不要担心时间成本的付出,要学会耐心等待,只要学生在全身心地思考和实践,那我们的等待都是值得的。学生的学习力就是在教师的信任、等待,以及当学生有需要时及时出现的指导释疑中逐渐蓄积,最终厚积薄发,反哺给你一个自主独立、敢于质疑问难、有创造力的学习者。
叶圣陶先生曾说,“我以为好的先生不是教书,不是教学生,乃是教学生学。教学生学,这是教育最自然的常识,也是我们必须回归的旅途”。
收笔之际,有句歌词突然跳了出来:有一种爱叫做放手!
最近我上的一节《枚举算法》课对我触动很大。经过前几年的积累,这一课的教学设计已经相对成熟。在整堂课上,我尽量精讲,让学生多练,也有留白让学生自主研究,还设置了一些知识冲突来培养学生的综合能力。但今年在备课时,我问自己:这样的设计真的没有问题了吗?还可不可以做得更好?从教的角度来说,我感觉没有太大问题,而从学的角度追问:这样的教学真的激活学生的学习力了吗?一问唤醒梦中人!我突然惊醒:我自以为非常成熟的教学设计,如果从学生的学这方面来考量,依旧还有很多提升变革的空间。
于是,我从“最大化地解放学生思维、激活学生学习力”这一诉求出发,对教学设计进行了改进。为了更好地进行前后对比,我先呈现原先的教学过程,然后再阐述改进方案。我设定《枚举算法》这节课的主要教学目标为:通过解决“找密码”问题逐步理解枚举算法原理;初步掌握ListBox列表框的使用;进一步培养编程综合能力。
改进前的教学过程
1.提出“找密码”任务
上课伊始,我打开一个Word文档,发觉设置了密码。然后告知学生找密码的条件:①该密码是5位数;②密码为25**1,百位和十位上的数字不记得了;③这个5位数是17或53的倍数。请他们编程找出密码。
教学阐析:为了引出枚举算法,我用“找密码”这个问题作为载体,但没有设置复杂情境,直接开门见山给出找密码的条件。
2.师生共同分析问题
根据密码条件,我和学生一起分析问题,达成几点共识:①确定25**1中“**”的初值是0,终值为99。②“**”以j表示,在j从0到99变化过程中,密码n=25001 j*10。③“密码是17或53的倍数”的表达式是n mod 17=0 or n mod 53=0。所以,这个问题就变成:在变量j从0到99变化的过程中,计算n=25001 j*10的值,判断n mod 17=0 or n mod 53=0条件是否成立,如果成立,就输出n的值。
教学阐析:为了让学生初步建构枚举算法原理,我从“确定范围”“情况枚举”“条件判断”几个层次引导学生达成几点共识,这几点共识都是基于我的预设而形成的,学生的思考也在我的引导下完成。
3.教师讲解主要程序体
上课前我事先建好窗体,程序的变量定义部分也已完成(如图1),随后我边讲解边输入主要程序。该程序用到了列表框ListBox,这是这节课的新知识点,在程序编写过程中需要讲解。同时,我也留白了密码计数语句和密码个数输出语句让学生自己研究。
教学阐析:事先建好窗体和完成变量定义是为了节约时间,聚焦重点。留白密码计数语句和密码个数输出语句,能让学生在自主编程环节产生知识冲突,促进学生自主思考和探究。
4.学生编写主要程序体
讲解分析后,学生开始自主编写主要程序。学生可能会遇到的问题主要有三个:①程序结构梳理不够清晰。②密码计数语句c=c 1放错地方。③程序格式不够规范。几分钟后,陆陆续续有学生成功了。运行成功的学生发现,输出的密码个数并不唯一,而是8个(如图2)。
教学阐析:主体语句虽然不到十行,但如果学生的程序逻辑结构不清晰,就会产生问题。密码计数语句应该放在哪里?是分支结构里还是分支结构外循环结构内?密码个数输出语句的位置,个别学生也会犯错。同时,字符串连接符号“ ”的运用也是一个需要巩固的知识点。虽然前面已经有了教师讲解,但学生只有通过自身实践,才会真正解决并理解这些问题。
5.解决平方数的问题
没错!按照以上条件,密码确实有8个。随后我抛出新条件:该密码是一个平方数。要解决这个问题,学生首先要写出判断平方数的关系表达式。我让学生自己思考这个问题,同时告诉学生,如果想不出来,可以看一看这个题目,也许在表达式的格式上会有一些启发:在Visual Basic中,已知x、y均是正整数,关系表达式Int(x/y)=x/y为真时,则表示(A)x不能被y整除,(B)x能被y整除,(C)x与y一定相等,(D)x小于y。
过了一会儿,有学生说平方数的问题解决了,但密码却有7个。我坚持说按照这个条件,密码只有1个。那问题出在哪儿呢?学生经过研究,终于明白,原来是优先级惹的祸。学生最初的表达式是n Mod 17=0 Or n Mod 53=0 And Sqr(n)=Int(Sqr(n)),而正确的语句应该是(n Mod 17=0 Or n Mod 53=0)And Sqr(n)=Int(Sqr(n))。密码终于找到,学生用密码兴致勃勃地打开Word文档,发现里面写了一句话:只要坚持,梦想总是会实现的。完整程序如上页图3所示。
教学阐析:这是这节课的一个设计亮点,学生在解决这个问题的过程中非常有兴趣,也有探究成功的满足感。为了帮助学生思考,我提供了一道题目供对照,初衷是为了让学生在思考时找到着力点。至于Word文档里放的是什么,可以根据具体情况巧妙设置。
6.提出枚举算法,分析其原理
解决好这个问题后,我告诉学生,刚才问题求解的过程其实就是在践行一个经典算法——枚举算法。我先提问:你们认为枚举算法是怎样的一种算法?学生思考回答后,我再呈现书面陈述:按照问题要求确定问题解的范围,然后在此范围内把所有可能的解一一罗列出来,并对每个解进行判断,以确定这个可能解是不是问题的真正解,最后把符合要求的解输出,直到所有真正解全部列举完毕。 教学阐析:让学生经历问题解决过程后,再提出其背后的算法原理,符合学习从思考到实践,再到理论总结的学习逻辑。
7.继续完成其他任务
完成“找密码”任务后,学生再自主完成取纸币、找因子、百钱买百鸡等任务,以进一步消化理解枚举算法的原理。这节课没有完成的任务,下节课继续。
教学阐析:对于程序编写课,学生的水平差异会比较明显,有些学生能很快完成任务,有些学生却要花较长时间。为了满足较高水平学生的学习需求,教师需要及时跟进后续任务。
改进方案
以上是我以前的教学设计和上课流程,学生学得很投入,效果也不错。但静下心来分析,我好像被表面的繁华遮蔽而忽略了学习的本真。看似无缝对接的设计、看似行云流水的课堂,其实学生还是在被我“牵着走”,他们的思考力并没有被解放,他们的学习力也没有被充分激活。而按照我的预估,基于学生的前置知识,只需要把一些必要的新知识告诉学生,“找密码”任务应该在学生的最近发展区。好,那就大胆放手试一试!于是我尝试作了这样的改变:课堂一开始,先用一个小程序讲解ListBox使用方法,然后让学生操作理解。接着放手让学生自主编写“找密码”问题。在学生编程的过程中,我只作个别指导或旁白提醒。结果,学生交上来的作业惊到了我,青出于蓝而胜于蓝。原来我担心的问题,如程序结构、平方数、优先级等,都被学生通过自己的理解和逻辑解决了。
限于篇幅,我选取了5份有代表性的作业。上页图4中的作业一,该学生用Do语句来解决,而不是我原来预设的If语句;作业二用If嵌套语句,有效规避了优先级问题。上页图5中的作业三使用If嵌套语句,而且用另外一种方法来判断平方数;作业四用另一种关系表达式描述了“密码是17或53的倍数”,而如果按照我的引导,学生的认知就只停留在一种方法。上页图6中的作业,循环变量的初值和终值另辟蹊径,对平方数的处理更是让人眼前一亮。
课堂综述
原先的教学设计,从课堂一开始,学生就在我的牵引下按部就班地学习,每一步都有预设好的唯一答案。我担心学生自主编程会打乱课堂节奏,所以把每一步都精准设计;我担心学生想不出平方数的关系表达式,还特意提供题目让他们参考。当我沾沾自喜这样精妙的设计时,殊不知,早已禁锢了学生的学习力,忽视了学生的创造力。试想,如果没有我的放手,学生会独立自主地解决问题吗?学生会绞尽脑汁地突破自己的思考极限吗?学生能反馈这些个性化作业吗?学生能看到其他同学的创意和亮点吗?如果没有我的放手,我能更好地了解学生的认知水平和潜力吗?我能更全面地了解学生存在的问题吗?虽然在课堂中,我能感受到有些学生解决不出问题时的急躁,但更多的是他们积极思考的态度,不断尝试的勇气,面对错误持续调试的坚持;我看到的是他们看到参考答案后的若有所思,看到其他同学解题方法后的惊叹和认同。这些丰富的体验,是教师领着他们亦步亦趋看风景时完全感受不到的。当然,这样的设计还有很多需要讨论改进的地方,但至少这样的尝试给了我一个变革的方向。
观点总结
我们总是担心学生能力不够而选择把答案直接告诉他们;我们总是忧虑学生自主思考占用较多时间影响课堂节奏而选择先教后学;我们总是害怕放手了,课堂会变得无序而宁愿戴着镣铐跳舞。虽然这样的担心和忧虑可以理解,但如果回归学习和教学的本质去思考,我们就会发现,一条循规蹈矩的学习路径会让学生的学习能力和创造个性在无形中被一点点弱化,更遑论批判性思维的培养。而我们只有在精细的教学设计中,转换一下教学思路,多给学生真正自主学习的时间和生生之间共享学习资源的机会,才能让课堂真实、有效且丰富。
因此,不要束缚学生,要相信学生的能力,让教师的单兵作战变成师生集体抱团的合作;不要担心时间成本的付出,要学会耐心等待,只要学生在全身心地思考和实践,那我们的等待都是值得的。学生的学习力就是在教师的信任、等待,以及当学生有需要时及时出现的指导释疑中逐渐蓄积,最终厚积薄发,反哺给你一个自主独立、敢于质疑问难、有创造力的学习者。
叶圣陶先生曾说,“我以为好的先生不是教书,不是教学生,乃是教学生学。教学生学,这是教育最自然的常识,也是我们必须回归的旅途”。
收笔之际,有句歌词突然跳了出来:有一种爱叫做放手!